1. 程式人生 > 其它 >docker 私有倉庫搭建

docker 私有倉庫搭建

我們都知道maven私服,就是在伺服器上有一塊jar包共享區域,大家可以在共享倉庫裡面進行pull或者push。docker的私服差不多也是這個概念,只不過這塊共享區域放的不是jar, 而是映象檔案,這樣就能實現不同伺服器都可以從這塊共享區域上傳或者拉取映象,十分方便。我們知道的docker倉庫有DockerHub, 還有aliyun提供的映象服務,docker私服是用docker-registry技術實現的,所以先要下載docker-registry映象並啟動registry容器。

  • 下載 registry 映象,從官網獲取registry 最新映象
docker pull registry:latest

      1.  簡單啟動registry,不需要TSL安全認證以及使用者認證

  • ‐d:表示在後臺執行該容器
  • ‐p 5000:5000:私有映象倉庫容器內部預設暴露的5000埠對映到宿主機的5000埠
  • ‐‐restart=always:表示容器啟動後自動啟動本地私有映象倉庫
  • ‐‐name registry:表示為生成的容器命名為registry
  • ‐v /usr/docker/registry:/var/lib/registry:表示將容器內的預設儲存置/var/lib/registry中的資料掛載到宿主機的/usr/docker/registry目錄下,這樣當容器銷燬後,在容器中/var/lib/registry目錄下的資料會自動備份到宿主機指定目錄
docker run ‐d ‐p 5000:5000 ‐‐restart=always ‐‐name registry  ‐v /usr/docker/registry:/var/lib/registry registry:latest

docker ps # 檢測registry 是否啟動

sudo vi /etc/docker/daemon.json # 由於registry預設是安全的,http 需要配置docker倉庫地址

{
    "insecure-registries":[ "192.168.1.1"],
    "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn/"
    ],
}


systemctl restart docker # 配置檔案生效需要重啟docker服務

docker tag registry:latest 192.168.1.1:5000/registry:latest # 映象重新命名。由於推送到本地私有映象倉庫的映象名必須符合“倉庫IP:埠號/repository”的形式

docker push 192.168.1.1:5000/registry:latest # 通過push命令推送映象到倉庫

      2.  推薦方式啟動registry

  • 生成 CA 根證書以及根證書私鑰.

       ‐x509:x509是一個自簽發證書的格式,‐days 3650:表示證書有效期,docker.xxx.com:表示具體部署Docker Registry本地映象倉庫的域名(可以使用本地ip:埠),domain.key和domain.crt:就是生成的證書檔案,rsa:2048:是證書演算法長度


# 生成一個CA私鑰
openssl genrsa -out /home/certs/ca.key 4096

# 建立一個自簽名證書,有效期為10年
openssl req -x509 -new -nodes -key ca.key -subj "/CN=docker.xxx.com" -days 3650 -reqexts v3_req -extensions v3_ca -out /home/certs/ca.crt

或者

openssl req ‐x509 ‐days 3650 ‐subj '/CN=docker.xxx.com' ‐nodes ‐newkey rsa:2048 ‐keyout /home/certs/ca.key ‐out /home/certs/ca.crt
  •  生成使用者密碼
mkdir -p /opt/auth/   # 路徑隨意
htpasswd  -Bbn admin admin.123 > /opt/auth/htpasswd # admin 是使用者名稱,admin.123是密碼
  • 啟動registry
docker run -p 5000:5000 --restart=always --name registry 
-v /usr/docker/registry:/var/lib/registry 
-v /opt/auth:/auth 
-e "REGISTRY_AUTH=htpasswd" 
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd 
-v /home/certs:/certs 
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt 
-e REGISTRY_HTTP_TLS_KEY=/certs/ca.key -d 708bc6af7e5ed
  • 將證書複製到客戶端的宿主機上
將剛才生成的證書 /home/certs/ca.crt 複製到客戶端宿主機的/etc/docker/certs.d/192.168.1.1:5000/ca.crt
  • 登入docker 倉庫
docker login -u admin -p admin.123 192.168.1.1:5000
  • 使用域名的方式訪問docker 倉庫

          如果想要使用域名的方式訪問docker 倉庫,那麼修改/etc/hosts 檔案,在檔案末尾加上域名解析  docker.xxxx.com 192.168.1.1  。docker 推送映象 docker  push 192.168.1.1:5000/registry:latest  或者 docker push docker.xxxx.com:5000/registry:latest 。如果不想要ip或者域名後面帶上埠,那麼將registry 啟在80 或者443埠。

KPI 自簽發證書說明: https://hex-py.github.io/2020/07/08/devops-2020-07-08-PKI-%E8%87%AA%E7%AD%BE%E5%8F%91%E8%AF%81%E4%B9%A6%E8%AF%B4%E6%98%8E/