Docker之容器迁移与备份
1 容器保存为镜像
# 作用:
根据容器生成一个新的镜像
# 命令格式:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 命令参数(OPTIONS):
-a, --author string 作者
-c, --change list 为创建的镜像加入Dockerfile命令
-m, --message string 提交信息,类似git commit -m
-p, --pause 提交时暂停容器 (default true)
# 命令演示
docker commit 容器名字/id号 镜像名字
docker commit mynginx mynginx_i
docker images
2 镜像备份
# 作用:
将镜像保存为tar文件,把镜像打包成压缩包
# 命令演示:
docker save -o 压缩包名字 镜像名字
docker save -o mynginx.tar mynginx_i
3 镜像恢复与迁移
首先我们先删除掉mynginx_i 镜像 然后执行此命令进行恢复
# 作用:
从一个tar文件中导入内容创建一个镜像,把压缩包恢复为镜像
# 命令演示:
docker load -i mynginx.tar
4 利用容器部署项目,迁移与备份的应用
4.1 部署django项目
服务器需要先安装项目依赖的软件和环境,如python、redis、mysql、nginx、uwsgi ,其次需要安装虚拟环境,代码和项目依赖需要创建在虚拟环境中。这种部署方式十分繁琐,需要安装大量的软件,如果是windows环境开发的项目,在Linux服务器上安装依赖会有很多问题,另外项目需要建在虚拟环境中隔离。在实际生产环境中,项目更新比较麻烦;测试、运维人员从git拉下项目,由于环境、版本等原因,安装项目依赖也有各种问题。
4.2 利用docker部署项目
以django项目为例,需要python环境以及其他依赖环境,我们通过启动一个python容器,把git上拉取的完整项目环境(项目代码+项目依赖)放到容器中,此python容器已经可以拉起一个django项目,但每次启动django项目需要docker exec执行/bin/bash,通过伪终端进入项目目录执行runserver命令;
为方便使用,我们利用docker commit python36 mydjango:v1
把这个容器制作成一个镜像,此镜像就是django项目镜像,它的优势体现在:
1、基于mydjango:v1
镜像运行容器,把runserver命令预设进去,以后通过docker命令容器的启动/停止/重启,就能控制django项目的运行和停止;
2、基于mydjango:v1
镜像运行容器,做了文件映射,以后更新版本,宿主机cd到项目根目录 git pull origin master
拉取最新版,重启容器,项目就更新了;如果运行容器时没有做文件映射,后期也可以添加和修改:https://cloud.tencent.com/developer/article/1757920?ivk_sa=1025922x
3、利用docker save -o mydjango.tar mydjango:v1
把镜像打包tar文件,迁移到其他机器,如给到测试、运维,再利用docker load -i mydjango.tar
恢复镜像,基于mydjango:v1
镜像运行容器,就保持了在相同环境下运行此django项目。
注意:不建议把所有服务都装一个容器中,最好redis装一个容器、mysql装一个容器,python环境包括django装一个容器。
# 操作步骤
# 1 git clone:从git上拉取项目代码
# 2 启动一个python36容器,并在容器内创建一个/project目录
docker run -di --name=python36 python:3.6
docker exec -ti python36 mkdir /project
# 3 把项目从服务器拷贝到容器内部, django_docker文件夹是clone下来的django项目根路径,注意不是映射,是这种关系/project/django_docker
docker cp /opt/zl/django_docker python36:/project
# 4 进入容器,cd到project/django_docker路径下,安装项目依赖,不然找不到requirements.txt文件
docker exec -it python36 /bin/bash
pip install -r requirements.txt
退出
# 5 把容器做成镜像
docker commit python36 mydjango:v1
# 6 基于自己做的镜像运行容器
# 启动容器时执行python命令/manage.py runserver,它在项目的根目录下,就能启动django项目
docker run -id --name=mydjango -p 8088:8088 mydjango:v1 python /project/django_docker/manage.py runserver 0.0.0.0:8088
# 用文件挂载的方式启动容器,把宿主机django项目目录映射到容器
# 如果没有进行第3步,启动容器时因为文件还没有映射进去,容器找不到/project/django_test/manage.py命令,项目无法启动
# 如果操作了第3步,容器内有/project/django_docker,项目文件夹要映射到这个目录,而不是/project
docker run -id --name=mydjango -p 8088:8088 -v /opt/zl/django_docker:/project/django_docker mydjango:v1 python /project/django_docker/manage.py runserver 0.0.0.0:8088