看啥

导航

三、docker镜像(一)

docker 镜像是 docker 中三大概念之一,其主要作用是作为启动容器的模板。

一、获取镜像

镜像是运行容器的模板,官方 Docker Hub 仓库已经提供了许多镜像共开发者使用。如果我们需要获取某 个镜像则可以去 docker 仓库下载所需的镜像。 下载镜像的格式:docker pull [仓库的 URL]/[名称空间]/[仓库的名称]:[版本号]

  • 搜索镜像
    在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像。其语法为docker search [option] keyword。支持的命令选项主要包括:
     -f : 过滤输出内容
# 搜索官方提供的带有 Redis 关键字的镜像
[root@master ~]# docker search -f is-official=true redis
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis     Redis is an open source key-value store that…   9798      [OK]
## 搜索被收藏超过 8000 个的并且关键词包括 Redis 的镜像
[root@master ~]# docker search -f stars=8000 redis
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis     Redis is an open source key-value store that…   9798      [OK]
[root@master ~]# docker pull nginx:1.17
1.17: Pulling from library/nginx
afb6ec6fdc1c: Pull complete 
b90c53a0b692: Pull complete 
11fa52a0fdc0: Pull complete 
Digest: sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699
Status: Downloaded newer image for nginx:1.17
docker.io/library/nginx:1.17

下载的时候,我们可以看到有若干层组成,像 afb6ec6fdc1c 这样的字符串是层的唯一 ID(实际上,完整的 ID 包括 256 比特, 64 个十六进制字符组成)。使用 docker pull 命令下载中会获取并输出镜像的各层信息。当不 同的镜像包括相同的层的时候,本地仅存一份内容,减小存储空间。

# 格式
	docker pull [镜像名称]
# 实例
[root@Centos7 ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis

# 镜像层
a076a628af6f: Already exists 
f40dd07fe7be: Pull complete 
ce21c8a3dbee: Pull complete 
ee99c35818f8: Pull complete 
56b9a72e68ff: Pull complete 
3f703e7f380f: Pull complete 

# 镜像ID号(镜像ID号是全球唯一)
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494

# 镜像下载状态
Status: Downloaded newer image for redis:latest 

# 镜像的全称(镜像的tag)
docker.io/library/redis:latest

二、查看镜像信息

2.1镜像列表

[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mysql        8.0.23    cbe8815cbea8   4 months ago    546MB
nginx        1.17      9beeba249f3e   15 months ago   127MB

列举信息中,可以看到几个字段信息:
 镜像来源:来自哪个仓库,默认来自:hub.docker.com
 镜像标签:比喻 1.17
 镜像 ID:例如 9beeba249f3e
 镜像创建时间:例如:15 months ago
 镜像大小:127MB
其中镜像的 ID 信息十分重要,它唯一标识了镜像。在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个 字符组成的可区分串来替代完整的 ID。
TAG 信息用于标记来自同一个仓库的不同镜像。TAG 在同一个仓库中是唯一的。
镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用 的存储空间会小于各镜像逻辑体积之和。
镜像物理结构:

  • 分层构建,联合挂载

    image 子命令主要支持如下选项:
  • -a : 列出所有(包括临时文件)镜像文件
  • --digests=true|false:列出镜像的数字摘要值
  • -q : 仅显示 ID 信息

2.2为镜像添加 tag

为了方便后续工作中使用特定的镜像,还可以使用 docker tag 命令来为本地的镜像添加标签。
docker tag : 标记本地镜像,将其归入某一仓库。

# 镜像标签的构成
docker.io/library/redis:latest
docker.io  : 镜像仓库的URL
library    :镜像仓库命名空间
redis	   : 镜像名称
latest	   : 镜像版本号

# 打标签
	# 格式
		docker tag [镜像ID]  镜像标签
[root@Centos7 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    621ceef7494a   2 months ago   104MB
nginx        latest    f6d0b4767a6c   2 months ago   133MB
[root@Centos7 ~]# docker tag 621ceef7494a registry.cn-hangzhou.aliyuncs.com/tom/redis:v2
[root@Centos7 ~]# docker images
REPOSITORY                                        TAG       IMAGE ID       CREATED        SIZE
redis                                             latest    621ceef7494a   2 months ago   104MB
registry.cn-hangzhou.aliyuncs.com/alvinos/redis   v2        621ceef7494a   2 months ago   104MB
nginx                                             latest    f6d0b4767a6c   2 months ago   133MB

2.3 获取镜像的详细信息

使用 docker inspect 命令获取镜像的详细信息,包括 PID、作者、架构等等。

# 格式
	docker inspect [镜像名称或镜像ID]
[root@master ~]# docker inspect mysql:8.0.23
[
    {
        "Id": "sha256:cbe8815cbea8fb86ce7d3169a82d05301e7dfe1a8d4228941f23f4f115a887f2",
        "RepoTags": [
            "mysql:8.0.23",
            "tom-mysql:latest"
        ],
        "RepoDigests": [
            "mysql@sha256:6e0014cdd88092545557dee5e9eb7e1a3c84c9a14ad2418d5f2231e930967a38"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-04-10T07:22:41.285951659Z",
        "Container": "1f81d0801dce5d57979f73bcebcb363307a6a345cf8910ad61b06a556a1b974e",
        "ContainerConfig": {
            "Hostname": "1f81d0801dce",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "3306/tcp": {},
                "33060/tcp": {}
            },
....此处略去千百行
# 参数
-f : 格式化输出
[root@Centos7 ~]# docker inspect -f '{{.Id}}' 621ceef7494a
sha256:621ceef7494adfcbe0e523593639f6625795cc0dc91a750629367a8c7b3ccebb
[root@Centos7 ~]# docker inspect -f '{{.ContainerConfig.Hostname}}' redis
16535cfaf84a

posted on 2021-08-17 14:39  看啥  阅读(407)  评论(0编辑  收藏  举报