我觉得我对如何使用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
是的,您必须重建图像。您不必重命名图像,只需使用旧名称即可。而且你不能删除旧的图像。
当您重新运行容器时,它将使用新版本。仍在运行的容器不会受到影响,您必须停止它们。