技术: 深耕 Docker 生态圈(十){私有仓库配置}

可以利用 registry 配置一个私有仓库。

仓库名经常以两段式路径形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。国内的有些厂商可能比较慢,这个时候要借助 Docker Hub 公开服务,例如 时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库 等。

用户还可以在本地搭建私有 Docker Registry。
Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。
(但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能)。

运行 docker-registry

通过官方获取镜像,然后运行:

1
$ docker run -d -p 5000:5000 --restart=always --name registry registry

默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。

例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录:

1
2
3
4
$ docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry

私有仓库操作

创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。
例如私有仓库地址为 127.0.0.1:5000 , 此时的标记指令为:

1
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

大致操作如下:

1
2
3
4
5
$ 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

也就是说,仓库的名字要额外添加 [REGISTRY_HOST[:REGISTRY_PORT]/]

推送使用指令 docker push,例如:

1
2
3
4
5
6
7
8
9
$ 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 size: 1568

获取的指令 docker pull,例如:

1
2
3
4
5
6
7
8
9
10
11
12
$ 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

HTTPS 选项

如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 192.168.199.100:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。

这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。

Ubuntu

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

1
2
3
4
5
6
7
8
{
"registry-mirror": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
}

Mac

编辑的 json 代码一样,但是要在 docker gui 中操作。

对于 Docker for Windows 、 Docker for Mac 在设置中编辑 daemon.json 增加和上边一样的字符串即可。


Merlin 2018.2

文章目录
  1. 1. 运行 docker-registry
  2. 2. 私有仓库操作
  3. 3. HTTPS 选项
    1. 3.1. Ubuntu
    2. 3.2. Mac
|