前言
在前面的章节中,我们介绍了Docker容器,镜像,以及定制镜像的相关操作,本节我们来了解一下私有镜像仓库的使用方法。
目录
一、Docker Hub
注册
登录
注销
二、拉取镜像
三、推送镜像
四、私有仓库
五、在私有仓库上传、搜索、下载镜像
六、注意事项
Ubuntu 14.04, Debian 7 Wheezy
Ubuntu 16.04+, Debian 8+, centos 7
其它补充
⽬前 Docker 官⽅维护了⼀个公共仓库 Docker Hub ,⼤部分需求都可以通过在 Docker Hub 中直接下 载镜像来实现。如果你觉得拉取 Docker Hub 的镜像⽐较慢的话,我们可以配置⼀个镜像加速 器:http://docker-cn.com/,当然国内⼤部分云⼚商都提供了相应的加速器,简单配置即可。
你可以在 https://cloud.docker.com 免费注册⼀个 Docker 账号。
通过执⾏ docker login 命令交互式的输⼊⽤户名及密码来完成在命令⾏界⾯登录 Docker Hub。
你可以通过 docker logout 退出登录。
你可以通过 docker search 命令来查找官⽅仓库中的镜像,并利⽤ docker pull 命令来将它下载到本地。例如以 centos 为关键词进⾏搜索:
$ docker search centos
NAME DESCRIPTION
STARS OFFICIAL AUTOMATED
centos The official build of CentOS.
465 [OK]
tianon/centos CentOS 5 and 6, created using rinse instea
... 28
blalor/centos Bare-bones base CentOS 6.5 image
6 [OK]
saltstack/centos-6-minimal
6 [OK]
tutum/centos-6.4 DEPRECATED. Use tutum/centos:6.4 instead.
... 5 [OK]
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数(表示该镜像的受关注程度)、是否官⽅创建、是否⾃动创建。
官⽅的镜像说明是官⽅项⽬组创建和维护的, automated 资源允许⽤户验证镜像的来源和内容。
根据是否是官⽅提供,可将镜像资源分为两类。
1.类似 centos 这样的镜像,被称为基础镜像或根镜像。这些基础镜像由 Docker 公司创建、 验证、⽀持、提供。这样的镜像往往使⽤单个单词作为名字。
2.⽐如 tianon/centos 镜像,它是由 Docker 的⽤户创建并维护的,往往带有⽤户名 称前缀。可以通过前缀 username/ 来指定使⽤某个⽤户提供的镜像,⽐如 tianon ⽤户。
另外,在查找的时候通过 --filter=stars=N 参数可以指定仅显示收藏数量为 N 以上的镜像。下载官⽅ centos 镜像到本地
$ docker pull centos
Pulling repository centos
0b443ba03958: Download complete
539c0211cd76: Download complete
511136ea3c5a: Download complete
7064731afe90: Download complete
⽤户也可以在登录后通过 docker push 命令来将⾃⼰的镜像推送到 Docker Hub。以下命令中的 username 请替换为你的 Docker 账号⽤户名。
$ docker tag ubuntu:17.10 username/ubuntu:17.10
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 17.10 275d79972a 86 6 days ago 94.6MB
username/ubuntu 17.10 275d79972a 86 6 days ago 94.6MB
$ docker push username/ubuntu:17.10
$ docker search username
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
username/ubuntu
有时候使⽤ Docker Hub 这样的公共仓库可能不⽅便,⽤户可以创建⼀个本地仓库供私⼈使⽤。
docker-registry 是官⽅提供的⼯具,可以⽤于构建私有的镜像仓库。本⽂内容基于 docker-registry v2.x 版本。你可以通过获取官⽅ registry 镜像来运⾏。
$ docker run -d -p 5000:5000 --restart=always --name registry registry
这将使⽤官⽅的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 arb/registry ⽬录下。你可以通过 -v 参数来将镜像⽂件存放在本地的指定路径。例如下⾯的例⼦将上传的镜像放到本地的 /opt/data/registry ⽬录。
$ docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry
创建好私有仓库之后,就可以使⽤ docker tag 来标记⼀个镜像,然后推送它到仓库。例如私有仓库地址为 127.0.0.1:5000。先在本机查看已有的镜像。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
使⽤ docker tag 将 ubuntu:latest 这个镜像标记为 127.0.0.1:5000/ubuntu:latest。格式为:
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
$ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB
使⽤ docker push 上传标记的镜像。
$ docker push 127.0.0.1:5000/ubuntu:latest
The push refers to repository [127.0.0.1:5000/ubuntu]
373a30c24545: Pushed
a9148f5200b0: Pushed
cdd3de0940ab: Pushed
fc56279bbb33: Pushed
b38367233d37: Pushed
2aebd096e0e2: Pushed
latest: digest: sha256:fe4277621f10b5026266932ddf760f5a756d2facd505a94d2da12f4f52f71f5a si ze: 1568
⽤ curl 查看仓库中的镜像。
$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}
这⾥可以看到 {"repositories":["ubuntu"]},表明镜像已经被成功上传了。
先删除已有镜像,再尝试从私有仓库中下载这个镜像。
$ docker image rm 127.0.0.1:5000/ubuntu:latest
$ docker pull 127.0.0.1:5000/ubuntu:latest
Pulling repository 127.0.0.1:5000/ubuntu:latest
ba5877dc9bec: Download complete
511136ea3c5a: Download complete
9bad880da3d2: Download complete
25f11f5fb0cb: Download complete
ebc34468f71d: Download complete
2318d26665ef: Download complete
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB
如果你不想使⽤ 127.0.0.1:5000 作为仓库地址,⽐如想让本⽹段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内⽹地址作为私有仓库地址,这时你会发现⽆法成功推送镜像。
这是因为 Docker 默认不允许⾮ HTTPS ⽅式推送镜像。我们可以通过 Docker配置选项来取消这个限制。
对于使⽤ upstart 的系统⽽⾔,编辑 /etc/default/docker ⽂件,在其中的 DOCKER_OPTS 中增加如下内容:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registries=192.16 8.199.100:5000"
重新启动服务:
$ sudo service docker restart
对于使⽤ systemd 的系统,请在 /etc/docker/daemon.json 中写⼊如下内容(如果⽂件不存在请新建该⽂件)
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}
注意:该⽂件必须符合 json 规范,否则 Docker 将不能启动。
对于 Docker for Windows、Docker for Mac 在设置中编辑 daemon.json 增加和上边⼀样的字符串即可。