繁体   English   中英

docker-compose 重建一个服务的镜像并使用它

docker-compose rebuild image of one service and use it

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图让 docker-compose 到:

  • 重建某个服务的镜像(只有源代码改变了,Dockerfile没有)
  • 使用新映像在 docker-compose 中重新“升级”该服务

我发现我必须在该服务的 Dockerfile 上执行docker build ,然后对要使用的新图像执行docker-compose up <service-name>

有没有办法只使用 docker-compose 来做到这一点?

下面是我为获得要在 docker-compose 中使用的新图像而采取的漫长曲折路径。


docker-compose使用新镜像之旅

这是当前的 docker-compose 设置。

 Container          Repository          Tag       Image Id       Size
-----------------------------------------------------------------------
books-server   books-server            v06      c35c65375942   13.37 MB
hasura-proxy   hasura/graphql-engine   v1.3.2   a499c4b91ba4   48.34 MB
nginx-proxy    jwilder/nginx-proxy     latest   fcb5a96e19c1   160.6 MB
postgres       postgres                12       7b9cf7d827b4   314 MB

我对books-server进行了更改,底层源代码被编译成可执行文件,我希望重建该图像并在 docker-compose 中使用。

如果我发出:

> docker-compose up --detach --build books-server

结果:

books-server is up-to-date

尝试:

> docker-compose build --no-cache books-server

结果:

books-server uses an image, skipping

尝试:

> docker-compose up --build --no-deps --force-recreate -d books-server

结果:

Recreating books-server ... done

查看:

> docker-compose images

结果

 Container          Repository          Tag       Image Id       Size
-----------------------------------------------------------------------
books-server   books-server            v06      c35c65375942   13.37 MB
hasura-proxy   hasura/graphql-engine   v1.3.2   a499c4b91ba4   48.34 MB
nginx-proxy    jwilder/nginx-proxy     latest   fcb5a96e19c1   160.6 MB
postgres       postgres                12       7b9cf7d827b4   314 MB

图书服务器的图像 id 仍然是c35c65375942

尝试:

> docker-compose restart books-server
Restarting books-server ... done

检查图像:

仍在使用图像 ID c35c65375942

> docker-compose images

 Container          Repository          Tag       Image Id       Size
-----------------------------------------------------------------------
books-server   books-server            v06      c35c65375942   13.37 MB
hasura-proxy   hasura/graphql-engine   v1.3.2   a499c4b91ba4   48.34 MB
nginx-proxy    jwilder/nginx-proxy     latest   fcb5a96e19c1   160.6 MB
postgres       postgres                12       7b9cf7d827b4   314 MB

尝试:

我更改为 books-server 目录,使用相同的标签( books-server:v06 )在其 Dockerfile 上执行 docker 构建

> cd ..\books-server\
> docker build -t books-server:v06 .

结果:

构建一个新图像55ea56a70aa9并标记

Sending build context to Docker daemon  73.43MB
Step 1/21 : FROM google/dart-runtime-base AS dart-runtime
...<snip>...
Removing intermediate container bff4c43f6bf0
 ---> 55ea56a70aa9
Successfully built 55ea56a70aa9
Successfully tagged books-server:v06

我检查docker images

并看到标签已从图像c35c65375942中删除并提供给55ea56a70aa9

> docker images

REPOSITORY                        TAG                 IMAGE ID            CREATED              SIZE
<none>                            <none>              d50d6ccf14a1        About a minute ago   798MB
books-server                      v06                 55ea56a70aa9        About a minute ago   13.4MB
<none>                            <none>              c35c65375942        31 minutes ago       13.4MB

我检查docker-compose images

 Container          Repository          Tag       Image Id       Size
-----------------------------------------------------------------------
books-server   <none>                  <none>   c35c65375942   13.37 MB
hasura-proxy   hasura/graphql-engine   v1.3.2   a499c4b91ba4   48.34 MB
nginx-proxy    jwilder/nginx-proxy     latest   fcb5a96e19c1   160.6 MB
postgres       postgres                12       7b9cf7d827b4   314 MB

图书服务器仍在使用旧图像,现在匿名运行,因为图像标签已被重新分配为55ea56a70aa9

我尝试在 docker-compose 中重新启动服务:

