Docker Hub
目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 2,650,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
一般我们 pull
的镜像都是来源于官方镜像仓库,且都是直接免密 pull
。如果我们有自己的镜像,也可以推送到官方仓库中,前提是需要在 docker
中登录 Docker Hub
。
注册账号可以去 https://hub.docker.com ,然后可以使用 docker login
和 docker 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 --