对于运维人员来说,在使用Docker进行容器化部署后,直接在生产环境修改代码开始变的麻烦。原因是在修改容器内的代码后,如果容器挂掉,不论是意外还是计划内,Docker一般会创建一个新的容器,新容器不会包含修改的内容。除此之外,一个镜像也会启动多个容器,同时修改多个容器也是一件工作量巨大的工作。

容器是根据镜像启动的,如果要永久性的将修改后的文件部署,必修改镜像,再用新的镜像启动容器。下面以项目Demo 1.0为例讲一个完整的例子。

  1. 通过docker exec命令进入容器根据需求修改文件。
  2. 通过docker commit命令讲容器保存为一个新的镜像,镜像的版本号应不同于原镜像版本号。
    1
    docker commit -m "注释内容" [容器id] Demo:1.0.1 
  3. 将镜像导出为文件:
    1
    docker save -o Demo.tar Demo:1.0.1
  4. Demo.tar下载至可以上传镜像的计算机,导入并推送镜像:
    1
    2
    docker load -i Demo.tar
    docker push Demo:1.0.1
  5. 使用Domo:1.0.1重新部署项目。

当然,这种做法只能作为临时的应急方法,并不规范,还是应该让开发尽快发布补丁版本。