> docker-compose restart books-server
Restarting books-server ... done

我检查了 docker-compose 图像,发现旧图像c35c65375942仍在使用中。

 Container          Repository          Tag       Image Id       Size
-----------------------------------------------------------------------
books-server   <none>                  <none>   c35c65375942   13.37 MB
hasura-proxy   hasura/graphql-engine   v1.3.2   a499c4b91ba4   48.34 MB
nginx-proxy    jwilder/nginx-proxy     latest   fcb5a96e19c1   160.6 MB
postgres       postgres                12       7b9cf7d827b4   314 MB

我重新启动 docker-compose 并最终看到正在使用的新图像( 55ea56a70aa9 ):

> docker-compose up -d books-server
Recreating books-server ... done
> docker-compose images
 Container          Repository          Tag       Image Id       Size
-----------------------------------------------------------------------
books-server   books-server            v06      55ea56a70aa9   13.37 MB
hasura-proxy   hasura/graphql-engine   v1.3.2   a499c4b91ba4   48.34 MB
nginx-proxy    jwilder/nginx-proxy     latest   fcb5a96e19c1   160.6 MB
postgres       postgres                12       7b9cf7d827b4   314 MB

概括

Is there a docker-compose command that can rebuild the service image and restart that service or must it be done using a docker build Dockerfile and docker-compose up <service> ?

感谢您的任何见解。

1 个回复

感谢 timsmelik 评论,我意识到我没有在 docker-compose.yml 的books-server服务中使用build:指令,并且只有一个标记的图像名称,docker-compose 在生产新版本时不容易替换/使用。

删除image:指令并将其替换为相对build:目标,一个简单的docker-compose up --build -d books-server正在重建服务并在 docker-compose 项目中使用它。

  books-server:
    # ↓ new build directive
    build: ../books-server
    # ↓ old image directive, removed
    # image: books-server:v06
    container_name: books-server
    <other settings>...
1 Docker-Compose 带有 2 个使用相同依赖项和端口的映像

Docker 新手在这里,所以我的术语可能略有偏差,但我正在努力使其正确。 我目前有 2 个基于 python 的独立项目,每个项目都有自己的docker-compose.yml文件,我希望其中一个包含在另一个中。 (问题?)我感到困惑的是,它们各自在单独运行时使用相同的端口/依赖项,所以在组合 ...

2 docker-compose,无需启动容器即可重建映像

我泊坞窗组成,可以如下定义上下文 其中build是指包含Dockerfile和构建资源的目录。 通过使用命令docker-compose up -d --build可以重建映像并重新启动更改的容器。 但是使用下面的docker-compose文件,是否可以仅构建映像而不启动它们,并且 ...

3 如何构建私有 docker 映像,然后在一台机器上的 docker-compose 设置中使用它们?

我面临的问题: 我的服务器上有一个 docker-compose 设置我想为我的项目构建 docker 图像(我使用drone.io)并将它们存储在所述服务器上我想在撰写设置中使用我的私有图像创建容器我做了什么: 我不想将我的私有 docker 映像推送到 DockerHub,所以我决定在我的 d ...

4 如何使用 docker-compose 更新现有图像?

我有多个微服务,并且正在使用 docker-compose 进行开发部署。 当微服务代码库发生一些变化时,我会触发 ci 作业以重新部署它们。 我有下面的脚本来做到这一点。 但是每次我必须从头开始构建所有图像,然后运行它们。 在所有这些操作之后,我有anonymous图像。 所以我使用最后一个脚本来 ...

5 如何使用docker-compose创建可以部署的映像

如何使用docker-compose创建可以部署的映像? 我对docker-compose有点困惑,感觉这是一个很棒的工具,但是,如何在没有Dockerfile的情况下为我的服务构建图像? 我想要实现的是从docker-compose.yml文件中声明的服务创建新图像。 例如,假设 ...

8 如何使docker-compose构建映像一次并重复使用它来运行容器?

我试图运行从同一图像构建的多个容器。 我的问题是当我用这种方式定义我docker-compose.yml 我会得到三个容器,但我也得到三个图像。 如果我有数百个容器,我不喜欢有数百个图像的想法。 这使我的本地图像存储库完全无法使用且无法读取。 思考和搜索解决方案我尝试自己 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM