在服务器中将项目打包成docker镜像后进行运行,项目更改后如何将旧版本的镜像实时更新?
你说的项目更改后,是指????
例如,你的项目是有相关配置项的,那你可以将配置文件外置来进行配置文件修改,之后重启容器就OK啊。
如果你是直接在打包容器镜像时就做了很多操作,不能外置配置了(例如微服务,不就有配置中心和注册中心吗,配置中心就是可修改有些配置了),那就只能重新造镜像了。
然后,如果有CI/CD体系,那就 可以有镜像仓库各种,之后重新部署,发布就OK了。
我的解决方案:
在项目代码根目录中创建一个新的Dockerfile文件, 根据项目需要选择适当的基础镜像,并根据项目的特殊需求进行配置。
``` FROM node:12
WORKDIR /app COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm","start"] ```
``` #!/bin/bash
docker pull yourimage # 拉取镜像
docker stop yourcontainer # 停止旧版本容器
docker rm yourcontainer # 删除旧版本容器
docker run -d --name yourcontainer -p yourport:3000 yourimage # 运行新版本镜像 ```
在git仓库设置中,设置一个webhook,将其链接到服务器中的shell脚本。当git仓库或分支发生更改时,webhook会发出一个HTTP POST请求到指定的URL,该请求会触发服务器上的shell脚本运行。
如果你的Dockerfile和项目源代码在同一个git仓库中,你可以使用远程docker API在每次git push时自动构建并更新Docker镜像。
首先,需要在服务器上开启远程Docker API,并在git仓库中设置一个webhook,该webhook会在每次提交时触发Docker Hub或其他云托管服务构建新的Docker镜像。
在Dockerfile中,可以通过ARG或ENV设置项目的版本号。每次构建新的Docker镜像时,可以在webhook中将这个版本号传递给服务器上的shell脚本,shell脚本可以通过远程Docker API在服务器上拉取新的Docker镜像并启动一个新的容器,然后销毁旧版本的容器。
``` # 构建Docker镜像 docker build -t yourimage:$VERSION .
# 推送Docker镜像 docker push yourimage:$VERSION
# 更新Docker镜像 docker pull yourimage:$VERSION
# 停止旧的容器 docker stop yourcontainer
# 启动新的容器 docker run -d --name yourcontainer -p yourport:3000 yourimage:$VERSION ```
通过以上的设置,我们可以实现自动构建并更新Docker镜像,以保证项目始终是最新的状态。
在Docker中,要实现项目的实时更新,可以使用以下步骤:
打包一个新的镜像
首先,将最新版本的项目代码打包成一个新的Docker镜像。确保在 Dockerfile 中配置了正确的命令和项目路径等信息。
给新的镜像打上版本号标签
为了方便管理,给这个新的容器打上版本号标签,比如v1、v2等等。
停止旧容器
在启动新容器之前需要停掉正在运行的旧容器,否则端口会被占用无法启动新容器。
运行新的容器
使用docker run命令启动新的容器,同时指定该容器所使用的镜像名称和版本号。如:
docker run -p 80:8080 --name myapp_v2 myapp:v2
这样就能成功启动容器。
删除旧图片
为了避免可能会出现的空间浪费问题,可以选择删除旧镜像,但需要确保没有任何容器正在使用它。
以上是基本流程,但建议采取更多的实践来制定出适合自己的策略。可以考虑使用一些自动化解决方案如CI/CD工具或者kubernetes等进行部署和监控管理。