詳解私有 Docker Registry 部署方案及用戶手冊
本文檔旨在幫助在 Ubuntu 18.04 系統(tǒng)上從零開始部署一個(gè)私有的 Docker Registry(鏡像倉庫),并提供詳細(xì)的使用說明。通過本文檔,您將完成以下任務(wù):
- 獲取當(dāng)前 Ubuntu 系統(tǒng)信息
- 安裝 Docker 引擎
- 運(yùn)行私有 Registry 容器
- 配置 Docker 客戶端以使用 HTTP 私有倉庫
- 測試推送和拉取鏡像
- 多機(jī)訪問配置
- 常用維護(hù)命令
1. 系統(tǒng)環(huán)境檢查
在開始之前,請確認(rèn)您的 Ubuntu 系統(tǒng)版本。執(zhí)行以下命令查看發(fā)行版信息:
cat /etc/os-release
示例輸出:
NAME="Ubuntu" VERSION="18.04.5 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.5 LTS" VERSION_ID="18.04" ...
如果您的系統(tǒng)是 Ubuntu 18.04,則可以繼續(xù)下面的步驟。其他版本可能略有差異,但整體流程相似。
2. 安裝 Docker
Docker 是運(yùn)行私有倉庫的基礎(chǔ)。我們將使用官方倉庫安裝最新版本的 Docker CE。
2.1 更新包索引并安裝依賴
sudo apt-get update
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
2.2 添加 Docker 官方 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
2.3 添加穩(wěn)定版 Docker 倉庫
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
2.4 安裝 Docker CE
sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io
2.5 啟動(dòng) Docker 并設(shè)置開機(jī)自啟
sudo systemctl start docker sudo systemctl enable docker
2.6 (可選)將當(dāng)前用戶加入 docker 組
為了避免每次使用 Docker 都需要 sudo,可以將當(dāng)前用戶加入 docker 組:
sudo usermod -aG docker $USER
重要:執(zhí)行該命令后,需要重新登錄或者執(zhí)行 newgrp docker 使組權(quán)限生效。
3. 部署私有 Docker Registry
我們將使用 Docker 官方提供的 registry:2 鏡像來運(yùn)行一個(gè)輕量級(jí)的私有倉庫。
3.1 創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄
鏡像數(shù)據(jù)將持久化保存在宿主機(jī)的 /data/docker-registry 目錄下,請確保該目錄存在且 Docker 有讀寫權(quán)限:
sudo mkdir -p /data/docker-registry
3.2 運(yùn)行 Registry 容器
執(zhí)行以下命令啟動(dòng) Registry 容器:
docker run -d \ --name docker-registry \ --restart=always \ -p 5000:5000 \ -v /data/docker-registry:/var/lib/registry \ -e REGISTRY_STORAGE_DELETE_ENABLED=true \ registry:2
參數(shù)說明:
-d:后臺(tái)運(yùn)行容器--name docker-registry:指定容器名稱--restart=always:容器退出時(shí)自動(dòng)重啟-p 5000:5000:將宿主機(jī)的 5000 端口映射到容器的 5000 端口-v /data/docker-registry:/var/lib/registry:掛載數(shù)據(jù)卷,將鏡像數(shù)據(jù)持久化到宿主機(jī)-e REGISTRY_STORAGE_DELETE_ENABLED=true:啟用刪除鏡像的功能(可選)registry:2:使用的鏡像名稱和標(biāo)簽
執(zhí)行后,Docker 會(huì)自動(dòng)拉取 registry:2 鏡像并啟動(dòng)容器。如果看到類似以下輸出,則表示容器已成功啟動(dòng):
Unable to find image 'registry:2' locally 2: Pulling from library/registry ... Digest: sha256:... Status: Downloaded newer image for registry:2 95792afadf5365eeb296a670c3f7ee11b82df0580260686a50527441d1d1585a
3.3 驗(yàn)證容器運(yùn)行狀態(tài)
docker ps
應(yīng)該能看到名為 docker-registry 的容器,狀態(tài)為 Up。同時(shí)可以通過 curl 測試 Registry API 是否正常:
curl http://localhost:5000/v2/
如果返回空 JSON {},說明 Registry 運(yùn)行正常。
4. 配置 Docker 客戶端
Docker 默認(rèn)要求倉庫使用 HTTPS 連接,而我們的私有倉庫僅提供 HTTP 服務(wù)。因此需要將倉庫地址添加到 Docker 的 insecure-registries 列表中。
4.1 編輯 Docker 配置文件
sudo vim /etc/docker/daemon.json
如果文件不存在,則新建。添加以下內(nèi)容:
{
"insecure-registries": ["localhost:5000"]
}注意:如果要從其他機(jī)器訪問此私有倉庫,請將
localhost替換為該服務(wù)器的實(shí)際 IP 地址(例如192.168.1.100:5000)。并且需要在每一臺(tái)需要訪問此倉庫的機(jī)器上都進(jìn)行相同配置。
4.2 重啟 Docker 服務(wù)
sudo systemctl restart docker
4.3 重新啟動(dòng) Registry 容器
Docker 重啟后會(huì)停止所有容器,需要手動(dòng)啟動(dòng) Registry 容器:
docker start docker-registry
5. 測試私有倉庫
5.1 拉取測試鏡像
docker pull hello-world
5.2 為鏡像打上倉庫地址標(biāo)簽
docker tag hello-world localhost:5000/hello-world:test
5.3 推送鏡像到私有倉庫
docker push localhost:5000/hello-world:test
推送成功后,會(huì)顯示鏡像的 layer 上傳信息。
5.4 查看倉庫中的鏡像列表
curl http://localhost:5000/v2/_catalog
應(yīng)輸出類似 {"repositories":["hello-world"]}。
5.5 從私有倉庫拉取鏡像
先刪除本地鏡像,模擬新環(huán)境:
docker rmi hello-world localhost:5000/hello-world:test
然后從私有倉庫拉?。?/p>
docker pull localhost:5000/hello-world:test
運(yùn)行拉取的鏡像:
docker run --rm localhost:5000/hello-world:test
如果看到 Hello-World 的輸出,則整個(gè)流程成功。
6. 從其他機(jī)器訪問私有倉庫
6.1 確定服務(wù)器 IP 地址
在運(yùn)行 Registry 的服務(wù)器上執(zhí)行:
ip addr show # 或 ifconfig
找到內(nèi)網(wǎng) IP(如 192.168.1.100)或公網(wǎng) IP。
6.2 在客戶端機(jī)器上配置 insecure-registries
編輯客戶端的 /etc/docker/daemon.json,添加:
{
"insecure-registries": ["服務(wù)器IP:5000"]
}重啟客戶端 Docker:
sudo systemctl restart docker
6.3 推送鏡像到遠(yuǎn)程倉庫
在客戶端機(jī)器上,為鏡像打標(biāo)簽并推送:
docker tag hello-world 服務(wù)器IP:5000/hello-world:test docker push 服務(wù)器IP:5000/hello-world:test
6.4 拉取鏡像
docker pull 服務(wù)器IP:5000/hello-world:test
7. 防火墻設(shè)置
如果服務(wù)器啟用了防火墻(如 ufw),需要開放 5000 端口:
sudo ufw allow 5000
8. 常用管理命令
查看容器狀態(tài)
docker ps -a | grep docker-registry
查看容器日志
docker logs docker-registry
實(shí)時(shí)跟蹤日志:docker logs -f docker-registry
停止/啟動(dòng)容器
docker stop docker-registry docker start docker-registry
查看存儲(chǔ)使用情況
du -sh /data/docker-registry
列出倉庫中的所有鏡像
curl http://localhost:5000/v2/_catalog
查看某個(gè)鏡像的所有標(biāo)簽
curl http://localhost:5000/v2/<鏡像名>/tags/list
9. 常見問題
Q: 為什么推送鏡像時(shí)報(bào)錯(cuò)http: server gave HTTP response to HTTPS client?
A: 因?yàn)闆]有將倉庫地址添加到 insecure-registries,請按照第 4 節(jié)配置并重啟 Docker。
Q: 如何刪除私有倉庫中的鏡像?
A: Registry 默認(rèn)不支持通過 API 直接刪除鏡像,需要先啟用刪除功能(已在啟動(dòng)命令中通過 -e REGISTRY_STORAGE_DELETE_ENABLED=true 啟用),然后通過 Docker Registry API 進(jìn)行刪除,操作較復(fù)雜。建議使用 GC(垃圾回收)功能清理未使用的 blob。
Q: 鏡像存儲(chǔ)位置空間不足怎么辦?
A: 可以掛載更大的磁盤到 /data/docker-registry,或者定期清理無用鏡像。清理后需要手動(dòng)執(zhí)行垃圾回收:docker exec docker-registry registry garbage-collect /etc/docker/registry/config.yml
Q: 如何為私有倉庫啟用 HTTPS?
A: 生產(chǎn)環(huán)境強(qiáng)烈建議啟用 HTTPS??梢酝ㄟ^配置 Registry 使用 SSL 證書實(shí)現(xiàn),具體步驟請參考 Docker Registry 官方文檔。
10. 總結(jié)
至此,您已經(jīng)成功在 Ubuntu 18.04 上部署了私有的 Docker Registry,并掌握了基本的使用方法。該私有倉庫可以用于團(tuán)隊(duì)內(nèi)部共享鏡像,節(jié)省公網(wǎng)帶寬,并提升鏡像拉取速度。更多相關(guān)私有 Docker Registry 部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步教你用docker部署postgreSQL數(shù)據(jù)庫
這篇文章主要給大家介紹了關(guān)于如何使用docker部署postgreSQL數(shù)據(jù)庫的相關(guān)資料,PostgreSQL是一款功能豐富的關(guān)系型數(shù)據(jù)庫,類似于MySQL,它也是受歡迎程度非常高的,需要的朋友可以參考下2023-11-11
docker容器無法訪問外網(wǎng),但是宿主機(jī)卻可以的問題
這篇文章主要介紹了docker容器無法訪問外網(wǎng),但是宿主機(jī)卻可以的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

