Docker Registry
是 Docker 容器鏡像的存儲(chǔ)和分發(fā)服務(wù)叼架,允許用戶存儲(chǔ)和管理 Docker 鏡像缩赛。它可以是公共的秽五,如 Docker Hub堡纬,也可以是私有的聂受,如自建的 Docker Registry。
Registry
是一個(gè)非常簡單的輕量級(jí)本地私有倉庫烤镐,由于該鏡像倉庫比較單一蛋济,實(shí)際生產(chǎn)環(huán)境很少有公司使用。
一炮叶、安裝 Docker
# 安裝 yum 工具集
yum install -y yum-utils
# 添加阿里云docker-ce倉庫
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker-ce(社區(qū)版)軟件包
yum -y install docker-ce
# 啟用Docker Cgroup用于限制進(jìn)程的資源使用量碗旅,如CPU、內(nèi)存資源
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 啟動(dòng)docker并設(shè)置隨機(jī)自啟
systemctl enable docker ; systemctl start docker
二镜悉、部署 Registry
# 拉取私有鏡像倉庫到本地
docker pull registry
# 啟動(dòng)私有鏡像倉庫
docker run -d -p 5000:5000 --restart=always --name registry registry:latest
這里的參數(shù)解釋:
-d: 后臺(tái)運(yùn)行容器祟辟。
-p 5000:5000: 將容器的 5000 端口映射到主機(jī)的 5000 端口,這是 Registry 默認(rèn)的監(jiān)聽端口侣肄。
--restart=always: 設(shè)置容器自動(dòng)重啟旧困,以確保即使系統(tǒng)重啟或者 Docker 服務(wù)重啟后,Registry 也能自動(dòng)重新啟動(dòng)稼锅。
--name registry: 為容器指定一個(gè)名稱叮喳,這里命名為 registry。
registry:latest: 使用 Docker Hub 上的 registry 鏡像缰贝, latest表示使用的是 Registry 的版本 馍悟。
啟動(dòng)后,瀏覽器直接訪問http://IP:5000端口剩晴,訪問不到任何內(nèi)容锣咒,正確的訪問方式:http://IP:5000/v2/_catalog
看到 {"repositories":[]}侵状,說明 docker registry 已經(jīng)部署成功,只是倉庫中還沒有存儲(chǔ)鏡像
# 編輯docker配置文件
需要配置 /etc/docker/daemon.json
添加
"insecure-registries": ["192.168.1.101:5000"]
注:配置信息除最后一行外毅整,每行末尾都有一個(gè)英文的逗號(hào)趣兄,
默認(rèn)情況下,Docker 只允許使用 HTTPS 協(xié)議(安全連接)來拉取和推送鏡像悼嫉。
如果需要在 Docker 中訪問一個(gè)沒有啟用 HTTPS 的私有鏡像倉庫艇潭,
可以通過在 daemon.json 中添加 insecure-registries 字段來指定允許使用不安全的 HTTP 連接訪問的鏡像倉庫。
systemctl daemon-reload # 重載配置文件
systemctl restart docker # 重啟docker
如果是在當(dāng)前部署 registry 的機(jī)器上戏蔑,可以拉取 nginx 測試上傳到 registry
docker pull nginx:latest
# 查看已有鏡像
docker images
# 給 nginx 鏡像打標(biāo)簽
docker tag nginx:latest 192.168.1.100:5000/mynginx:1.0
# 查看是否標(biāo)記成功
docker images
# 上傳鏡像到私有倉庫
docker push 192.168.1.100:5000/mynginx:1.0
http://192.168.1.100:5000/v2/_catalog
看到 {"repositories":["mynginx"]}蹋凝,說明鏡像已經(jīng)成功上傳到 docker registry 私有倉庫中。
docker tag
docker tag 命令用于給本地的一個(gè)鏡像打上新的標(biāo)簽总棵,這個(gè)標(biāo)簽可以是另一個(gè)鏡像名稱和標(biāo)簽的組合鳍寂,或者只是一個(gè)新的標(biāo)簽。
docker tag SOURCE_IMAGE[:TAG] repository_name/TARGET_IMAGE[:TAG]
示例:
docker tag nginx:latest 192.168.1.100:5000/mynginx:1.0
參數(shù)解釋:
SOURCE_IMAGE[:TAG]:要標(biāo)記的本地鏡像情龄∑矗可以包含標(biāo)簽(TAG),如果沒有指定標(biāo)簽骤视,默認(rèn)為 latest鞍爱。
TARGET_IMAGE[:TAG]:新標(biāo)記的目標(biāo)鏡像∽ㄐ铮可以包含標(biāo)簽(TAG)睹逃,如果沒有指定標(biāo)簽,默認(rèn)為 latest笼裳。
repository_name:私有鏡像倉庫地址
docker push
docker push repository_name/IMAGE[:TAG]
示例:
docker push 192.168.1.100:5000/mynginx:1.0
三唯卖、部署 docker-registry-web
docker-registry-web
是一個(gè)開源項(xiàng)目,它提供了一個(gè)簡單的 Web 界面來管理和瀏覽 Docker Registry 中的鏡像躬柬。
# 拉取docker-registry-web鏡像
docker pull hyper/docker-registry-web
docker run -it -d --name registry-web \
-e REGISTRY_URL=http://192.168.1.100:5000/v2 \
-e REGISTRY_NAME=192.168.1.100:5000 \
-p 8000:8080 \
hyper/docker-registry-web
參數(shù)解釋:
1拜轨、docker run:
這是 Docker 命令,用于運(yùn)行一個(gè)新的容器允青。
2橄碾、-it:
-i 表示交互模式(interactive),允許你在容器中進(jìn)行交互颠锉。
-t 表示分配一個(gè)偽終端(pseudo-TTY)法牲,通常與 -i 一起使用以便交互式操作。
在這個(gè)具體的命令中琼掠,-it 用于保持容器在前臺(tái)運(yùn)行拒垃,并能夠在控制臺(tái)上查看容器的輸出和日志。
3瓷蛙、-d:
表示以后臺(tái)(detached)模式運(yùn)行容器悼瓮,即使不指定 -it 也可以使容器在后臺(tái)運(yùn)行戈毒。
--name registry-web:
指定容器的名稱為 registry-web,這樣在后續(xù)的操作中可以通過這個(gè)名稱來引用這個(gè)容器横堡。
4埋市、-e REGISTRY_URL=http://192.168.1.100:5000/v2:
設(shè)置環(huán)境變量 REGISTRY_URL,指定了要連接的 Docker Registry 的 URL命贴。
在這個(gè)例子中道宅,http://192.168.1.100:5000/v2 是 Docker Registry 的地址,后面的 /v2 表示 Docker Registry API 的版本胸蛛。
5污茵、-e REGISTRY_NAME=192.168.1.100:5000:
設(shè)置環(huán)境變量 REGISTRY_NAME,用于在 docker-registry-web 的界面上顯示 Registry 的名稱胚泌。
在這里省咨,192.168.1.100:5000 是注冊表的名稱肃弟,將顯示在 docker-registry-web 界面上玷室,以便用戶能夠識(shí)別所連接的 Registry。
6笤受、-p 8000:8080:
將容器的 8080 端口映射到宿主機(jī)的 8000 端口穷缤,允許通過 8000 端口訪問 docker-registry-web 提供的 Web 界面。
這里宿主機(jī)上的 8000 端口是供外部訪問用的箩兽,可以根據(jù)需要調(diào)整映射的端口號(hào)津肛。
7、hyper/docker-registry-web:
指定要運(yùn)行的 Docker 鏡像汗贫,這里是 hyper/docker-registry-web身坐,是 docker-registry-web 的鏡像名稱和標(biāo)簽(版本)。
# 訪問 http://192.168.1.100:8000/落包,可以看到Docker Registry中存儲(chǔ)的鏡像信息
docker-registry-web 連接基于 HTTPS 的 Docker Registry
??
docker run -d -p 8000:8080 --name registry-web \
-e REGISTRY_URL=https://tt.dd.com:5000/v2 \
-e REGISTRY_NAME=192.168.1.100:5000 \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
-e REGISTRY_BASIC_AUTH="YWRtaW46MTIzNDU2" \
-v /securitit/registry/certs:/certs \
-e DOCKER_REGISTRY_WEB_HTTPS_KEY=/certs/domain.key \
-e DOCKER_REGISTRY_WEB_HTTPS_CERTIFICATE=/certs/domain.pem \
hyper/docker-registry-web
# master 節(jié)點(diǎn)創(chuàng)建docker registry secret
kubectl create secret docker-registry tt \
--docker-server=tt.dd.com:5000 \
--docker-username=admin \
--docker-password=123456 \
--docker-email=jcn@example.com
# 刪除 secret
kubectl delete secret tt
四部蛇、 Registry配置 https 服務(wù)
1、確認(rèn)目錄存在并創(chuàng)建
mkdir -p /securitit/registry/auth
2咐蝇、使用 htpasswd 生成文件
sudo yum install httpd-tools -y
htpasswd -Bbn admin 123456 > /securitit/registry/auth/htpasswd
3涯鲁、 確認(rèn)文件生成
執(zhí)行完上述命令后,使用以下命令確認(rèn) htpasswd 文件已經(jīng)成功生成并包含正確的賬號(hào)密碼:
cat /securitit/registry/auth/htpasswd
如果能夠看到類似以下內(nèi)容有序,表示文件已經(jīng)成功創(chuàng)建:
admin:$2y$05$aQ2Pq/X.vzii61OzzE1oaOasjiH90f0SDjAPNrPIc3TvfoRxkI6eu
4抹腿、使用registry鏡像啟動(dòng)容器,同時(shí)啟用基于HTTP BASIC認(rèn)證
docker run -d -p 5000:5000 --restart=always --name registry \
-v /securitit/registry/auth:/auth \
-v /securitit/registry/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
-e REGISTRY_AUTH=htpasswd \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:latest
5旭寿、訪問 https://IP:5000/v2/_catalog警绩,輸入設(shè)置的用戶名(admin)和密碼(123456)后,可正常訪問盅称。