一:介绍

1.1 容器的概念

统称来说,容器是一种工具,是可以装下其它物品的工具,以方便人类归纳放置物品、存储和异地运输;比如,人类使用的衣柜,行李箱,背包等都可以称之为容器。

1.2 docker容器虚拟化的好处

在云时代,开发者创建的应用必须要能很方便的在网络上传播,也就是说应用必须脱离底层物理硬件的限制;同时必须满足“任何时间任何地点” 可获取使用的地点,因此,开发者们需要一种新型的创建分布式应用程序的方式,快速分发部署,而这正是docker所能够提供的最大优势,docker提供了一种更为聪明的方式,通过容易来打包应用、解耦应用和运行平台,这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类别的平台,这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。

1.3 docker在开发运维种的优势

对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任何地方、任何时间让应用正常运行,而docker恰恰可以实现这一终极目标,具体来说,在开发和运维的过程中,docker具有以下几个方面的优势:
1、更快的交付和部署:使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
2、更高效的利用资源:运行docker容器不需要额外的虚拟化管理程序的支持,docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,docker的性能要提高1~2个数量级。
3、更轻松的管理和更新:使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

1.4 docker与虚拟机的比较

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:
1、Docker容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
2、Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
3、Docker通过类似git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
4、Docker通过Dockerfile支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。

特性容器虚拟机
启动速度秒级分钟级
性能接近原生较好
内存MB级GB级
硬盘适应MB级GB级
运行密度单台主机支持上千个单台主机支持几个
隔离性安全隔离完全隔离
迁移优秀一般

1.5 docker与虚拟化

Docker以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的supervisor支持。Docker虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器时在操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

1.6 docker概念和使用

Docker中有三个核心概念:镜像、容器和仓库。因此,准确把握这三大概念对于掌握Docker技术尤为重要。

1.镜像(Image)
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

2.容器(Container)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

3.仓库(Repository)
用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可 以在仓库中下载下来。

二:安装

2.1 Ubuntu 14.04/16.04(使用 apt-get 进行安装)

Docker目前支持最低Ubuntu版本为14.04LTS, 但实际上从稳定性上考虑, 推荐使用16.04LTS 或18.04LTS版本, 并且系统内核越新越好, 以支持 Docker 最新的特性。(uname -a查看)
# step 1: 更新系统并安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# 安装指定版本的Docker-CE:
1: 查找Docker-CE的版本:
apt-cache madison docker-ce
docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages

2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
sudo apt-get -y install docker-ce=[VERSION]

2.2 CentOS 7(使用 yum 进行安装)

更换系统yum源

# 1.查看系统内核版本 
[root@docker ~]# uname -a Linux docker 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 

# 2.备份原来yum源 
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 

# 3.更换base源 
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 

# 4.刷新yum源缓存 
yum makecache

下载docker-ce

#1: 安装必要的一些系统工具(若之前安装果docker,需要先删掉,再安装依赖)
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#3:修改
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

#4: 更新索引文件并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

#5: 开启Docker服务
systemctl start docker.service 

#6:设置开机自启
[root@docker yum.repos.d]# systemctl enable docker.service 
 
#7.安装校验
[root@docker yum.repos.d]# docker version
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:58:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:56:35 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.8
  GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc:
  Version:          1.0.0
  GitCommit:        v1.0.0-0-g84113ee
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
------------------------------------------------
#注意:
官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
 vim /etc/yum.repos.d/docker-ce.repo
将[docker-ce-test]下方的enabled=0修改为enabled=1

#安装指定版本的Docker-CE:
1: 查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: branch, fastestmirror, langpacks
docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
Available Packages

2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
sudo yum -y install docker-ce-[VERSION]

2.3 验证

#简单下载一个nginx,在浏览器访问ip,出现nginx页面代表安装docker和nginx成功
[root@docker ~]# docker run -d -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
33847f680f63: Pull complete 
dbb907d5159d: Pull complete 
8a268f30c42a: Pull complete 
b10cf527a02d: Pull complete 
c90b090c213b: Pull complete 
1f41b2f2bf94: Pull complete 
Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
Status: Downloaded newer image for nginx:latest
151baf71677de1e8a6445c335fd10a3c80d96a538f9e04b6d1dc8f74c43e6679

三:镜像加速器

3.1 下载添加

点击:阿里云-》容器镜像服务acr-》管理控制台-》镜像工具-》镜像加速器-》操作文档选择版本-》复制配置镜像加速器内容到虚拟机
验证下载:
[root@docker ~]# docker info
Registry Mirrors:   #出现此信息即可,默认的镜像仓库地址
  https://e0cb1jsj.mirror.aliyuncs.com/

四:镜像使用

镜像主要包括一些镜像文件、镜像tag以及镜像详细信息等等。

