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

 

posted @ 2022-10-18 22:47  不会钓鱼的猫  阅读(1032)  评论(0编辑  收藏  举报