centos 搭建docker私有倉庫 支援https 帶web頁面
阿新 • • 發佈:2019-02-20
這幾天需要給公司搭建一個docker倉庫 ,看網上好多都是 寫的很亂,要不就是你抄我的,我抄他的,看官方文件,又覺得很多不適用,在家搭建成功之後,把搭建的經驗給大家分享,也是自己記錄,學習!
注意:使用之前記得儘量 配置個域名啊,不然centos有些不好弄
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上去
下面的方式也許可以幫到你!!
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