1-Docker - 容器迁移
about
在docker中,容器迁移可以用export&import
和save&load
两种方式。
用export&import还是save&load?
来看这两组命令的区别:
类型 | 作用 | 作用对象 | 能否保留存储层数据 | 导出的内容 | 应用场景 |
---|---|---|---|---|---|
export & import | 用来将container的文件系统进行打包的 | container | 不可以 | 一个Linux系统的文件目录 | 制作基础镜像 |
save & load | 用来将一个或者多个image打包 | image(container实际上也可以,但其实际上作用的是container下的image) | 可以 | 一个分层的文件系统(相对于前者比较大,因为多层文件系统中可能有东西是重合的) | 打包多个镜像 |
来分别看看都是如何操作的。
save&load
先说我要做什么,由于jenkins的插件太难下载了.......我就在香港的阿里云服务器上把jenkins环境搭好,然后在本地的虚拟机中使用,所以,要将远程服务器的jenkins容器原封不动的迁移到本机的虚拟机中,so.......
开干吧!
1. 打包镜像
- 最好打包前,先停了镜像(貌似不停也没事):
[root@r /]# docker stop myjenkins
- 提交一个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. 导入镜像
- 现在,我将镜像导入了我的本机虚拟机中,注意,我用xftp在从远程服务器将镜像下载到本地时,镜像的名字变成了
temp_jenkins_1.0
,看不到了tag:
[root@C /]# pwd
/
[root@C /]# ls | grep temp_jenkins_1.0
temp_jenkins_1.0
- 使用
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: