在服务器中将项目打包成docker镜像后进行运行,项目更改后如何将旧版本的镜像实时更新?

在服务器中将项目打包成docker镜像后进行运行,项目更改后如何将旧版本的镜像实时更新?

你说的项目更改后,是指????
例如,你的项目是有相关配置项的,那你可以将配置文件外置来进行配置文件修改,之后重启容器就OK啊。
如果你是直接在打包容器镜像时就做了很多操作,不能外置配置了(例如微服务,不就有配置中心和注册中心吗,配置中心就是可修改有些配置了),那就只能重新造镜像了。
然后,如果有CI/CD体系,那就 可以有镜像仓库各种,之后重新部署,发布就OK了。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1066177
  • 这篇博客你也可以参考下:docker运行项目失败 云服务器数据盘如何挂载 docker目录挂载到数据盘
  • 除此之外, 这篇博客: 实战Docker虚拟化技术中的 运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1.   轻量级虚拟化
  • 您还可以看一下 李振良老师的一天掌握 Docker课程中的 为什么要用容器?解决什么问题?小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我的解决方案:

    1. 创建Dockerfile文件并编写配置。

    在项目代码根目录中创建一个新的Dockerfile文件, 根据项目需要选择适当的基础镜像,并根据项目的特殊需求进行配置。

    ``` FROM node:12

    WORKDIR /app COPY package*.json ./

    RUN npm install

    COPY . .

    EXPOSE 3000

    CMD ["npm","start"] ```

    1. 在服务器上建立一个shell脚本,用于在服务器上拉取docker镜像并运行项目。

    ``` #!/bin/bash

    docker pull yourimage # 拉取镜像

    docker stop yourcontainer # 停止旧版本容器

    docker rm yourcontainer # 删除旧版本容器

    docker run -d --name yourcontainer -p yourport:3000 yourimage # 运行新版本镜像 ```

    1. 建立git webhook并与shell脚本关联。

    在git仓库设置中,设置一个webhook,将其链接到服务器中的shell脚本。当git仓库或分支发生更改时,webhook会发出一个HTTP POST请求到指定的URL,该请求会触发服务器上的shell脚本运行。

    1. 使用远程docker API自动构建并更新Docker镜像。

    如果你的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中,要实现项目的实时更新,可以使用以下步骤:

  1. 打包一个新的镜像
    首先,将最新版本的项目代码打包成一个新的Docker镜像。确保在 Dockerfile 中配置了正确的命令和项目路径等信息。

  2. 给新的镜像打上版本号标签
    为了方便管理,给这个新的容器打上版本号标签,比如v1、v2等等。

  3. 停止旧容器
    在启动新容器之前需要停掉正在运行的旧容器,否则端口会被占用无法启动新容器。

  4. 运行新的容器
    使用docker run命令启动新的容器,同时指定该容器所使用的镜像名称和版本号。如:

    docker run -p 80:8080 --name myapp_v2 myapp:v2
    

    这样就能成功启动容器。

  5. 删除旧图片
    为了避免可能会出现的空间浪费问题,可以选择删除旧镜像,但需要确保没有任何容器正在使用它。

以上是基本流程,但建议采取更多的实践来制定出适合自己的策略。可以考虑使用一些自动化解决方案如CI/CD工具或者kubernetes等进行部署和监控管理。