这几天需要给公司搭建一个docker仓库 ,看网上好多都是 写的很乱,要不就是你抄我的,我抄他的,看官方文档,又觉得很多不适用,在家搭建成功之后,把搭建的经验给大家分享,也是自己记录,学习!
注意:使用之前记得尽量 配置个域名啊,不然centos有些不好弄
注意, 可以直接看我github这个文档,写的已经很详细了,这个是专门centos下搭建私有仓库,支持配置自签证书 https://github.com/bugfan/mytools/tree/master/docker-rep
1 安装docker docker-compose
这一步去网上搜把,装好就行了
2 安装 acme.sh (是一个脚本程序,使你生成证书变得简单)
$ curl https://get.acme.sh | sh
这条命令,会做的事情
1.把 acme.sh
安装到你的 home
目录下:
并创建 一个 bash
的 alias
, 方便你的使用: acme.sh=~/.acme.sh/acme.sh
2.自动为你创建 cronjob
, 每天 0:00
点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
3 生成证书
注意:如果您使用的时候,请把,hub.ymq.io
替换成自己域名,此域名需要dns
解析到安装私有仓库的服务器IP
$ cd ~/.acme.sh/
$ yum -y install socat
$ sh acme.sh --issue -d hub.ymq.io --standalone
如果看到如下信息,说明证书验证并生成成功,证书生成位置在:/root/.acme.sh/hub.ymq.io/
下
Success
Verify finished, start to sign.
Cert success.
-----BEGIN CERTIFICATE-----
4 复制证书
1.创建一个certs
目录。
$ cd /opt/
$ mkdir -p certs
2.移动证书到certs
目录。
$ cd ~/.acme.sh/
$ sh acme.sh --installcert -d hub.ymq.io \
--key-file /opt/certs/hub.ymq.io.key \
--fullchain-file /opt/certs/domain.cert
5 身份验证
为用户创建一个带有一个条目的密码文件admin
,密码为 admin
:
$ mkdir auth
$ docker run \
--entrypoint htpasswd \
registry:2 -Bbn admin admin > auth/htpasswd
6 创建本地仓库目录
mkdir -p /data/registry_dir/conf/registry #存放仓库的配置信息
mkdir -p /data/registry_dir/conf/registry-web #存放仓库UI界面的配置信息
mkdir -p /data/registry_dir/registry #存放仓库的镜像
mkdir -p /data/registry_dir/db #仓库的访问信息
生成ca证书到刚才的目录
openssl req -new -newkey rsa:4096 -days 365 \
-subj "/CN=localhost" \
-nodes -x509 \
-keyout /data/registry_dir/conf/registry-web/auth.key \
-out /data/registry_dir/conf/registry/auth.cert
7 创建compose 并启动
创建下面的compose文件
version: "3"
services:
registry:
image: registry:latest
container_name: "registry-srv"
restart: always
ports:
- "443:443"
# - "5000:5000"
volumes:
- /data/registry_dir/auth:/auth
- /data/registry_dir/certs:/certs
# - /data/registry_dir/conf/registry:/etc/docker/registry:ro
- /data/registry_dir/registry:/var/lib/registry
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
# - REGISTRY_HTTP_ADDR=0.0.0.0:443
- REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.cert
- REGISTRY_HTTP_TLS_KEY=/certs/domain.key
执行 docker-compose up 没有镜像会自动去拉去镜像,已经存在就会直接执行!这个时候registry已经是带证书的了,我们登录之后就keying直接push上去
要是有问题可以直接到 https://github.com/bugfan/mytools/tree/master/docker-rep/final 提isuue 或者直接联系我,微信是908958194
下面的方式也许可以帮到你!!
docker run -it -p 80:8080 --name registry-web \
-e REGISTRY_URL=https://registry:443/v2 \
-e REGISTRY_TRUST_ANY_SSL=true \
-e REGISTRY_BASIC_AUTH="ZG91eXU6ZG91eXUxMjMK" \ # echo "zxy:123" |base64
-e REGISTRY_NAME=localhost:443 hyper/docker-registry-web
docker run -d -p 443:443 --restart=always --name registry \
-v /data/registry:/var/lib/registry \
-v /data/auth:/auth -v /data/certs:/certs \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM='registry realm' \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2