CentOS 搭建 Docker 私有鏡像倉庫
搭建 Docker 私有鏡像倉庫能為團隊提供高效、安全的鏡像管理方案。下面將詳細介紹每個步驟的操作細節,其中命令部分均用代碼塊展示。
一、環境準備
要搭建 Docker 私有鏡像倉庫,首先得確保服務器環境符合要求,這是后續操作順利進行的基礎。
1. 服務器要求
建議使用 CentOS 7 或 8 系統,內存至少 2GB,存儲空間 20GB 以上,這樣能保證倉庫在處理多個鏡像時運行流暢。
2. 安裝 Docker Engine
Docker 是搭建私有倉庫的核心依賴,不同 CentOS 版本安裝命令略有差異。
- CentOS 7 安裝 Docker:
yum install -y docker
- CentOS 8 安裝 Docker:
dnf install -y docker
安裝完成后,需要啟動 Docker 服務并設置開機自啟,確保服務器重啟后 Docker 能自動運行。
systemctl start docker
systemctl enable docker
3. 開放必要端口
Docker 私有倉庫默認使用 5000 端口,需在防火墻中開放該端口,否則其他客戶端無法訪問倉庫。
firewall-cmd --zone=public --add-port=5000/tcp --permanent
firewall-cmd --reload
執行上述命令后,5000 端口將被永久開放,防火墻配置也會立即生效。
二、搭建 Docker 私有鏡像倉庫
準備工作完成后,就可以開始搭建私有倉庫了,主要包括拉取倉庫鏡像和啟動倉庫容器兩個步驟。
1. 拉取 registry 鏡像
Docker 官方提供的 registry 鏡像專門用于搭建私有倉庫,使用以下命令拉取:
docker pull registry
拉取過程中,Docker 會從官方倉庫下載鏡像文件。拉取完成后,用docker images命令可查看是否成功,若列表中出現 registry 鏡像信息,說明拉取成功。
docker images
2. 啟動倉庫容器
啟動容器時,需要進行端口映射、命名容器以及數據掛載等配置,確保倉庫能正常運行且數據可持久化。
docker run -d -p 5000:5000 --name myregistry -v /opt/registry:/var/lib/registry registry
-
-d:讓容器在后臺運行,不占用當前終端。
-
-p 5000:5000:將容器的 5000 端口映射到宿主機的 5000 端口,這樣外部才能通過宿主機端口訪問倉庫。
-
–name myregistry:給容器命名為 myregistry,方便后續管理和操作。
-
-v /opt/registry:/var/lib/registry:把宿主機的/opt/registry目錄掛載到容器的/var/lib/registry目錄,容器內的鏡像數據會存儲到宿主機的該目錄,即使容器被刪除,數據也不會丟失。
啟動后,用docker ps命令查看容器是否正常運行,若狀態為 “Up”,則表示倉庫容器啟動成功。
docker ps
三、配置倉庫訪問權限
為了保證私有倉庫的安全性,需要配置訪問權限,只有授權用戶才能進行推送和拉取操作。
1. 安裝 httpd-tools 工具
該工具用于生成存儲用戶名和密碼的文件,是實現身份認證的關鍵。
- CentOS 7 安裝:
yum install -y httpd-tools
- CentOS 8 安裝:
dnf install -y httpd-tools
2. 創建認證信息存儲目錄
專門創建一個目錄來存放認證文件,便于管理。
mkdir -p /opt/registry/auth
-p選項確保如果目錄不存在,會自動創建父目錄。
3. 生成密碼文件
通過 htpasswd 命令生成包含用戶信息的密碼文件。
- 首次創建用戶:
htpasswd -Bc /opt/registry/auth/htpasswd username
這里的username是你要創建的用戶名,執行命令后會提示輸入密碼,輸入兩次確認后,就會在/opt/registry/auth目錄下生成htpasswd文件。-B表示使用 bcrypt 算法加密密碼,更安全;-c表示創建新文件。
- 添加其他用戶:
如果需要添加更多用戶,不需要-c選項,否則會覆蓋現有文件。
htpasswd -B /opt/registry/auth/htpasswd another_username
4. 重啟倉庫容器應用認證配置
先停止并刪除之前的容器,再用新的配置啟動。
docker stop myregistry
docker rm myregistry
然后執行以下命令重新啟動容器,加載認證配置:
docker run -d -p 5000:5000 --name myregistry -v /opt/registry:/var/lib/registry -v /opt/registry/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
其中,-v /opt/registry/auth:/auth將存放認證文件的目錄掛載到容器內;-e設置的環境變量指定了認證方式、認證領域和密碼文件路徑。
四、配置客戶端訪問倉庫
其他用戶的客戶端需要進行相應配置才能連接到私有倉庫。
1. 非 HTTPS 訪問配置
如果倉庫未配置 HTTPS,客戶端需要允許非 HTTPS 訪問。
編輯客戶端的/etc/docker/daemon.json文件(不存在則創建):
vi /etc/docker/daemon.json
在文件中添加倉庫地址:
{"insecure-registries":["倉庫服務器IP:5000"]}
保存退出后,重啟 Docker 服務使配置生效:
systemctl restart docker
2. 登錄倉庫
配置完成后,用戶需要登錄才能進行操作。
docker login 倉庫服務器IP:5000
輸入正確的用戶名和密碼后,顯示 “Login Succeeded” 則登錄成功。
五、測試私有倉庫
完成上述配置后,需要測試倉庫是否能正常接收和提供鏡像。
1. 推送鏡像到倉庫
先在客戶端對本地鏡像進行標記,使其符合私有倉庫的命名規范。
docker tag nginx:latest 倉庫服務器IP:5000/mynginx:v1
這里以 nginx 鏡像為例,倉庫服務器IP:5000是私有倉庫地址,mynginx:v1是自定義的鏡像名和標簽。
然后推送標記后的鏡像到倉庫:
docker push 倉庫服務器IP:5000/mynginx:v1
推送過程中會顯示進度,完成后提示推送成功。
2. 從倉庫拉取鏡像
在另一臺已配置好的客戶端上,拉取剛才推送的鏡像,測試倉庫是否能正常提供鏡像。
docker pull 倉庫服務器IP:5000/mynginx:v1
若拉取成功,說明倉庫工作正常。
六、倉庫維護與擴展
對倉庫進行定期維護和合理擴展,能保證其長期穩定運行。
1. 查看倉庫鏡像信息
通過 HTTP 請求可以查看倉庫中的鏡像列表和標簽信息。
-
查看所有鏡像:在瀏覽器或用 curl 命令訪問http://倉庫服務器IP:5000/v2/_catalog。
-
查看指定鏡像標簽:訪問http://倉庫服務器IP:5000/v2/鏡像名稱/tags/list。
2. 清理冗余數據
隨著鏡像的頻繁推送和刪除,倉庫會產生無用的冗余數據,需要定期清理。
先進入倉庫容器:
docker exec -it myregistry sh
然后執行清理命令:
registry garbage-collect /etc/docker/registry/config.yml
該命令會刪除未被引用的鏡像數據,釋放存儲空間。
3. 配置 HTTPS 訪問(可選)
為了提高安全性,可配置 HTTPS 訪問。需要準備 SSL 證書,然后在啟動倉庫容器時添加證書相關的掛載和環境變量,具體可參考 Docker 官方文檔的詳細配置步驟。