搭建docker本地镜像仓库并提供权限校验及UI界面

docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本地镜像仓库中拉取镜像即可,因为镜像仓库在自己公司,可以做到安全可控了。下面介绍搭建本地镜像仓库的过程。

1、环境准备

docker本地镜像仓库本身也是一个docker镜像,为此如果需要搭建本地镜像仓库,则首先要搭建docker的环境,具体搭建docker环境的步骤,大家可以之前的一篇文章:《CentOS7离线部署docker》

镜像仓库的镜像为:

registry           2.4.1               8ff6a4aae657        2 years ago         172MB

同时需要为本地镜像仓库提供UI界面,则UI界面的镜像为:

hyper/docker-registry-web   latest       0db5683824d8        2 years ago        599MB

2、配置本地仓库

(1)、创建目录用于本地仓库所需的,即:

mkdir /opt/docker_reg

(2)、创建自定义证书的目录,即:

mkdir /opt/docker_reg/certs

然后进入/opt/docker_reg/certs目录,进行如下操作:

openssl req \
-new \
-newkey rsa:4096 \
-days 365 \
-subj "/CN=192.168.208.141" \
-nodes \
-x509 \
-keyout auth.key \
-out auth.cert

(3)、创建本地仓库的配置文件目录,即:

mkdir /opt/docker_reg/config

并在该目录下创建registry.yml配置文件,配置信息为:

version: 0.1

storage:
filesystem:
rootdirectory: /registry
delete:
enabled: true http:
addr: 0.0.0.0:5000 auth:
token:
realm: http://192.168.208.141:8080/api/auth
service: 192.168.208.141:5000
issuer: test
rootcertbundle: /etc/docker/registry/auth.cert log:
level: info notifications:
endpoints:
- name: listener
url: http://192.168.208.141:8080/api/notification
timeout: 500ms
threshold: 5
backoff: 1s

(4)、创建本地仓库所需要的文件目录,即:

mkdir /opt/docker_reg/reg

3、配置UI界面

(1)、创建UI界面所面的配置文件路径,即:

mkdir -p /opt/docker_reg/ui/config

在该目录下创建配置文件registry-ui.yml,配置内容为:

registry:
url: http://registry:5000/v2
name: 192.168.208.141:5000
readonly: false
auth:
enabled: true
key: /conf/auth.key
issuer: test

注意:

  • registry.name的配置内容要与上面registry.yml配置文件中的auth.token.service的值一样
  • registry.auth.issuer的配置内容要与上面registry.yml配置文件中的auth.token.issuer的值一样

4、docker-compose部署容器

利用docker-compose来部署仓库以及UI界面容器,如果没有安装docker-compose的话,请执行如下命令:

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

注意:如果运行环境不能直接联外网,则可以先下载二进制包,然后手动放置到相应目录,并授权即可。

在/opt/docker_reg目录下创建docker-compose.yml文件,内容如下:

version: '2'
services:
registry-ui:
image: hyper/docker-registry-web:latest
ports:
- 8080:8080
volumes:
- ./ui/config/registry-ui.yml:/conf/config.yml:ro
- ./certs/auth.key:/conf/auth.key:ro
- ./ui/db:/data
networks:
- registry-net
depends_on:
- registry
registry:
image: registry:2.4.1
ports:
- 5000:5000
volumes:
- ./config/registry.yml:/etc/docker/registry/config.yml:ro
- ./certs/auth.cert:/etc/docker/registry/auth.cert:ro
- ./reg:/var/lib/registry
networks:
- registry-net networks:
registry-net:

编辑好配置文件后,即可创建容器,即在/opt/docker_reg目录执行:

docker-compose up -d

运行成功后,通过浏览器访问http://192.168.208.141:8080

有一个默认管理员账号,即用户名为admin,密码为admin

5、测试仓库

通过UI界面,用admin用户,创建一个具有pull和push权限的用户:

(1)、admin登录后,点击“Users”,即:

(2)、创建jgyw用户,密码为jgyw123,即:

(3)、授与jgyw用户write-all、UI_USER角色,write-all角色即是有pull和push权限,UI_USER角色即可以查看UI界面,即:

用户创建好后,用jgyw用户将镜像push到仓库中,例如将如下镜像push到仓库中:

openzipkin/zipkin          2.12.1         cf8d9aacddc0     5 weeks ago         144MB

(1)、首先利用tag命令,即:

docker  tag openzipkin/zipkin:2.12.1 192.168.208.141:5000/jgyw/zipkin:2.12.1

(2)、然后利用jgyw用户登录本地仓库,即:

docker login 192.168.208.141:5000

然后输入用户名和密码,即可登录。

如果在登录本地仓库时报:

Error response from daemon: Get https://192.168.208.141:5000/v1/users/: http: server gave HTTP response to HTTPS client

则需要将/usr/lib/systemd/system/docker.service文件中ExecStart值修改为如下形式,即:

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.208.141:5000

然后重启服务,即:

systemctl daemon-reload
systemctl restart docker

(3)、push镜像到本地仓库,即:

docker push 192.168.208.141:5000/jgyw/zipkin:2.12.1

成功之后,通过jgyw用户登录UI界面,就可以看到相应的镜像了,即:

(4)、测试pull镜像

首先先将原来的192.168.208.141:5000/jgyw/zipkin:2.12.1删除掉,即:

docker rmi -f 192.168.208.141:5000/jgyw/zipkin:2.12.1

然后从本地仓库中pull镜像下来,即:

docker pull 192.168.208.141:5000/jgyw/zipkin:2.12.1

关注我

以你最方便的方式关注我:

微信公众号: