在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
使用 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 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. 求知若饥,虚心若愚。