Docker ❉ 镜像与容器的导入与导出

 

docker命令参数

[root@slave1 ~]# docker --   
--add-host                     --cpu-shares                   --env-file                     --kernel-memory                --no-healthcheck               --stop-signal
--attach                       --detach                       --expose                       --label                        --oom-kill-disable             --stop-timeout
--blkio-weight                 --detach-keys                  --gpus                         --label-file                   --oom-score-adj                --storage-opt
--blkio-weight-device          --device                       --group-add                    --link                         --pid                          --sysctl
--cap-add                      --device-cgroup-rule           --health-cmd                   --link-local-ip                --pids-limit                   --tmpfs
--cap-drop                     --device-read-bps              --health-interval              --log-driver                   --privileged                   --tty
--cgroupns                     --device-read-iops             --health-retries               --log-opt                      --publish                      --ulimit
--cgroup-parent                --device-write-bps             --health-start-period          --mac-address                  --publish-all                  --user
--cidfile                      --device-write-iops            --health-timeout               --memory                       --pull                         --userns
--cpu-period                   --disable-content-trust=false  --help                         --memory-reservation           --read-only                    --uts
--cpu-quota                    --dns                          --hostname                     --memory-swap                  --restart                      --volume
--cpu-rt-period                --dns-option                   --init                         --memory-swappiness            --rm                           --volume-driver
--cpu-rt-runtime               --dns-search                   --interactive                  --mount                        --runtime                      --volumes-from
--cpus                         --domainname                   --ip                           --name                         --security-opt                 --workdir
--cpuset-cpus                  --entrypoint                   --ip6                          --network                      --shm-size                     
--cpuset-mems                  --env                          --ipc                          --network-alias                --sig-proxy=false  

一 构建测试镜像

# 爬取centos最新版本镜像文件,若已经本地存在,则忽略此步骤
[root@slave1 ~]# docker pull centos
Using default tag: latest                                                                                                                                                                                           
latest: Pulling from library/centos                                                                                                                                                                                 
a1d0c7532777: Pull complete 

# 使用DockerFile构建新镜像文件,区分与新爬取的镜像
[root@slave1 ~]# docker images | grep centos
centos                                                                  latest       5d0da3dc9764   3 months ago    231MB

# 创建新镜像,镜像版本自定义
[root@slave1 ~]# docker build -f /tmp/docker_test -t mycentos:1.1 .
Sending build context to Docker daemon  5.352MB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : RUN yum install -y vim
 ---> Running in e5440e799f01
……
……
Removing intermediate container e5440e799f01
 ---> ba1f147adbb8
Step 3/4 : RUN yum install -y net-tools
 ---> Running in 48b3be7ca360
……
……
Complete!
Removing intermediate container 48b3be7ca360
 ---> 5582ec2db60c
Step 4/4 : CMD /bin/bash
 ---> Running in 6e97be77d0f4
Removing intermediate container 6e97be77d0f4
 ---> 97c0137c255b
Successfully built 97c0137c255b
Successfully tagged mycentos:1.1

# 查看自定义镜像是否与源镜像存在区别
[root@slave1 ~]# docker images | grep centos
mycentos                                                                1.1          97c0137c255b   About a minute ago   322MB
centos                                                                  latest       5d0da3dc9764   3 months ago         231MB

二 docker save&load

# 查看save帮助信息
[root@slave1 ~]# docker save --help

Usage:  docker save [OPTIONS] IMAGE [IMAGE...]

Save one or more images to a tar archive (streamed to STDOUT by default)

Options:
  -o, --output string   Write to a file, instead of STDOUT


# 保存新镜像为压缩文件(镜像保存的方式为tar文件)
[root@slave1 ~]# docker save mycentos:1.1 -o /tmp/docker_test.tar
# 查看保存后的文件
[root@slave1 ~]# ll -dh /tmp/docker_test.tar 
-rw------- 1 root root 316M Dec 21 04:38 /tmp/docker_test.tar

