theboyaply
theboyaply
发布于 2020-03-12 / 480 阅读
0
0

Docker 镜像仓库

Docker Hub

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 2,650,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

一般我们 pull 的镜像都是来源于官方镜像仓库,且都是直接免密 pull。如果我们有自己的镜像,也可以推送到官方仓库中,前提是需要在 docker 中登录 Docker Hub

注册账号可以去 https://hub.docker.com ,然后可以使用 docker logindocker logout 命令在 docker 中进行登入登出。

下载镜像前可以使用 docker search "关键字" 搜索相关的镜像,比如以 centos 为关键字进行搜索:

[root@localhost ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5874                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              128                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   109                                     [OK]

可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数(表示该镜像的受关注程度)、是否官方创建(OFFICIAL)、是否自动构建 (AUTOMATED)。

根据是否是官方提供,可将镜像分为两类。

一种是类似 centos 这样的镜像,被称为基础镜像或根镜像。这些基础镜像由 Docker 公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。

还有一种类型,比如 tianon/centos 镜像,它是由 Docker Hub 的注册用户创建并维护的,往往带有用户名称前缀。可以通过前缀 username/ 来指定使用某个用户提供的镜像,比如 tianon 用户。

另外,在查找的时候通过 --filter=stars=N 参数可以指定仅显示收藏数量为 N 以上的镜像。

我们以 制作镜像示例 文章中制作的镜像为例,推送到 Docker Hub 仓库,然后进行 pull

# 查看当前镜像
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
demo-server         latest              b845f3d3f17c        8 hours ago         527MB
openjdk             8                   cdf26cc71b50        13 days ago         510MB

# 登录 docker 仓库
[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: your username
Password: your password
....
....
Login Succeeded

# 打tag,username 替换为自己的,不指定版本默认为 latest
docker tag demo-server:latest username/demo-server

# 推送到镜像仓库
docker push username/demo-server

# 推送成功之后,就可以 pull 我们自己的镜像了
docker pull username/demo-server

私有仓库

除了使用 Docker Hub 公共仓库,官方还提供了一个 registry 镜像,供用户搭建自己的镜像仓库。

# 拉取 registry 镜像
docker pull registry

# 运行镜像
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /dockerDir/registry:/var/lib/registry \
registry

默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下,这里我们使用 -v 参数将这个目录挂载到宿主机的 /dockerDir/registry 目录下。

启动容器之后,我们还需要在 /etc/docker/daemon.json 文件(如果没有请创建)中添加仓库地址才能够推送镜像。这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。

在文件中添加 insecure-registries 属性,并将仓库地址添加进去,多个使用逗号分割:

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com"
  ],
  "insecure-registries": [
    "192.168.19.115:5000"
  ]
}

然后重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

接下来就可以将本地的镜像推送到私有仓库中了:

查看本地镜像:

[root@localhost dockerDir]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
demo-server         latest              b845f3d3f17c        10 hours ago        527MB
openjdk             8                   cdf26cc71b50        13 days ago         510MB
registry            latest              708bc6af7e5e        6 weeks ago         25.8MB

demo-server 打 tag :

docker tag demo-server 192.168.19.115:5000/demo-server:v1

192.168.19.115:5000/demo-server:v1 推送到私有仓库:

[root@localhost dockerDir]# docker push 192.168.19.115:5000/demo-server:v1
The push refers to repository [192.168.19.115:5000/demo-server]
0401bbc59744: Pushed 
c0cf276dd7b7: Pushed 
ac3e2c206c49: Pushed 
3663b7fed4c9: Pushed 
832f129ebea4: Pushed 
6670e930ed33: Pushed 
c7f27a4eb870: Pushed 
e70dfb4c3a48: Pushed 
1c76bd0dc325: Pushed 
v1: digest: sha256:8c1ab5538df917ed4f70d1472f1083957798c513bd569b58475ec97f0de8a457 size: 2213

从仓库下载 192.168.19.115:5000/demo-server:v1 镜像:

docker pull 192.168.19.115:5000/demo-server:v1

查看仓库中所有镜像:

[root@localhost dockerDir]# curl 192.168.19.115:5000/v2/_catalog
{"repositories":["demo-server"]}

查看 demo-server 镜像所有 tag

[root@localhost dockerDir]# curl 192.168.19.115:5000/v2/demo-server/tags/list
{"name":"demo-server","tags":["v1"]}

-- end --


评论