Docker 镜像和容器的导入导出
以下都以mysql镜像
和mysql容器
为例
一、镜像
已经拉取好mysql:5.6
的镜像
root@ubuntu-VirtualBox:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 732765f8c7d2 3 days ago 257MB
导出:docker save
命令:
docker save > mysql-5.6.tar mysql:5.6
或
docker save -o mysql-5.6.tar mysql:5.6
-o
和>
都表示输出到具体文件mysql-5.6.tar
:表示导出的目标文件,也可以指定到具体的目录下,自己定就行,这里表示当前目录下mysql:5.6
:表示镜像的名称和版本号,即上面拉取的镜像
导出成功,结果如下:
root@ubuntu-VirtualBox:/# ll
total 255452
drwxr-xr-x 4 root root 4096 8月 17 15:00 ./
drwxr-xr-x 26 root root 4096 8月 15 15:18 ../
-rw-r--r-- 1 root root 261564928 8月 17 15:00 mysql-5.6.tar
可以将tar包拷贝下来,到各个支持docker的环境运行,用以下的导入方式即可
导入:docker load
命令:
docker load < mysql-5.6.tar
或
docker load -i mysql-5.6.tar
-i
和<
都表示文件的输入,会将镜像及相关元数据,包括tag信息导入到新生成的镜像中mysql-5.6.tar
:表示要导入的目标文件,也可以指定具体目录下的某个文件,这里表示当前目录下
导入成功,结果如下:
root@ubuntu-VirtualBox:/# docker load < mysql-5.6.tar
8fa655db5360: Loading layer [==================================================>] 58.48MB/58.48MB
f5741d086b76: Loading layer [==================================================>] 338.4kB/338.4kB
9f77b78f01a7: Loading layer [==================================================>] 10.44MB/10.44MB
7f33ce1066af: Loading layer [==================================================>] 4.472MB/4.472MB
1dd5f3e365cf: Loading layer [==================================================>] 1.536kB/1.536kB
e414da892acb: Loading layer [==================================================>] 41.24MB/41.24MB
2e98364e9176: Loading layer [==================================================>] 32.77kB/32.77kB
7ca570926bcb: Loading layer [==================================================>] 3.584kB/3.584kB
0a260f19ebfc: Loading layer [==================================================>] 146.5MB/146.5MB
7f2ea9fb03d6: Loading layer [==================================================>] 9.728kB/9.728kB
f0f88667dee9: Loading layer [==================================================>] 1.536kB/1.536kB
Loaded image: mysql:5.6
二、容器:容器导出之后再导入,是一个镜像
上面的第一步我们已经拉取了镜像,使用下面的命令运行:(设置挂载目录和root用户
的密码:huangtuL@123
)
docker run -d \
-p 3306:3306 \
--name mysql \
-v /data/mysql:/data/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/logs \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=huangtuL@123 \
mysql:5.6
可以看到
root@ubuntu-VirtualBox:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30abdab7b36f mysql:5.6 "docker-entrypoint.s…" 28 minutes ago Up 28 minutes 0.0.0.0:3306->3306/tcp mysql
导出:docker export
命令:
docker export mysql > mysql-container.tar
docker export 容器名称或容器ID 导出的容器tar包名称
- 将上面名称为
mysql
的容器,导出为mysql-container.tar
>
号左边可以是容器名称
或容器ID
,>
号右边是自己定义导出到哪个目录下的那个tar文件
导出成功,结果如下:
root@ubuntu-VirtualBox:/# ll
total 245516
drwxr-xr-x 4 root root 4096 8月 17 15:44 ./
drwxr-xr-x 26 root root 4096 8月 15 15:18 ../
-rw-r--r-- 1 root root 256061952 8月 17 15:45 mysql-container.tar
导入:docker import
命令:
docker import mysql-container.tar mysql/container:1.0
docker import 导出的容器tar包 镜像名称:版本
导入成功,结果如下:(导入成功是一个镜像,但是并不能完整的运行成容器,后面总结说)
root@ubuntu-VirtualBox:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql/container 1.0 650e8860a40c 8 seconds ago 251MB
总结:
1.镜像导出/导入命令:docker save
/ docker load
2.容器导出/导入命令:docker export
/ docker import
注意:
1.1 用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以 使用 docker import 来导入一个容器快照到本地镜像库。
1.2 这两者的区别在于容 器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状 态),而镜像存储文件将保存完整记录,体积也要大。
1.3 此外,从容器快照文件导入 时可以重新指定标签等元数据信息。
简单来说,镜像导出导入会保留完整的信息,容器的导出导入不能保存完整的信息,即最后将容器导入并运行,也会因为相关文件信息缺失出现问题。
具体到底是导出镜像还是导出容器,根据自己的情况而定。如果是容器的话,感觉把东西都配置好,然后后面的使用会更方便,但是博主也没有试出来,留给大家去探索吧。