4.1 获取镜像

完整格式:docker pull [仓库URL]/[仓库命名空间]/[仓库名称]:[版本号]
 例:
  docker pull mysql:5.7
        默认的仓库URL:index.docker.io
        默认的命名空间:library
        index.docker.io/library/mysql:5.7

4.2 查看镜像

#使用docker images 或 docker images ls命令可以列举本地主机上已有镜像的基本信息(列表)。
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    08b152afcfae   4 days ago   133MB
mysql        5.7       8cf625070931   4 days ago   448MB

 REPOSITORY:镜像名称
 TAG : 版本号、版本号(默认最新版本号为:latest)
 IMAGE ID :镜像ID
 CREATED :创建距离现在的时间段
 SIZE : 镜像大小
 
#注意:
其中镜像的ID信息十分重要,它唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。

TAG信息用于标记来自同一个仓库的不同镜像。TAG在同一个仓库中是唯一的。

镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。

image子命令参数

docker images -a  #列出所有(包括临时文件)镜像文件
docker images -q  #仅显示ID信息
docker images --digests   #列出镜像的数字摘要值

4.3 为镜像添加tag标签

为了方便后续工作中使用特定的镜像,还可以使用docker tag命令来为本地的镜像添加标签。
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    08b152afcfae   4 days ago   133MB
mysql        5.7       8cf625070931   4 days ago   448MB
[root@docker ~]# docker tag nginx:latest nginx2:latest 
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx2       latest    08b152afcfae   4 days ago   133MB
nginx        latest    08b152afcfae   4 days ago   133MB
mysql        5.7       8cf625070931   4 days ago   448MB

4.4 获取镜像的详细信息

包括PID、作者、架构等等。
[root@docker ~]# docker inspect nginx

4.5 查看镜像的历史

[root@docker ~]# docker history nginx

4.6 搜索镜像

在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像。
语法:
docker search 选项 条件

参数

-f : 过滤输出内容

# 搜索官方提供的带有Redis关键字的镜像
[root@alvin-test-os ~]# docker search -f is-official=true  redis
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis               Redis is an open source key-value store that…   8779                [OK]

# 搜索被收藏超过8000个的并且关键词包括Redis的镜像
[root@alvin-test-os ~]# docker search -f stars=8000  redis
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis               Redis is an open source key-value store that…   8779                [OK]

--limit: 限制输出结果

[root@alvin-test-os ~]# docker search -f stars=8  --limit 3 redis
NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis                            Redis is an open source key-value store that…   8779                [OK]
bitnami/redis                    Bitnami Redis Docker Image                      167                                     [OK]
rediscommander/redis-commander   Alpine image for redis-commander - Redis man…   47                                      [OK]

--no-trunc: 不截断输出结果

[root@alvin-test-os ~]# docker search -f stars=8  --limit 3 --no-trunc redis
NAME                             DESCRIPTION                                                                          STARS               OFFICIAL            AUTOMATED
redis                            Redis is an open source key-value store that functions as a data structure server.   8779                [OK]
bitnami/redis                    Bitnami Redis Docker Image                                                           167                                     [OK]
rediscommander/redis-commander   Alpine image for redis-commander - Redis management tool.                            47                                      [OK]

注释

NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。

4.7 删除镜像

使用docker rmi 或docker image rm命令可以删除镜像
命令格式为
docker rmi image
例:
[root@docker ~]# docker rmi nginx

参数:
  -f : 强制删除镜像。
注:
需要删除的镜像必须没有任何容器正在使用,强制删除只能删除镜像名字

4.8 清理镜像

使用一段时间之后,docker会产生很多临时文件,以及一些没有被使用的镜像, 我们可以通过 docker image prune 命令来进行清理。

参数:
docker image prune -a :删除所有的未被使用的镜像,包括临时镜像。

docker image prune -f :强制删除镜像,而不进行提示

4.9 构建镜像

构建镜像一般有三种情况,基于容器导入、基于本地模板导入、基于Dockerfile创建,本章主讲基于容器保存镜像和本地保存镜像导入。

基于容器保存(手动)

语法:docker 容器id commit
参数:
 -a 作者信息
 -m 提交信息
 -p 提交时,暂停容器运行
 -c  使用Dockerfile指令来创建镜像

例:

