我在理解docker的这一部分方面遇到了困难。我花了很多时间进行研究,发现了像docker-compose
和docker container commit
之类的东西。如果我有一个镜像,并对我的代码库进行更改,我该如何使用代码更改更新我的docker镜像?我以为Dockerfile应该负责此事,但它对我不起作用。感谢任何帮助。
我在理解docker的这一部分方面遇到了困难。我花了很多时间进行研究,发现了像docker-compose
和docker container commit
之类的东西。如果我有一个镜像,并对我的代码库进行更改,我该如何使用代码更改更新我的docker镜像?我以为Dockerfile应该负责此事,但它对我不起作用。感谢任何帮助。
Dockerfile
用于创建Docker镜像,以便运行容器。如果您想要更新镜像配置或镜像内的应用代码,则需要重新构建镜像。
例如,您可能有一个Dockerfile,在构建过程中拉取代码库,在这种情况下,每当有新代码需要包含时,您需要重新构建镜像。或者说,您需要更新应用程序的生产版本,那么您需要重建包含应用程序稳定分支新版本的镜像。
另外,如果您将其用于开发,则可能需要将应用目录挂载为卷,这样可以立即看到更改,而无需重建Docker镜像,除非确有必要。
对于docker-compose
,您可以将其视为类似于docker run
命令,提供了一种更简单的方式从特定镜像运行容器,包括公开端口、挂载卷或链接多个容器等。
参考:
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)
命令删除这些容器。有两个选项。
1.1. 首先运行以下命令删除之前的镜像,
docker rmi 'image_id' or docker rmi -f 'image_id'
docker-compose up
我所采用的解决方案:
docker compose up --build --abort-on-container-exit --remove-orphans