使用新代码更新Docker镜像

26

我在理解docker的这一部分方面遇到了困难。我花了很多时间进行研究,发现了像docker-composedocker container commit之类的东西。如果我有一个镜像,并对我的代码库进行更改,我该如何使用代码更改更新我的docker镜像?我以为Dockerfile应该负责此事,但它对我不起作用。感谢任何帮助。

4个回答

23

Dockerfile用于创建Docker镜像,以便运行容器。如果您想要更新镜像配置或镜像内的应用代码,则需要重新构建镜像。

例如,您可能有一个Dockerfile,在构建过程中拉取代码库,在这种情况下,每当有新代码需要包含时,您需要重新构建镜像。或者说,您需要更新应用程序的生产版本,那么您需要重建包含应用程序稳定分支新版本的镜像。

另外,如果您将其用于开发,则可能需要将应用目录挂载为卷,这样可以立即看到更改,而无需重建Docker镜像,除非确有必要。

对于docker-compose,您可以将其视为类似于docker run命令,提供了一种更简单的方式从特定镜像运行容器,包括公开端口、挂载卷或链接多个容器等。

参考:


1
@JBarros35 你好,你是在寻找一组命令来更好地解释答案,而不是阅读吗? - Mostafa Hussein
@JBarros35,它帮助了我。 - Gigino

11
您可以尝试使用 docker-compose up --force-recreate 命令;如果您对 Dockerfile 进行了更改,则可能需要重新构建它。您可以使用 docker-compose build 命令来进行重新构建(您可以在末尾添加 --no-cache 来强制下载依赖项等)。
请注意,在某些情况下,您可能需要使用 docker system prune 命令删除已创建的镜像/构建/容器(您可以在其末尾添加 -a 以同时删除所有停止的容器和所有未使用的镜像--而不仅仅是悬空镜像)。然后,使用 docker-compose build 命令进行构建。
您还可以使用 docker stop $(docker ps -a -q) 命令停止所有 Docker 容器,然后使用 docker rm $(docker ps -a -q) 命令删除这些容器。
希望这些信息能够指引您走向正确的方向,祝您好运!

6

有两个选项。

  1. 如果您使用docker-compose命令,

1.1. 首先运行以下命令删除之前的镜像,

docker rmi 'image_id' or docker rmi -f 'image_id'

1.2. 然后通过运行以下命令重新创建图像:
docker-compose up

如果您正在使用Docker命令运行,请使用"docker build"。

0

我所采用的解决方案:

docker compose up --build --abort-on-container-exit --remove-orphans

准备重新创建图像。 图片将使用缓存层,除了代码部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接