基于centos7系统的nginx镜像(单服务)
1、启动一个容器并进入
[root@docker ~]# docker run -it -p 80:80 centos:7
2、在容器中建立下载地址
[root@837b52e2f844 /]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@837b52e2f844 /]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3、下载nginx
[root@837b52e2f844 /]# yum install nginx -y
4、在容器中下将刚下载的nginx访问页面修改自定义的(自步骤为了后续好辨认,随意)
[root@837b52e2f844 /]# ll /usr/share/nginx/html
total 12
-rw-r--r-- 1 root root 3650 Jun  2 00:21 404.html
-rw-r--r-- 1 root root 3693 Jun  2 00:21 50x.html
lrwxrwxrwx 1 root root   20 Jul 27 02:47 en-US -> ../../doc/HTML/en-US
drwxr-xr-x 2 root root   27 Jul 27 02:47 icons
lrwxrwxrwx 1 root root   18 Jul 27 02:47 img -> ../../doc/HTML/img
lrwxrwxrwx 1 root root   25 Jul 27 02:47 index.html -> ../../doc/HTML/index.html
-rw-r--r-- 1 root root  368 Jun  2 00:21 nginx-logo.png
lrwxrwxrwx 1 root root   14 Jul 27 02:47 poweredby.png -> nginx-logo.png
[root@837b52e2f844 /]# rm -rf /usr/share/nginx/html/index.html
[root@837b52e2f844 /]# ll /usr/share/nginx/html
total 12
-rw-r--r-- 1 root root 3650 Jun  2 00:21 404.html
-rw-r--r-- 1 root root 3693 Jun  2 00:21 50x.html
lrwxrwxrwx 1 root root   20 Jul 27 02:47 en-US -> ../../doc/HTML/en-US
drwxr-xr-x 2 root root   27 Jul 27 02:47 icons
lrwxrwxrwx 1 root root   18 Jul 27 02:47 img -> ../../doc/HTML/img
-rw-r--r-- 1 root root  368 Jun  2 00:21 nginx-logo.png
lrwxrwxrwx 1 root root   14 Jul 27 02:47 poweredby.png -> nginx-logo.png
[root@837b52e2f844 /]# echo "hello world" > /usr/share/nginx/html/index.html
5、启动
[root@837b52e2f844 /]# nginx
[root@837b52e2f844 /]# 

6、网页ip访问或者新开虚拟机curlip访问出现hello word即可
7、访问测试成功即可退出
[root@837b52e2f844 /]# exit
exit

7、将容器保存为镜像
[root@docker html]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                     PORTS     NAMES
837b52e2f844   centos:7   "/bin/bash"   19 minutes ago   Exited (0) 4 minutes ago             loving_tereshkova
[root@docker html]# docker container commit 837b52e2f844 centos_nginx:v1
sha256:70814c4f12528ff21cd9855f3f69e638a8fc3d72eababaaaa2716d7a74273503
[root@docker html]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos_nginx   v1        70814c4f1252   40 seconds ago   405MB
nginx          latest    08b152afcfae   4 days ago       133MB
nginx2         latest    08b152afcfae   4 days ago       133MB
mysql          5.7       8cf625070931   4 days ago       448MB
centos         7         8652b9f0cb4c   8 months ago     204MB

8、测试创建的镜像使用
[root@docker html]# docker container commit 837b52e2f844 centos_nginx:v1
sha256:70814c4f12528ff21cd9855f3f69e638a8fc3d72eababaaaa2716d7a74273503
[root@docker html]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos_nginx   v1        70814c4f1252   40 seconds ago   405MB
nginx          latest    08b152afcfae   4 days ago       133MB
nginx2         latest    08b152afcfae   4 days ago       133MB
mysql          5.7       8cf625070931   4 days ago       448MB
centos         7         8652b9f0cb4c   8 months ago     204MB
[root@docker html]# docker run -d -p 81:80 centos_nginx:v1 nginx -g 'daemon off;'
2921c97c350af2002317241da954e044a9a9f47f8cf3897b187eec5a89457146
[root@docker html]# docker ps -a 
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                     PORTS                               NAMES
2921c97c350a   centos_nginx:v1   "nginx -g 'daemon of…"   11 seconds ago   Up 10 seconds              0.0.0.0:81->80/tcp, :::81->80/tcp   interesting_nobel
837b52e2f844   centos:7          "/bin/bash"              22 minutes ago   Exited (0) 7 minutes ago                                       loving_tereshkova
[root@docker html]# docker ps -a --no-trunc
CONTAINER ID                                                       IMAGE             COMMAND                    CREATED              STATUS                     PORTS                               NAMES
2921c97c350af2002317241da954e044a9a9f47f8cf3897b187eec5a89457146   centos_nginx:v1   "nginx -g 'daemon off;'"   About a minute ago   Up About a minute          0.0.0.0:81->80/tcp, :::81->80/tcp   interesting_nobel
837b52e2f844acbb6073678ba74f913560706623ebc899677f7ab8a9827b0539   centos:7          "/bin/bash"                24 minutes ago       Exited (0) 9 minutes ago                                       loving_tereshkova
[root@docker html]# 

9、网页或者新启动一个虚拟机curlip:81端口访问出现hello word即可

