一、Docker搭建registry 私人倉(cāng)庫(kù)簡(jiǎn)易版
docker run --restart=always --name=registry2.3 -v /home/registry/data:/var/lib/registry -d -p 5000:5000 registry:2.3
說(shuō)明: -v /home/registry/data:/var/lib/registry 是把鏡像存儲(chǔ)目錄掛載到宿主機(jī),才不會(huì)刪容器導(dǎo)致數(shù)據(jù)丟失
這樣就可以運(yùn)行使用registry:2.3,但是這是對(duì)所有人開(kāi)放,并不安全,更好的方案是結(jié)合第三方存儲(chǔ)服務(wù),如阿里云OSS,并且需要給registry加上登錄驗(yàn)證,以及一些權(quán)限的限制。
二、Docker搭建registry 私人倉(cāng)庫(kù)進(jìn)化版
使用docker-compose 來(lái)進(jìn)行部署,廢話不多說(shuō)直接來(lái)操作。
首先切換到/home 目錄(我一般是使用centos 7 , home目錄為基礎(chǔ)使用目錄,具體看個(gè)人)
-
未結(jié)合OSS版
在/home目錄創(chuàng)建一個(gè)registry目錄并進(jìn)入該目錄:
mkdir registry && cd registry
在當(dāng)前目錄創(chuàng)建docker-compose.yml:
registry:
restart: always
image: "registry:2.3"
ports:
- 5000:5000
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
volumes:
- ./auth:/auth
- ./data:/var/lib/registry
在啟動(dòng) Registry 服務(wù)時(shí),需要用到以下兩個(gè)目錄
(1)auth 目錄用于存放 docker login 時(shí)的賬號(hào)和密碼
(2)data 目錄用于存放 docker push 時(shí)上傳上來(lái)的文件
執(zhí)行以下命令新建這兩個(gè)目錄:
mkdir auth && mkdir data
然后,創(chuàng)建一個(gè)測(cè)試賬號(hào)(用戶名: admin ,密碼: 123456 )并保存到 auth/htpasswd 中:
htpasswd -Bbn test 123456 > auth/htpasswd
最后就可以來(lái)啟動(dòng) Registry 服務(wù):
docker-compose up -d
docker ps 可以看到已經(jīng)run起來(lái)的容器:
[root@myali1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26895a32e59a registry:2.3 "/bin/registry /etc/d" 8 hours ago Up 8 hours 0.0.0.0:5000->5000/tcp registry_registry_1
簡(jiǎn)單示例 push 鏡像到私人倉(cāng)庫(kù)
執(zhí)行以下命令創(chuàng)建一個(gè)新鏡像:
docker tag docker.io/busybox 127.0.0.1:5000/test/busybox
說(shuō)明:鏡像名為 127.0.0.1:5000/test/busybox ,其中 127.0.0.1:5000 表示服務(wù)器地址, test/busybox 表示鏡像名。
上傳之前要先登錄:
docker login 127.0.0.1:5000
根據(jù)提示輸入賬號(hào)密碼或者一步到位:
docker login -u admin -p 123456 127.0.0.1:5000
登陸成功后,執(zhí)行以下命令即可上傳
docker push 127.0.0.1:5000/test/busybox
最后通過(guò)瀏覽器訪問(wèn) : http://ip:5000/v2/_catalog 會(huì)提示輸入賬號(hào)密碼,輸入賬號(hào)密碼之后你就可以看到剛剛push上來(lái)的鏡像。
{
"repositories": [
"test/busybox"
]
}
-
結(jié)合阿里云 OSS
將文件 docker-compose.yml 改為以下內(nèi)容:
registry:
restart: always
image: "registry:2.3"
ports:
- 5000:5000
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
- REGISTRY_STORAGE=oss
- REGISTRY_STORAGE_OSS_ACCESSKEYID=你的ACCESSKEYID
- REGISTRY_STORAGE_OSS_ACCESSKEYSECRET=你的ACCESSKEYSECRET
- REGISTRY_STORAGE_OSS_REGION=你的OSS所屬地域
- REGISTRY_STORAGE_OSS_BUCKET=你的BUCKET名稱
- REGISTRY_STORAGE_OSS_INTERNAL=false #是否走內(nèi)網(wǎng)
- REGISTRY_STORAGE_OSS_SECURE=false
- REGISTRY_STORAGE_DELETE_ENABLED=true
volumes:
- ./auth:/auth
說(shuō)明:由于使用阿里云 OSS 作為存儲(chǔ)引擎,所以不需要再將文件存儲(chǔ)到本地,因此將 volumes 中的 data 目錄配置去掉; environment 新增了一些配置參數(shù),需根據(jù)具體情況進(jìn)行修改
刪除 data 目錄和就鏡像并重新啟動(dòng)服務(wù):
docker rm -fv registry_registry_1 && rm -Rf data && docker-compose up
重新push 鏡像然后去OSS控制臺(tái)查看鏡像是否正常存儲(chǔ)到OSS服務(wù)