1. 程式人生 > 實用技巧 >Docker製作私有映象倉庫

Docker製作私有映象倉庫

構建私有倉庫

啟動DockerRegistry,使用Docker官方提供的Registry映象就可以搭建本地私有映象倉庫,具體指令如下。

docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2

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

小提示:
DockerRegistry目前有v1和v2兩個版本,v2版本並不是v1版本的簡單升級,而是在很多功能上都有了改進和優化。v1版本使用的是Python開發的,而v2版本是用go語言開發的;v1版本本地映象倉庫容器中資料預設掛載點是/tmp/registry,而v2版本的本地映象倉庫容器中資料預設掛載點是/var/lib/registry

重新命名映象,之前推送映象時,都是預設推送到遠端映象倉庫,而本次是將指定映象推送到本地私有映象倉庫。由於推送到本地私有映象倉庫的映象名必須符合“倉庫IP:埠號/repository”的形式,因此需要按照要求修改映象名稱,具體操作指令如下。

dockertaghello‐world:latestlocalhost:5000/myhellodocker

推送映象,本地私有映象倉庫搭建並啟動完成,同時要推送的映象也已經準備就緒後,就
可以將指定映象推送到本地私有映象倉庫了,具體操作指令如下

dockerpushlocalhost:5000/myhellodocker

檢視本地倉庫映象

http://localhost:5000/v2/myhellodocker/tags/list(注意:使用該地址時注意映象名稱)

# 由於做了目錄掛載,因此可以在本地的該目錄下檢視:/mnt/registry/docker/registry/v2/repositories

配置私有倉庫認證

推送:不需要(不安全)

1、檢視DockerRegistry私有倉庫搭建所在伺服器地址:ifconfig
例如:伺服器地址為:192.168.200.141
2、生成自簽名證書(在home目錄下執行上述指令後)
要確保DockerRegistry本地映象倉庫的安全性,還需要一個安全認證證書,來保證其他
Docker機器不能隨意訪問該機器上的DockerRegistry本地映象倉庫,所以需要在搭建
DockerRegistry本地映象倉庫的Docker主機上先生成自簽名證書(如果已購買證書就無需
生成),具體操作指令如下。

mkdirregistry&&cdregistry&&mkdircerts&&cdcerts
opensslreq‐x509‐days3650‐subj'/CN=192.168.200.162:5000/' ‐nodes‐newkeyrsa:2048‐keyoutdomain.key‐outdomain.crt
指令引數說明:
‐x509:x509是一個自簽發證書的格式
‐days3650:表示證書有效期
192.168.197.141:5000:表示具體部署DockerRegistry本地映象倉庫的地址和埠
rsa:2048:是證書演算法長度
domain.key和domain.crt:就是生成的證書檔案

3、生成使用者名稱和密碼
在DockerRegistry本地映象倉庫所在的Docker主機上生成自簽名證書後,為了確保Docker機器與該DockerRegistry本地映象倉庫的互動,還需要生成一個連線認證的使用者名稱和密碼,使其他Docker使用者只有通過使用者名稱和密碼登入後才允許連線到DockerRegistry本地映象倉庫

cd..&&mkdirauth
dockerrun‐‐entrypointhtpasswdregistry:2‐Bbnruanwen123456> auth/htpasswd

4、啟動DockerRegistry本地映象倉庫服務(將之前建立的容器刪除)

dockerrun‐d\
‐p5000:5000\
‐‐restart=always\
‐‐nameregistry\
‐v/mnt/registry:/var/lib/registry\
‐v`pwd`/auth:/auth\
‐e"REGISTRY_AUTH=htpasswd"\
‐e"REGISTRY_AUTH_HTPASSWD_REALM=RegistryRealm"\
‐eREGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd\
‐v`pwd`/certs:/certs\
‐eREGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt\
‐eREGISTRY_HTTP_TLS_KEY=/certs/domain.key\
registry:2

5、配置DockerRegistry訪問介面
完成DockerRegistry本地映象倉庫服務啟動後,還需要在搭建了DockerRegistry本地映象倉庫所在的Docker主機上配置供其他Docker機器訪問的介面,具體指令如下:

sudomkdir‐p/etc/docker/certs.d/192.168.200.162:5000
sudocpcerts/domain.crt/etc/docker/certs.d/192.168.200.162:5000

6、DockerRegistry私有倉庫使用登記
在Docker機器終端使用sudovim/etc/docker/daemon.json命令編輯daemon.json文
件,在該檔案中新增如下內容

{"insecure‐registries":["192.168.200.162:5000"]}

7、重啟並載入docker配置檔案

sudo/etc/init.d/dockerrestart

驗證測試

1、裝備映象

dockertaghello‐world:latest192.168.200.162:5000/myhelloworld

2、推送映象

dockerpush192.168.200.141:5000/myhelloworld

送過程中出現錯誤,資訊提示為:nobasicauthcredentials(即沒有通過身份驗證),所以無法進行推送,這也就說明身份驗證的配置有效。要想成功推送,需要先登入成功後再推送

3、登入DockerRegistry映象倉庫

dockerlogin192.168.200.162:5000

4、再次推送

dockerpush192.168.200.139:5000/myhelloworld

5、結果驗證

# 由於做了目錄掛載,因此可以在本地的該目錄下檢視:
/mnt/registry/docker/registry/v2/repositories