4.10 保存镜像

有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一个文件,再拷贝到另一台电脑上导入使用;对于镜像的导出和导入,Docker 提供了两种方案,下面分别进行介绍。

使用 export 和 import

export 和 import的针对点是容器,将本机的容器导出为镜像包。
  1. export保存容器为镜像包
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                      PORTS                               NAMES
2921c97c350a   centos_nginx:v1   "nginx -g 'daemon of…"   10 minutes ago   Up 10 minutes               0.0.0.0:81->80/tcp, :::81->80/tcp   interesting_nobel
837b52e2f844   centos:7          "/bin/bash"              32 minutes ago   Exited (0) 17 minutes ago                                       loving_tereshkova
[root@docker ~]# docker export 2921c97c350a > centos_nginx.tar
[root@docker ~]# ll | grep centos_nginx.tar 
-rw-r--r--  1 root root 385090560 Jul 27 11:19 centos_nginx.tar

2)import导入镜像包为镜像

[root@docker ~]# docker import centos_nginx.tar centos_nginx:v2
sha256:6c7dc47e4a206d3a5c9bf745cec968ae3494039fed8979d48db1cda81744522f
[root@docker ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos_nginx   v2        6c7dc47e4a20   5 seconds ago    377MB
<none>         <none>    b61fcd68f65a   56 seconds ago   377MB
centos_nginx   v1        70814c4f1252   18 minutes ago   405MB
nginx2         latest    08b152afcfae   4 days ago       133MB
nginx          latest    08b152afcfae   4 days ago       133MB
mysql          5.7       8cf625070931   4 days ago       448MB
centos         7         8652b9f0cb4c   8 months ago     204MB
  1. 测试
[root@docker ~]# docker run -d -p 82:80 centos_nginx:v2 /bin/bash /init.sh
b7d59f3066fbaa0e8411a66029ea999585442a7f4c6359c1b4a69f855bcb9517
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                        PORTS                               NAMES
b7d59f3066fb   centos_nginx:v2   "/bin/bash /init.sh"     22 seconds ago   Exited (127) 21 seconds ago                                       gracious_noether
2921c97c350a   centos_nginx:v1   "nginx -g 'daemon of…"   18 minutes ago   Up 18 minutes                 0.0.0.0:81->80/tcp, :::81->80/tcp   interesting_nobel
837b52e2f844   centos:7          "/bin/bash"              40 minutes ago   Exited (0) 25 minutes ago                                         loving_tereshkova

使用save 和load

save 和 load 的针对的点是镜像, 将本机的镜像导入、 导出为镜像包。
  1. 使用save保存镜像
[root@docker ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos_nginx   v2        6c7dc47e4a20   4 minutes ago    377MB
<none>         <none>    b61fcd68f65a   5 minutes ago    377MB
centos_nginx   v1        70814c4f1252   23 minutes ago   405MB
nginx2         latest    08b152afcfae   4 days ago       133MB
nginx          latest    08b152afcfae   4 days ago       133MB
mysql          5.7       8cf625070931   4 days ago       448MB
centos         7         8652b9f0cb4c   8 months ago     204MB
[root@docker ~]# docker save 6c7dc47e4a20 > centos_nginx2.tar      #保存单个
[root@docker ~]# ll |grep centos_nginx2.tar 
-rw-r--r--  1 root root 385097728 Jul 27 11:29 centos_nginx2.tar
[root@docker ~]# docker save -o test.tar mysql:5.7 centos:7        #保持多个
[root@docker ~]# ll |grep test.tar 
-rw-------  1 root root 665309696 Jul 27 11:31 test.tar

2)load导入镜像

docker load 参数:
-input , -i : 指定导入的文件,代替 STDIN。 
--quiet , -q : 精简输出信息。

[root@docker ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE

[root@docker ~]# docker load < test.tar 
Loaded image: mysql:5.7
Loaded image: centos:7
[root@docker ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
mysql          5.7       8cf625070931   4 days ago       448MB
centos         7         8652b9f0cb4c   8 months ago     204MB

两种保持和导入镜像方式的差别

1、文件大小不同:dockers export 保存的镜像的体积小于docker save
2、保存的内容不同:docker save保持的是镜像当时的状态,而docker export是根据容器拿到镜像,保存的是保存容器当时的快照状态,再导入时会丢失镜像所有的历史记录和元数据信息,所以无法进行回滚操作。
3、自定义镜像名称:docker impprt 可以,docker load 不能对载入的镜像重命名。
4、配置启动命令:docker import未保存镜像默认的启动命令,docker load保存了
5、应用场景:docker save一般情况下,使用的场景是项目迁移(编排多个镜像组合时,客户端服务器不能连接外网),docker export一般

来源:#新猿技术生态圈

最后修改:2022 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