Docker - 容器迁移

about

在docker中,容器迁移可以用export&importsave&load两种方式。
用export&import还是save&load?
来看这两组命令的区别:

类型 作用 作用对象 能否保留存储层数据 导出的内容 应用场景
export & import 用来将container的文件系统进行打包的 container 不可以 一个Linux系统的文件目录 制作基础镜像
save & load 用来将一个或者多个image打包 image(container实际上也可以,但其实际上作用的是container下的image) 可以 一个分层的文件系统(相对于前者比较大,因为多层文件系统中可能有东西是重合的) 打包多个镜像

来分别看看都是如何操作的。

save&load

先说我要做什么,由于jenkins的插件太难下载了.......我就在香港的阿里云服务器上把jenkins环境搭好,然后在本地的虚拟机中使用,所以,要将远程服务器的jenkins容器原封不动的迁移到本机的虚拟机中,so.......
开干吧!
1. 打包镜像

  1. 最好打包前,先停了镜像(貌似不停也没事):
[root@r /]# docker stop myjenkins
  1. 提交一个tag:
[root@r /]# docker commit --author zhangkai --message "一个基于jenkinsci/blueocean:latest的jenkins镜像" myjenkins temp_jenkins:1.0
sha256:b5d68cc68f0a03599f6dc9217c051c01ad71dc22f307ac9271becd2cc7e6273d
[root@r /]# docker images | grep temp
temp_jenkins           1.0                 b5d68cc68f0a        About a minute ago   828MB

上面的myjenkins是我现在正在运行的jenkins容器。

2. 导出镜像

使用save命令导出镜像:

[root@r /]# docker save -o temp_jenkins:1.0 temp_jenkins:1.0
[root@r /]# ls |grep temp
temp_jenkins:1.0

上面命令,从左到右,第一个temp_jenkins:1.0是保存到本地的文件名,可以是其他名字;第二个temp_jenkins:1.0是刚才打包的镜像。然后使用ls命令也可以查看到镜像已经导出到本地了。
后续的操作,就是将本地的镜像拉取到你的目标服务器了,你可以通过上传到docker hub来完成后续的操作,我这里以xftp下载到本机,然后再传到本机的虚拟机中。

3. 导入镜像

  1. 现在,我将镜像导入了我的本机虚拟机中,注意,我用xftp在从远程服务器将镜像下载到本地时,镜像的名字变成了temp_jenkins_1.0,看不到了tag:
[root@C /]# pwd
/
[root@C /]# ls | grep temp_jenkins_1.0 
temp_jenkins_1.0
  1. 使用load导入到docker中:
[root@C /]# docker load -i temp_jenkins_1.0
10e57ea9e196: Loading layer [==================================================>]  267.9MB/267.9MB
5af0c8d4afd7: Loading layer [==================================================>]   71.8MB/71.8MB
54e0db414926: Loading layer [==================================================>]  266.9MB/266.9MB
Loaded image: temp_jenkins:1.0
[root@C /]# docker images | grep temp
temp_jenkins                   1.0                 b5d68cc68f0a        15 hours ago        828MB

4. 根据该镜像启动一个容器

docker run \
  -u root \
  --name myjenkins \
  --restart=always \
  -d \
  -p 6004:8080 \
  -p 50000:50000 \
  --env JAVA_OPTS="-Xmx1024m" \
  -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
  -v /etc/localtime:/etc/localtime \
  -v /docker_data/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  temp_jenkins:1.0

PS:带上tag
然后正常访问容器即可。


欢迎斧正,that's all,see also:

docker容器迁移-不丢失数据跨主机

posted @ 2019-06-06 06:49  听雨危楼  阅读(592)  评论(0编辑  收藏  举报