1. 程式人生 > >centos 搭建docker私有倉庫 支援https 帶web頁面

centos 搭建docker私有倉庫 支援https 帶web頁面

這幾天需要給公司搭建一個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