# 为了区分导入效果,删除已经存在的新镜像
[root@slave1 ~]# docker rmi mycentos:1.1 
Untagged: mycentos:1.1
Deleted: sha256:97c0137c255b4506ce144f6232c233e37b90d15f15ddcfe1e6860792a920d4ac
Deleted: sha256:5582ec2db60c5235dd2eba1affb1664bafc00fe6514cdf20ce7326aa97da37bf
Deleted: sha256:4e93141ad1c3459302608c0958ae22c8f16940f1d015e09509b944ccc3c0048e
Deleted: sha256:ba1f147adbb8adc34593ff96f07caa479c754e4c897b413df1aed21a2293e294
Deleted: sha256:a94efbac0393df33c2a1f703d6cdccf7cc88afa9f22b22095e27a026c5987ba7

# 查看load帮助信息
[root@slave1 ~]# docker load --help


Usage:  docker load [OPTIONS]

Load an image from a tar archive or STDIN

Options:
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output

# 使用load导入相关tar文件
[root@slave1 ~]# docker load -i /tmp/docker_test.tar 
d1b9a32f1eca: Loading layer [==================================================>]  65.42MB/65.42MB
0c313fee8079: Loading layer [==================================================>]  27.07MB/27.07MB
Loaded image: mycentos:1.1

# 查看导入结果
[root@slave1 ~]# docker images | grep centos
mycentos                                                                1.1          97c0137c255b   12 minutes ago   322MB
centos                                                                  latest       5d0da3dc9764   3 months ago     231MB

三 docker save&import

# 查看export帮助信息
[root@slave1 ~]# docker export --help

Usage:  docker export [OPTIONS] CONTAINER

Export a container's filesystem as a tar archive

Options:
  -o, --output string   Write to a file, instead of STDOUT

# 使用新镜像创建新容器
[root@slave1 ~]# docker run -it --name docker_test_1 -d mycentos:1.1 
2ead34be2ac3a25ae7e026559ec718f00e6488960bfa0a016f235ec75c84c12f
# 查看新创建的容器信息
[root@slave1 ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                    NAMES
2ead34be2ac3   mycentos:1.1       "/bin/sh -c /bin/bash"   6 seconds ago   Up 4 seconds                            docker_test_1


# 使用export导出新创建的容器
[root@slave1 ~]# docker export docker_test_1 -o /tmp/docker_test2.tar
# 查看导出文件
[root@slave1 ~]# ll -dh /tmp/docker_test2.tar 
-rw------- 1 root root 280M Dec 21 04:45 /tmp/docker_test2.tar

# 查看import帮助信息 
[root@slave1 ~]# docker import --help

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Import the contents from a tarball to create a filesystem image

Options:
  -c, --change list       Apply Dockerfile instruction to the created image
  -m, --message string    Set commit message for imported image
      --platform string   Set platform if server is multi-platform capable

# 使用import导入tar文件,并修改名称(将容器文件导入为镜像文件)
[root@slave1 ~]# cat /tmp/docker_test2.tar | docker import - mycentos:1.1
sha256:4d8110bc4e2ed96cffe42aa70a56d669333ea1b1239c479b9efe67138aadb155
# 此命令同上条命令,功能一致
[root@slave1 ~]# docker import /tmp/docker_test2.tar mycentos:1.1


# 查看导入结果
[root@slave1 ~]# docker images | grep centos
mycentos                                                                1.1          4d8110bc4e2e   24 seconds ago   285MB
centos                                                                  latest       5d0da3dc9764   3 months ago     231MB

四 总结

        export和import 导出的内容是一个容器的快照,并不是镜像本身,没有layer,快照文件会导致容器丢失所有的历史记录与元数据信息,而使用save和load保存的镜像文件则可以保留此两种内容,但是其体积更大;

  • docker load 加载镜像包、 docker import 加载容器包,两者都将其恢复为镜像;
  • docker load不能对镜像重命名、docker import可以为镜像指定新名称;
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值