如果我想更改docker容器中使用的文件,我是否要重新创建映像并删除旧容器



我觉得我对如何使用docker有一个根本的误解。

假设我有打印1+1的test.py。然后,我用一个具有FROM、CMD等…的Dockerfile将其容器化

构建完图像后,我现在可以运行docker run ...,它会输出2,耶!

但现在假设在我的本地上,我编辑test.py,使其打印2+2。我现在必须重建映像并制作一个新容器吗?我可以使用与我构建1+1版本时相同的名称吗?这是正确的方法吗???

  • 您必须重建图像
  • 它可能有相同的名称,也可能有不同的名称。如果给它取相同的名称,则旧图像在本地仍然存在,但docker images将显示<none>作为其名称或标记。docker system prune将清理旧图像
  • 必须针对新映像运行新容器

如果容器只是运行一次性测试,您可以在构建新映像之前删除旧容器,或者使用docker run --rm选项让容器删除自己。

docker run --rm the-image
# prints 2
$EDITOR test.py
docker build -t the-image .
docker run --rm the-image
# prints 4

但是,如果它是一个长时间运行的容器,你需要停止并重新创建它。容器将继续运行旧代码,直到你重新创建它,并且在构建新容器时运行旧容器是安全的。

docker run -d -p 8080:8080 --name the-container the-image
curl http://localhost:8080/test-result
# prints 2
$EDITOR test.py
docker build -t the-image .
curl http://localhost:8080/test-result
# still prints 2
docker stop the-container
docker rm the-container
docker run -d -p 8080:8080 --name the-container the-image
curl http://localhost:8080/test-result
# now prints 4

是的,您必须重建图像。您不必重命名图像,只需使用旧名称即可。而且你不能删除旧的图像。

当您重新运行容器时,它将使用新版本。仍在运行的容器不会受到影响,您必须停止它们。

最新更新