搭建 docker 本地镜像仓库并提供权限校验及 UI 界面
docker 本地镜像仓库的作用跟 maven 私服差不多, 特别是公司级或者是小组级开发好的 docker 仓库可以上传到本地镜像仓库中, 需要用时, 直接从本地镜像仓库中拉取镜像即可, 因为镜像仓库在自己公司, 可以做到安全可控了. 下面介绍搭建本地镜像仓库的过程.
1, 环境准备
docker 本地镜像仓库本身也是一个 docker 镜像, 为此如果需要搭建本地镜像仓库, 则首先要搭建 docker 的环境, 具体搭建 docker 环境的步骤, 大家可以之前的一篇文章:《CentOS7 离线部署 docker》 https://www.toutiao.com/i6660002521202819596/
镜像仓库的镜像为:
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.YAML 配置文件, 配置信息为:
- 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.YAML, 配置内容为:
- 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.YAML 配置文件中的 auth.token.service 的值一样
registry.auth.issuer 的配置内容要与上面 registry.YAML 配置文件中的 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.YAML 文件, 内容如下:
- version: '2'
- services:
- registry-ui:
- image: hyper/docker-registry-Web:latest
- ports:
- - 8080:8080
- volumes:
- - ./ui/config/registry-ui.YAML:/conf/config.YAML: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.YAML:/etc/docker/registry/config.YAML: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
关注我
以你最方便的方式关注我:
微信公众号:
来源: https://www.cnblogs.com/atcloud/p/10642078.html