Docker核心组件之镜像(Image)

在CentOS 7上安装好了Docker引擎后,里面什么都没有,接下来,我们使用Docker镜像。

镜像和容器的关系:就像是面向对象程序设计中的类和实例一样。

  • 镜像是静态的定义,里边有应用。
  • 容器是动态的,是镜像运行时的实体。

一、配置阿里云镜像加速地址

镜像仓库地址,默认从官方的仓库 Docker Hub上下载,在国外下载起来很慢,容易超时。

推荐修改默认配置为从国内的阿里云镜像仓库,或网易云等下载。

1、获取阿里云镜像加速地址

登录阿里云官网,在“控制台-产品服务-容器镜像服务-加速器配置”中拿到镜像加速地址。

注意:阿里云为每个账号分配独自的镜像加速地址。所以,每个人的都不一样。

           如果使用网易云镜像(http://hub-mirror.c.163.com)的话,直接配置即可。

2. 配置到Docker引擎的配置文件/etc/docker/daemon.json

Docker引擎的配置文件的完整配置项信息,可查看官方文档

Docker引擎的配置文件,默认没有,我们可创建并添加镜像配置项。

[root@centos7 ~]# ll /etc/docker/
总用量 4
-rw------- 1 root root 244 9月   6 15:49 key.json
[root@centos7 ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://jugduemv.mirror.aliyuncs.com"]                                          
}

3. 重新加载配置文件使其生效,输入:

[root@centos7 ~]# systemctl daemon-reload

4. 重启Docker,输入:

[root@centos7 ~]# systemctl restart docker

5. 查看Docker信息,可以看到配置的阿里云镜像,输入:

[root@centos7 ~]# docker info

二、拉去应用的镜像 -- pull命令

使用 Docker的 pull命令,把应用镜像从网络上的仓库中拉下来,放到 Docker 主机本地镜像仓库里。

命令格式:docker [image] pull 应用镜像仓库名称:tag标记   

注意:

  • tag标记不写时,默认 latest。镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。在生产环境中不推荐使用latest标记的镜像。
  • 应用镜像仓库名称,镜像仓库地址(即registry, 注册服务器)作为前缀,跟上应用名称。默认使用的是官方Docker Hub 服务(registry.hub.docker.com),我们配置了阿里云镜像加速器,该前缀是阿里云镜像地址。该前缀可以忽略。

Linux中,Docker 主机本地镜像仓库通常位于 /var/lib/docker/中。

[root@centos7 ~]# ll /var/lib/docker/ 
总用量 0
drwx------ 2 root root 24 9月   6 15:49 builder
drwx--x--x 4 root root 92 9月   6 15:49 buildkit
drwx------ 2 root root  6 9月   6 15:49 containers
drwx------ 3 root root 22 9月   6 15:49 image
drwxr-x--- 3 root root 19 9月   6 15:49 network
drwx------ 3 root root 40 9月   6 17:23 overlay2
drwx------ 4 root root 32 9月   6 15:49 plugins
drwx------ 2 root root  6 9月   6 17:23 runtimes
drwx------ 2 root root  6 9月   6 15:49 swarm
drwx------ 2 root root  6 9月   6 17:23 tmp
drwx------ 2 root root  6 9月   6 15:49 trust
drwx------ 2 root root 25 9月   6 15:49 volumes

1、拉去 Redis镜像

默认 latest:

[root@centos7 ~]# docker image pull redis
Using default tag: latest
......

指定 tag(6.0.5):

[root@centos7 ~]# docker pull redis:6.0.5                     
6.0.5: Pulling from library/redis
......

2、镜像文件的结构

下载下来的镜像文件,是以层的结构组成的,目的是为了共享。

不同的镜像,如果有相同的部分层文件,他们不同的镜像之间会共享相同的层,只需要下载和保存不同的层就可以了,这样就节省了大量的存储空间。

三、查看镜像信息

1、列出本地镜像 -- docker images 命令

使用docker  images 命令可以列出本地主机上已有镜像的基本信息。

基本语法:docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a或--all=“true | false” :列出本地所有的镜像(含中间映像层/临时文件,默认情况下,过滤掉中间映像层),默认为否;
  • --digests=“true | false :显示镜像的数字摘要信息,默认为否,不显示;
  • -f或--filter :显示满足条件的镜像;
  • --no-trunc="true | false” :显示完整的镜像信息,默认是false,设为true显示完整信息,比如IMAGE ID;
  • -q :只显示镜像ID。

列出镜像的数字摘要值:--digests=“true”

[root@centos7 ~]# docker images --digests="true"
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
redis               latest              sha256:933c6c01829165885ea8468d87f71127b1cb76a711311e6c63708097e92ee3d1   41de2cc0b30e        4 days ago          104MB
redis               6.0.5               sha256:800f2587bf3376cb01e6307afe599ddce9439deafbd4fb8562829da96085c9c5   235592615444        2 months ago        104MB

只显示没有被使用的镜像:-f或--filter="dangling=true"  

[root@centos7 ~]# docker images -f='dangling=true'
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

显示满足条件的镜像:-f或--filter reference='redi*:lat*'

[root@centos7 ~]# docker images --filter reference='redi*:lat*'
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              41de2cc0b30e        4 days ago          104MB

 显示完整的镜像信息:--no-trunc="true"

[root@centos7 ~]# docker images --no-trunc="true"
REPOSITORY          TAG                 IMAGE ID                                                                  CREATED             SIZE
redis               latest              sha256:41de2cc0b30e9fa4fcdda7c8e458dc7619c1b8a81a3501c62e0dccd2b559fafd   4 days ago          104MB
redis               6.0.5               sha256:2355926154447ec75b25666ff5df14d1ab54f8bb4abf731be2fcb818c7a7f145   2 months ago        104MB

只显示镜像ID:-q

[root@centos7 ~]# docker images -q
41de2cc0b30e
235592615444

2、标记/添加镜像标签 --docker tag命令

为了方便在工作中使用特定镜像,可以使用docker  tag命令来为本地镜像标记新的标签(任意起名)。将其归入某一仓库。

基本语法:docker tag  IMAGE[:TAG]  NAME[:TAG]

比如:添加一个新的 jqredis:v6 镜像标签

[root@centos7 ~]# docker tag redis:6.0.5 jqredis:v6
[root@centos7 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              41de2cc0b30e        4 days ago          104MB
jqredis             v6                  235592615444        2 months ago        104MB
redis               6.0.5               235592615444        2 months ago        104MB

3、获取容器/镜像的元数据 -- docker inspect 命令

使用docker inspect命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等。

基本语法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

  • -f format:指定返回值的模板文件。
  • -s :显示总的文件大小。
  • --type :为指定类型返回JSON。

比如:获取镜像 redis:6.0.5 的元信息:

[root@centos7 ~]# docker inspect redis:6.0.5

四、搜索镜像 -- docker search 命令

使用docker search 命令可以搜索Docker Hub官方(Docker Hub)仓库中的镜像。

基本语法:docker search [OPTIONS]  keyword。 

OPTIONS说明:

  • --no-trunc :显示完整的镜像描述;
  • -s :列出收藏数不小于指定值的镜像。
  •  -f,--filter=xxxx:列出满足条件的镜像;

比如:搜索官方提供的镜像 redis关键字:

  • docker search --filter=is-official=true redis
[root@centos7 ~]# docker search --filter=is-official=true redis
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis               Redis is an open source key-value store that…   8545                [OK]      

比如:搜收藏数量大于等于90的centos的镜像

  • docker search --filter=stars=90 centos
  • docker search -s 90 centos 
[root@centos7 ~]# docker search --filter=stars=90 centos
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                    The official build of CentOS.                   6178                [OK]                
ansible/centos7-ansible   Ansible on Centos7                              132                                     [OK]
consol/centos-xfce-vnc    Centos container with "headless" VNC session…   119                                     [OK]
jdeathe/centos-ssh        OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   115                                     [OK]
[root@centos7 ~]# docker search -s 90 centos 
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                    The official build of CentOS.                   6178                [OK]                
ansible/centos7-ansible   Ansible on Centos7                              132                                     [OK]
consol/centos-xfce-vnc    Centos container with "headless" VNC session…   119                                     [OK]
jdeathe/centos-ssh        OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   115                                     [OK]

五、删除和清理镜像

1、删除镜像 --docker rmi 命令

docker rmi : 删除本地一个或多少镜像。

基本语法:docker rmi [OPTIONS] IMAGE [IMAGE...]

IMAGE可以是标签或ID。

OPTIONS说明:

  • -f :强制删除;

比如:删除redis镜像:

注意:当一个镜像有多个标志副本的时候,使用标签(docker rmi jqredis:v6)不会真正删除镜像,只会删除副本标签。建议用ID,真正删除镜像,靠谱。

[root@centos7 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              41de2cc0b30e        4 days ago          104MB
redis               6.0.5               235592615444        2 months ago        104MB
jqredis             v6                  235592615444        2 months ago        104MB
[root@centos7 ~]# docker rmi -f 235592615444   
......
[root@centos7 ~]# docker images             
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              41de2cc0b30e        4 days ago          104MB

2、清理镜像 -- docker image prune 命令

使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune 命令来进行清理,最后会提示释放的存储空间。

OPTIONS说明:

  • -a, -all:删除所有无用镜像,不光是临时镜像;
  • -filter filter: 只清理符合给定过滤器的镜像;
  • -f,-force:强制删除镜像,而不进行提示确认。

比如:会自动清理临时的遗留镜像文件层: 

[root@centos7 ~]# docker image prune -f
Total reclaimed space: 0B

六、简单地创建镜像 -- docker commit 命令

创建方式有很多,开发中可使用 Dockerfile指令等创建。

这里使用docker [container] commit 命令,在现有容器的基础上简单地创建新镜像。

基本语法:docker [container] commit [OPTIONS]  CONTAINERID  [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a,--author="":作者信息;
  • -C,--change=[] :提交的时候执行Dockerfile指令,包括CMD | ENTRYPOINT |ENV 等;
  • -m,--message="":提交消息;
  • -p,--pause=true:提交时暂停容器运行。

比如:先拉取一个centos:7的镜像,运行它。然后创建新镜像,成功后返回新创建的镜像的ID。

[root@centos7 ~]# docker pull centos:7
[root@centos7 ~]# docker run -it centos:7
[root@61b8394f1d9e /]# 
[root@centos7 ~]# docker commit -a "jq" -m "简单创建新镜像测试" 61b8394f1d9e jqcontos:v7
sha256:e95e8427c1eb933885675dc2f6bf4a33bf0dd6425ddd579d797499f404753987
[root@centos7 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jqcontos            v7                  e95e8427c1eb        10 seconds ago      203MB
redis               latest              41de2cc0b30e        4 days ago          104MB
centos              7                   7e6257c9f8d8        3 weeks ago         203MB

七、导出和载入镜像

1、导出镜像 -- docker save命令

docker  [image] save命令:将指定镜像保存成 tar 归档文件。这个本地文件可以分享给他人使用。

基本语法:docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS 说明:

  • -o :输出到的文件。

比如:导出本地的 jqcontos:v7镜像到本地文件,文件名(自定义)为jqcontosv7.tar,这个文件就是导出的镜像文件了。

[root@centos7 ~]# docker save -o /root/abc/jqcontosv7.tar jqcontos:v7
[root@centos7 ~]# ls /root/abc/ | grep jq
jqcontosv7.tar

2、载入镜像 -- docker [image] load 命令

docker [image] load 命令:将导出的 tar归档文件载入/导入到本地镜像库。

基本语法:docker load [OPTIONS]

OPTIONS 说明:

  • --input , -i : 指定导入的文件,代替 STDIN。

比如:将jqcontosv7.tar导人镜像及其相关的元数据信息(包括标签等)到本地镜像列表。先删除之前存在的 jqcontos:v7镜像。

输入:docker load -i /root/abc/jqcontosv7.tar 或者 docker load < /root/abc/jqcontosv7.tar

[root@centos7 ~]# docker rmi jqcontos:v7
Untagged: jqcontos:v7
Deleted: sha256:e95e8427c1eb933885675dc2f6bf4a33bf0dd6425ddd579d797499f404753987
[root@centos7 ~]# docker load -i /root/abc/jqcontosv7.tar
Loaded image: jqcontos:v7
[root@centos7 ~]# docker images                          
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jqcontos            v7                  e95e8427c1eb        21 minutes ago      203MB
redis               latest              41de2cc0b30e        4 days ago          104MB
centos              7                   7e6257c9f8d8        3 weeks ago         203MB

至此,Docker在容器中导出镜像,镜像载入到本地镜像库,获取镜像等基本操作的过程与思想有所理解。

—— Stay Hungry. Stay Foolish. 求知若饥,虚心若愚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值