1.docker容器的导入和导出

一、docker容器的导出

docker export [options] container
OPTIONS说明:
-o表示输出的文件,这里指定了输出的路径,如果没有指定路径,则默认生成到当前文件夹。
示例1:docker export -o redis.tar.gz redisdocker export redis > redis1.tar.gz 说明:将运行中的redis容器导出为redis.tar.gz包

scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>

二、docker容器的导入

从tar包导入内容为docker镜像
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS说明:
-c :应用docker 指令创建镜像;
-m :提交时的说明文字
示例1:docker import redis.tar.gz redis:v1 示例2:docker import https://example.com/exampleimage.tgz

2.将容器打包成镜像

可以使用docker commit命令来完成,docker commit可以从容器创建一个新的镜像

一、语法格式:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

二、参数说明:

-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停

三、容器打包成镜像:

将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

docker stop 2a2a11e2c043
docker commit -a "alway.com" -m "socks5" 2a2a11e2c043  alway.com/wangwei/socks5:v1
docker commit -a "zoeyqq" -m "my rabbitMQ" 03748a8f19cb  rabbitmq:v1

四、镜像的导入&导出

导入

在镜像包所在的文件夹下操作

docker load --input uu.tar(也可以使用docker load -i uu.tar或者 docker load < uu.tar)
docker load < uu.tar

导出

docker save > /root/docker_images/uu.tar ubuntu:latest
docker save /root/docker_images/ubuntu:latest > uu.tar
docker save -o /root/docker_images/[镜像名].tar [镜像名]:latest

启动镜像
docker run -it -d --name container-name -pp1:p1-pp2:p2new-image-nam
docker run -it -d --name qinglong -p 5700:5700 alway.com/wangwei/qinglong:v1

五、容器导入导出与镜像导入导出区别

export/import 操作对象:容器 导出对象:tar文件 导入对象:镜像 镜像层数:一层
save/load 操作对象:镜像 导出对象:tar文件 导入对象:镜像 镜像层数:多层
说明:
你需要把 A 机器上的 甲 容器迁移到 B 机器, 且 甲 容器中有重要的数据需要随之一起迁移的, 就可以使用 export 和 import 参数来导入和导出
【导入的镜像层数】
最大的区别就在这里, 通过export 和 import导出的容器形成镜像时, 该镜像只有一层。通过save 和 load 导出的镜像保留了原镜像所有的层次结构, 导出时原镜像有几层, 导入的时候就还是有几层
想导出容器, 但是还想保留层次结构怎么办?
导出容器, 很快就想到唯一一个可以导出容器的工具 export,但是又想保留底层镜像的层次结构, 那么 export 就不符合需求了。想想导出带层次结构的工具就只有镜像导出工具 save 了, 但是容器在镜像层之上还有一层新的数据怎么一起导出去呢?
这个时候就需要引入一个新的参数 commit, 用来保存容器现有的状态为一个新的镜像。
比如在 A 机器上运行的 甲 容器是基于 甲方乙方 这个镜像跑起来的, 那么我就可以通过 commit 参数, 将 甲 容器的所有内容保存为一个新的镜像, 名字叫 私人订制 (内含一梗哦) 最后我再通过镜像导出工具 save 就可以完整的将 私人订制镜像(也就是 甲容器 )导出为一个 tar 包了
而且包含了 X+1 层镜像, X 层是原镜像 甲方乙方 的所有镜像层数, 1是容器 甲 多的那一层可写层的镜像

将镜像推送到Registry

docker login --username=zoey_zqx --password=xxxx registry.cn-hangzhou.aliyuncs.com

$ docker login --username=zoey_zqx --password=xxxx  registry.cn-hangzhou.aliyuncs.com
$ docker tag nginx registry.cn-hangzhou.aliyuncs.com/zoeyqq/nginx
$ docker push registry.cn-hangzhou.aliyuncs.com/zoeyqq/nginx