Docker如何搭建私有鏡像倉庫
一、為什么要自己搭建鏡像倉庫
鏡像倉庫(Docker Registry)有公共的和私有的兩種形式:
公共倉庫:例如Docker官方的Docker Hub,國內(nèi)也有一些云服務(wù)商提供類似于Docker Hub的公開服務(wù),比如網(wǎng)易云鏡像服務(wù)、DaoCloud鏡像服務(wù)、阿里云鏡像服務(wù)等。
用戶在本地搭建 私有Docker Registry。
因?yàn)槠髽I(yè)中的鏡像那不都是商業(yè)機(jī)密么,肯定不希望開源,不然還怎么賺錢,所以企業(yè)自己的鏡像最好是采用私有Docker Registry來實(shí)現(xiàn)。
二、搭建私有鏡像倉庫
1.無UI的簡化版鏡像倉庫
Docker官方的Docker Registry是一個(gè)基礎(chǔ)版本的Docker鏡像倉庫,具備倉庫管理的完整功能,但是沒有圖形化界面。
docker run -d \
--restart=always \
--name registry \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry命令中掛載了一個(gè)數(shù)據(jù)卷registry-data到容器內(nèi)的/var/lib/registry 目錄,這是私有鏡像庫存放數(shù)據(jù)的目錄。
訪問http://你的IP地址:5000/v2/_catalog 可以查看當(dāng)前私有鏡像服務(wù)中包含的鏡像
2.有UI的鏡像倉庫
當(dāng)然了,我們平??隙ㄊ鞘褂脦в袌D形化界面的咯
Ⅰ.配置Docker信任地址
私服采用的是http協(xié)議,默認(rèn)不被Docker信任,所以需要做一個(gè)配置:
# 打開要修改的文件 vi /etc/docker/daemon.json # 添加內(nèi)容: # 需要將 http://192.168.3.128 替換為你自己的 ip "insecure-registries":["http://192.168.3.128:8080"] # 重加載 systemctl daemon-reload # 重啟docker systemctl restart docker
需要注意的是,別忘了需要寫一個(gè)逗號(hào)

拓展:如果遇見錯(cuò)誤:
Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details. To force a start use "systemctl reset-failed docker.service" followed by "systemctl start docker.service" again.
- 進(jìn)入目錄下修改配置文件名稱,路徑:cd /etc/docker
- 查看當(dāng)前目錄的配置文件,輸入:ls
- 把daemon.json配置文件改成daemon.conf即可,命令:mv daemon.json daemon.conf
- 重新啟動(dòng)服務(wù),命令:sudo service docker restart
- 然后再docker ps, 運(yùn)行ok了
- 等運(yùn)行成功后再改回來,不然推送鏡像時(shí)推送不上去
Ⅱ.創(chuàng)建compose文件部署
Docker官方的Docker Registry因?yàn)閹в袌D形化界面版本的鏡像倉庫不是官方提供的,而是由第三方個(gè)人基于 Docker 官方的 Docker Registry 進(jìn)行開發(fā)的,所以部署時(shí)需要兩個(gè)靜像,我們使用 compose 文件進(jìn)行部署
- 1.創(chuàng)建文件
mkdir /tmp/registry-ui cd /tmp/registry-ui/ touch docker-compose.yml

- 2.在 docker-compose.yml 文件中添加以下內(nèi)容
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=溫柔哥私有倉庫
- REGISTRY_URL=http://registry:5000
depends_on:
- registrydepends_on: - registry 表明 ui 依賴于 registry,所以這樣就會(huì)先啟動(dòng)registry
- 3.啟動(dòng)
docker-compose up -d
啟動(dòng)成功

- 4.去瀏覽器訪問:192.168.3.128:8080

三、推送鏡像
1.tag本地鏡像
推送鏡像到私有鏡像服務(wù)必須先tag(就是將本地鏡像重命名一下,他們的鏡像 ID 都是一樣的,本質(zhì)上還是同一個(gè)鏡像)
故我們先重新tag本地鏡像,名稱前綴為私有倉庫的地址:這里我的地址為:192.168.3.128:8080,以 nginx 鏡像為例,將 nginx:latest 鏡像重命名為 192.168.3.128:8080/nginx:1.0
docker tag nginx:latest 192.168.3.128:8080/nginx:1.0

2.推送鏡像
docker push 192.168.3.128:8080/nginx:1.0

可以看到,推送成功了

四、拉取鏡像
1.先把之前的刪除掉
docker rmi 192.168.3.128:8080/nginx:1.0 docker rmi nginx:latest # 如果鏡像正在被容器使用,可以使用 -f 選項(xiàng)進(jìn)行強(qiáng)制刪除

2.拉取鏡像
docker pull 192.168.3.128:8080/nginx:1.0

這里有個(gè)小疑問:
我看老師是把 192.168.3.128:8080/nginx:1.0 和 nginx:latest 兩個(gè)鏡像都刪除了,然后一下拉取兩個(gè)都回來了,但是我這里只回來了這一個(gè)鏡像 192.168.3.128:8080/nginx:1.0 ,那么這樣的話,以后 nginx:latest 就不用刪除了!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在 Docker 中安裝和運(yùn)行 PostgreSQL的詳細(xì)步驟
本文簡述在Docker中安裝和運(yùn)行PostgreSQL的流程安裝Docker、拉取鏡像、運(yùn)行容器并配置端口與密碼、驗(yàn)證容器狀態(tài)、連接數(shù)據(jù)庫及創(chuàng)建用戶,完成數(shù)據(jù)庫部署,感興趣的朋友一起看看吧2025-06-06
Jenkins+Docker?一鍵自動(dòng)化部署?SpringBoot?項(xiàng)目的詳細(xì)步驟
這篇文章主要介紹了Jenkins+Docker?一鍵自動(dòng)化部署SpringBoot?項(xiàng)目,本文章實(shí)現(xiàn)最簡單全面的Jenkins+docker+springboot?一鍵自動(dòng)部署項(xiàng)目,步驟齊全,少走坑路,需要的朋友可以參考下2022-08-08
Alpine Docker 容器中安裝包緩存與 C/C++ 運(yùn)行問題的經(jīng)驗(yàn)
本文介紹了在Docker中使用Alpine鏡像部署C/C++應(yīng)用的優(yōu)化方法,今天就來分享下我在Alpine容器中解決安裝包緩存與C/C++程序運(yùn)行問題的經(jīng)驗(yàn),感興趣的朋友一起看看吧2025-06-06
Docker?部署?Nexus?Maven私服的詳細(xì)過程
Nexus?是一個(gè)強(qiáng)大的倉庫管理器,廣泛用于管理和組織軟件構(gòu)建過程中的依賴項(xiàng)和構(gòu)件,通過?Docker?部署?Nexus?私服,可以簡化安裝和管理過程,并提供更高的靈活性和可擴(kuò)展性,這篇文章主要介紹了Docker?部署?Nexus?Maven私服的詳細(xì)過程,需要的朋友可以參考下2024-08-08
優(yōu)化Docker鏡像安全性的12個(gè)技巧總結(jié)
docker是虛擬化容器技術(shù),有三個(gè)主要概念,鏡像(類)、容器(對(duì)象)、倉庫,docker就是類似VM虛擬機(jī)一樣的虛擬技術(shù),體積小,運(yùn)行速度快,下面這篇文章主要給大家介紹了關(guān)于優(yōu)化Docker鏡像安全性的12個(gè)技巧,需要的朋友可以參考下2022-03-03

