Docker是現今最受歡迎的開發、部署應用程序的工具之一,它提供了輕量級的虛擬化、快速部署和無縫遷移等優勢,廣泛運用于云計算、微服務架構和DevOps等領域。而Docker倉庫則是存儲和共享Docker鏡像的中心化服務,對于企業和開發人員來說,它是非常重要的一環。
搭建Docker倉庫可以實現私有化、定制化、安全化等需求,同時也可以提升鏡像的部署速度和可用性,讓開發過程更加高效方便。下面是基于Docker Registry v2.0版本的一些搭建步驟和注意事項。
$ sudo docker pull registry:2 $ sudo docker run -d -p 5000:5000 --restart=always --name registry \ -v /opt/docker/data:/var/lib/registry \ -v /opt/docker/auth:/auth \ -e REGISTRY_AUTH=htpasswd \ -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.passwd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/auth/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/auth/domain.key \ registry:2
以上命令在本地host的5000端口啟動了一個Docker Registry,其中
- registry:2 表示使用的鏡像版本為Docker Registry v2.0
- -v /opt/docker/data:/var/lib/registry 表示存儲Registry鏡像數據的目錄,可以替換為其他目錄
- -v /opt/docker/auth:/auth 表示存儲用戶認證信息的目錄,必須為絕對路徑,且要在目錄下創建registry.passwd文件
- -e REGISTRY_AUTH=htpasswd 表示啟用基于密碼的認證模式
- -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" 表示認證領域的名稱,可以任意設置
- -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.passwd 表示用戶密碼文件的路徑,必須與上一步中的目錄對應
- -e REGISTRY_HTTP_TLS_CERTIFICATE=/auth/domain.crt 表示啟用TLS加密通道,需要提供證書文件和私鑰文件
- -e REGISTRY_HTTP_TLS_KEY=/auth/domain.key 表示證書私鑰文件的路徑
需要注意的是,開啟基于密碼的認證模式時,必須提供認證文件registry.passwd,格式為用戶名:密碼(經過base64加密),可以使用htpasswd程序生成。
$ sudo apt-get install apache2-utils $ sudo htpasswd -cB /opt/docker/auth/registry.passwd username
上述命令在/opt/docker/auth目錄下創建了registry.passwd文件,并添加了一個用戶"username",如果需要再添加其他用戶,可以去掉"-c"選項。
完成上述步驟后,使用docker tag和docker push命令將本地的鏡像上傳到Registry,如:
$ sudo docker tag image-name localhost:5000/image-name $ sudo docker push localhost:5000/image-name
其中image-name為鏡像名稱,可以使用docker images命令查看本地已經構建的鏡像。
最后,通過docker pull命令從Registry獲取鏡像即可在其他機器上部署相同的應用了:
$ sudo docker pull localhost:5000/image-name
至此,我們已經成功地搭建了Docker Registry,并實現了私有化、安全化的需求,更多的應用場景可以參考官方文檔和開源社區中的各種實踐案例。