对于运维人员来说,在使用Docker进行容器化部署后,直接在生产环境修改代码开始变的麻烦。原因是在修改容器内的代码后,如果容器挂掉,不论是意外还是计划内,Docker一般会创建一个新的容器,新容器不会包含修改的内容。除此之外,一个镜像也会启动多个容器,同时修改多个容器也是一件工作量巨大的工作。
容器是根据镜像启动的,如果要永久性的将修改后的文件部署,必修改镜像,再用新的镜像启动容器。下面以项目Demo 1.0
为例讲一个完整的例子。
- 通过
docker exec
命令进入容器根据需求修改文件。 - 通过
docker commit
命令讲容器保存为一个新的镜像,镜像的版本号应不同于原镜像版本号。1
docker commit -m "注释内容" [容器id] Demo:1.0.1
- 将镜像导出为文件:
1
docker save -o Demo.tar Demo:1.0.1
- 将
Demo.tar
下载至可以上传镜像的计算机,导入并推送镜像:1
2docker load -i Demo.tar
docker push Demo:1.0.1 - 使用
Domo:1.0.1
重新部署项目。
当然,这种做法只能作为临时的应急方法,并不规范,还是应该让开发尽快发布补丁版本。