Docker搭建私有化倉庫的幾種方法
搭建 Docker 私有化倉庫是一個非常重要的實踐,它能夠幫助你安全地存儲和管理 Docker 鏡像,而無需將其發(fā)布到公共 Docker Hub。通過使用私有化倉庫,你可以:
- 提高安全性:鏡像存儲在受控的環(huán)境中。
- 提升效率:在公司網(wǎng)絡內傳輸鏡像,速度更快。
- 實現(xiàn)自動化:配合 CI/CD 系統(tǒng)實現(xiàn)自動鏡像管理。
本文將詳細介紹如何在不同環(huán)境下搭建 Docker 私有化倉庫,并提供配置和優(yōu)化建議。
一、Docker 私有化倉庫的基本原理
Docker 私有化倉庫(也稱為 Docker Registry)是一種允許用戶存儲和分發(fā) Docker 鏡像的軟件應用。Docker 官方提供了一個開源的 Docker Registry 鏡像,可以在本地或服務器上輕松運行。
Registry 與 Repository
- Registry:是存儲和管理 Docker 鏡像的服務。
- Repository:是 Registry 中具體的一個鏡像集合,比如
nginx
。
鏡像標簽
- Tag:是一個指向鏡像的標簽,如
nginx:latest
。
二、搭建 Docker 私有化倉庫
方法一:使用 Docker 官方 Registry 鏡像
Docker 官方提供了一個開源的 Docker Registry 鏡像,可以直接使用。
1. 拉取并運行官方 Registry 鏡像
首先,拉取官方 Registry 鏡像并運行:
docker pull registry:2
運行私有化倉庫:
docker run -d -p 5000:5000 --name my-registry registry:2
-d
:后臺運行容器。-p 5000:5000
:將主機的 5000 端口映射到容器的 5000 端口。--name my-registry
:為容器命名為my-registry
。
2. 推送鏡像到私有化倉庫
將本地鏡像推送到私有化倉庫:
給鏡像打標簽:
docker tag <IMAGE_ID> localhost:5000/my-image:latest
例如:
docker tag ubuntu:latest localhost:5000/ubuntu:latest
推送鏡像到私有倉庫:
docker push localhost:5000/ubuntu:latest
3. 從私有化倉庫拉取鏡像
在其他 Docker 主機上,從私有化倉庫拉取鏡像:
docker pull localhost:5000/ubuntu:latest
注意:在其他機器上訪問私有倉庫時,需要將 localhost
替換為私有倉庫所在機器的 IP 地址或域名。
4. 驗證倉庫中的鏡像
使用 curl
驗證倉庫中存儲的鏡像:
curl http://localhost:5000/v2/_catalog
返回結果:
{ "repositories": [ "ubuntu" ] }
5. 使用 docker-compose 啟動私有倉庫
你可以使用 docker-compose
來簡化啟動過程:
version: '3' services: registry: image: registry:2 ports: - "5000:5000" volumes: - ./data:/var/lib/registry
運行 docker-compose
:
docker-compose up -d
方法二:使用 Harbor 搭建企業(yè)級私有倉庫
Harbor 是一個開源的企業(yè)級 Docker Registry,提供更豐富的功能,如用戶管理、訪問控制、鏡像復制等。
1. 安裝 Docker 和 Docker Compose
確保你的系統(tǒng)上已經(jīng)安裝了 Docker 和 Docker Compose。
2. 下載 Harbor 安裝包
訪問 Harbor 官方下載頁面 下載最新版本。
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
解壓安裝包:
tar xzvf harbor-online-installer-v2.9.0.tgz cd harbor
3. 配置 Harbor
在 harbor
目錄下,有一個 harbor.yml
配置文件。根據(jù)需要進行配置:
hostname: reg.mycompany.com # 修改為你的域名或IP https: port: 443 certificate: /your/certificate/path private_key: /your/private/key/path harbor_admin_password: Harbor12345 # 設置管理員密碼
注意:確保使用正確的域名和證書路徑??梢酝ㄟ^ Let’s Encrypt 獲取免費 SSL 證書。
4. 安裝和啟動 Harbor
執(zhí)行以下命令安裝和啟動 Harbor:
./install.sh
啟動 Harbor 服務:
docker-compose up -d
5. 訪問 Harbor Web UI
在瀏覽器中訪問 https://reg.mycompany.com
,使用配置的管理員賬戶登錄,默認用戶名為 admin
,密碼為配置文件中設置的 harbor_admin_password
。
6. 推送鏡像到 Harbor
登錄 Harbor:
docker login reg.mycompany.com
給鏡像打標簽:
docker tag <IMAGE_ID> reg.mycompany.com/myproject/my-image:latest
推送鏡像到 Harbor:
docker push reg.mycompany.com/myproject/my-image:latest
7. 從 Harbor 拉取鏡像
在其他機器上,登錄 Harbor 并拉取鏡像:
docker login reg.mycompany.com docker pull reg.mycompany.com/myproject/my-image:latest
方法三:使用 GitLab Container Registry
GitLab 提供了集成的 Container Registry,可以作為私有化 Docker 倉庫使用。
1. 安裝 GitLab
參考 GitLab 官方文檔 安裝 GitLab。
2. 啟用 Container Registry
編輯 GitLab 配置文件 /etc/gitlab/gitlab.rb
,啟用 Registry:
registry_external_url 'https://registry.mycompany.com'
重新配置 GitLab:
gitlab-ctl reconfigure
3. 登錄 GitLab Container Registry
docker login registry.mycompany.com
4. 推送鏡像到 GitLab Container Registry
給鏡像打標簽:
docker tag <IMAGE_ID> registry.mycompany.com/mygroup/myproject/my-image:latest
推送鏡像:
docker push registry.mycompany.com/mygroup/myproject/my-image:latest
5. 從 GitLab Container Registry 拉取鏡像
docker pull registry.mycompany.com/mygroup/myproject/my-image:latest
三、配置私有化倉庫的安全性
1. 使用 HTTPS 保護傳輸
在生產(chǎn)環(huán)境中,強烈建議為 Docker 私有化倉庫配置 HTTPS,以保護數(shù)據(jù)傳輸安全。
生成自簽名證書
使用 openssl
生成自簽名證書:
mkdir -p certs openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
生成過程會提示輸入信息,如下所示:
Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Guangdong Locality Name (eg, city) []:Shenzhen Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:localhost Email Address []:admin@example.com
將證書掛載到容器中:
docker run -d -p 5000:5000 --name my-registry \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
2. 配置認證訪問
Docker 私有化倉庫支持使用基礎認證(Basic Auth)保護訪問。
創(chuàng)建用戶和密碼文件
使用 htpasswd
創(chuàng)建用戶和密碼文件:
apt-get install apache2-utils -y htpasswd -cB htpasswd myuser
myuser
:用戶名。- 你會被提示輸入密碼并確認。
啟動帶認證的 Registry
將認證文件掛載到容器中:
docker run -d -p 5000 :5000 --name my-registry \ -v `pwd`/certs:/certs \ -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
3. 配置防火墻
為確保私有化倉庫的安全性,建議配置防火墻規(guī)則,僅允許特定的 IP 或子網(wǎng)訪問倉庫。
# 允許 192.168.1.0/24 子網(wǎng)訪問 iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5000 -j ACCEPT # 拒絕其他 IP 訪問 iptables -A INPUT -p tcp --dport 5000 -j DROP
四、管理和監(jiān)控私有化倉庫
1. 查看倉庫中的鏡像
使用 curl
查看倉庫中的鏡像:
curl -u myuser:mypassword https://localhost:5000/v2/_catalog
2. 查看鏡像標簽
查看指定鏡像的標簽:
curl -u myuser:mypassword https://localhost:5000/v2/<repository>/tags/list
例如:
curl -u myuser:mypassword https://localhost:5000/v2/ubuntu/tags/list
3. 刪除鏡像
刪除指定鏡像的標簽:
curl -X DELETE -u myuser:mypassword https://localhost:5000/v2/<repository>/manifests/<digest>
獲取 digest
:
curl -u myuser:mypassword -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ https://localhost:5000/v2/<repository>/manifests/<tag>
例如:
curl -u myuser:mypassword -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ https://localhost:5000/v2/ubuntu/manifests/latest
4. 配置鏡像清理策略
定期清理不再使用的鏡像和標簽,節(jié)省存儲空間。可以使用 Registry GC 工具。
停止 Registry:
docker stop my-registry
運行垃圾回收:
docker run --rm -v /var/lib/registry:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml
重啟 Registry:
docker start my-registry
5. 使用監(jiān)控工具
可以使用 Prometheus 和 Grafana 監(jiān)控 Registry 的性能和使用情況。
五、常見問題和解決方案
1. Docker 客戶端無法連接私有倉庫
- 檢查私有倉庫的網(wǎng)絡配置和防火墻規(guī)則。
- 確保使用正確的域名或 IP 地址。
- 如果使用自簽名證書,確??蛻舳诵湃卧撟C書。
2. 推送鏡像失敗
- 檢查用戶權限和認證配置。
- 檢查倉庫的存儲空間是否已滿。
- 確保 Docker 客戶端版本與 Registry 版本兼容。
3. 鏡像拉取速度慢
- 使用 CDN 或鏡像加速服務。
- 配置緩存代理,減少重復下載。
總結
通過本文的介紹,你應該已經(jīng)掌握了搭建 Docker 私有化倉庫的基本步驟和配置方法。無論是使用官方的 Docker Registry 鏡像,還是更強大的 Harbor 或 GitLab Container Registry,私有化倉庫都能為你的鏡像管理帶來更高的安全性和效率。
到此這篇關于Docker搭建私有化倉庫的實現(xiàn)步驟的文章就介紹到這了,更多相關Docker 私有化倉庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker容器間跨宿主機通信-基于overlay的實現(xiàn)方法
這篇文章主要介紹了docker容器間跨宿主機通信-基于overlay的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明
這篇文章主要介紹了Docker 容器監(jiān)控原理及 cAdvisor的安裝與使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11阿里云esc服務器Docker部署單節(jié)點Mysql的講解
今天小編就為大家分享一篇關于阿里云esc服務器Docker部署單節(jié)點Mysql的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03