一.将容器制作成新的镜像
(1)描述
docker commit :从容器创建一个新的镜像。
(2)语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
(3)参数
a :提交的镜像作者;
–c :使用Dockerfile指令来创建镜像;
–m :提交时的说明文字;
–p :在commit时,将容器暂停
(4)实例
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
619031b389ad mysql "docker-entrypoint..." 3 minutes ago Up 3 minutes 33060/tcp, 0.0.0.0:3306->3306/tcp mysql
[root@localhost ~]# docker commit -a "lqh" -m "ceshi" 619031b389ad mysql:v1
sha256:d6392cc301eacd443541aa0c92ab5a561fa3eedc0b30757c8887cdf8a3afe7d9
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql v1 d6392cc301ea 6 seconds ago 514 MB
docker.io/mysql latest 0716d6ebcc1a 13 days ago 514 MB
二.导出镜像到本地
(1)描述
docker save : 将指定镜像保存成 tar 归档文件。
(2)语法
docker save [OPTIONS] IMAGE [IMAGE...]
(3)参数
o :输出到的文件。
(4)实例
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql v1 d6392cc301ea 6 seconds ago 514 MB
docker.io/mysql latest 0716d6ebcc1a 13 days ago 514 MB
[root@localhost ~]# docker save -o mysql.tar mysql:v1
[root@localhost ~]# ll
总用量 507096
-rw-------. 1 root root 1319 6月 19 00:56 anaconda-ks.cfg
-rw------- 1 root root 519262208 9月 17 14:45 mysql.tar
三.加载镜像
(1)描述
docker load : 导入使用 docker save 命令导出的镜像。
(2)语法
docker load [OPTIONS]
(3)参数
–input , -i : 指定导入的文件,代替 STDIN。
–quiet , -q : 精简输出信息。
(4)实例
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@localhost ~]# ll
总用量 507096
-rw-------. 1 root root 1319 6月 19 00:56 anaconda-ks.cfg
-rw------- 1 root root 519262208 9月 17 14:45 mysql.tar
[root@localhost ~]# docker load -i mysql.tar
d000633a5681: Loading layer 72.53 MB/72.53 MB
731f7c213603: Loading layer 338.4 kB/338.4 kB
b2830993d63a: Loading layer 9.557 MB/9.557 MB
97a2a3481f0d: Loading layer 4.202 MB/4.202 MB
35e94dafc854: Loading layer 2.048 kB/2.048 kB
2eaac5532d44: Loading layer 53.77 MB/53.77 MB
89638afc97cd: Loading layer 5.632 kB/5.632 kB
cf0cecb7358f: Loading layer 3.584 kB/3.584 kB
16c71bbd693d: Loading layer 378.8 MB/378.8 MB
46bb27bfe165: Loading layer 5.632 kB/5.632 kB
2ecd2889304a: Loading layer 17.92 kB/17.92 kB
bc3da4909d75: Loading layer 1.536 kB/1.536 kB
c68a0d96341c: Loading layer 10.24 kB/10.24 kB
Loaded image: mysql:v1
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql v1 d6392cc301ea 8 minutes ago 514 MB
四.docker export import与docker save load的区别
(1)作用
docker save 用来将镜像打包保存。
docker export 用来将容器打包保存,相当于容器快照。
docker load 用来载入镜像包,必须是一个分层文件系统,必须是是save的包。
docker import 用来载入容器包,必须是export的包。
(2)数据完整
docker save images_name:将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
docker export container_id:将一个容器导出为文件,再使用docker import 命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
(3)命名
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
(4)是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
(5)应用场景不同
docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
五.docker export
(1)描述
docker export :将文件系统作为一个tar归档文件导出到STDOUT。
(2)语法
docker export [OPTIONS] CONTAINER
(3)参数
-o :将输入内容写到文件。
(4)实例
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3160b8b877a mysql "docker-entrypoint.s…" 12 days ago Up 12 days 33060/tcp, 0.0.0.0:3307->3306/tcp mysql
[root@localhost ~]# docker export -o mysql-`date +%y%m%d`.tar f3160b8b877a
[root@localhost ~]# ll
-rw------- 1 root root 512821248 9月 30 10:33 mysql-210930.tar
六.docker import
(1)描述
docker import : 从归档文件中创建镜像。
(2)语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
(3)参数
c :应用docker 指令创建镜像;
-m :提交时的说明文字;
(4)实例
[root@localhost ~]# docker import mysql-210930.tar mysql:v1
sha256:f37a16987cf1b6383c79e5ff721e3b1c3ffc3714ab71933723971fdaa6ecb975
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql v1 f37a16987cf1 7 seconds ago 508 MB