文章目錄
1.docker hub(官方鏡像倉庫)
需要登錄 https://hub.docker.com–> 註冊帳號
1.1 登錄docker hub
docker login
要進行推送得先登錄 dockerhub 帳號
1.2 對推送的鏡像打標籤
docker tag busybox:latest redtestdocker/busybox:latest
1.3 推送鏡像
docker push redtestdocker/busybox:latest
儘量挑選小的鏡像去推送,快
再回到網頁,可以看到相應的鏡像已經推送成功
1.4 拉取鏡像
(可以先刪除 busybox 鏡像,已經有的話只會進行更新)
docker pull redtestdocker/busybox:latest
1.5 刪除 dockerhub 上的倉庫
選擇 setting–>delete–> 再輸入一次倉庫名確認 --> 刪除
2.搭建私有倉庫
搭建私有倉庫的原因
1.dockerhub 需要連網,慢;
2.所有人都可以訪問;
3.企業內部鏡像放到外網不安全
4.docker 公司已經把 registry 開源,可以搭建私有的
2.1 配置阿里雲鏡像加速器
因爲docker的官網在國外,我們使用docker pull 拉取鏡像是比較慢的,我們可以使用阿里雲提供的鏡像加速器。登陸阿里雲,註冊帳號,找到鏡像加速器,就會生成一個加速器地址。
2.2 下載 registry 鏡像
docker pull registry
下載 registry 鏡像
docker images
docker history registry:latest
docker run -d -p 5000:5000--name registry registry
運行並做端口映射
netstat-tnlp
看到本地的 5000 端口已經打開
docker volume ls
查看邏輯卷
2.3 上傳本地鏡像到 registry
docker tag nginx:latest localhost:5000/nginx:latest
#需要先給鏡像重新打 tag
docker push localhost:5000/nginx
##通過本機 5000 端口進行上傳
curl localhost:5000/v2/_catalog
##查看倉庫內容,v2 表示 registry 版本是 2 版本 ;也可以在本地掛載的目錄中查看
tree docker
查看目錄結構,看到 nginx
這時候倉庫搭建完成,但是現在命令行操作不方便,而且如果遠程連接時,必須要走 tls 加密,不然用戶名密碼是名文,不安全。
2.4 配置 registry 加密(tls)
可以在https://docs.docker.com/registry/insecure 複製
mkdir -p certs
創建證書目錄
opensl req \ #生成加密證書和 key
>-newkeyrsa:4096-nodes-sha256-keyoutcerts/westos.org.key\
>-x509-days365-outcerts/westos.org.crt
CN->Shaanxi->Xi'an->Westos->Linux->red.org(最好寫域名)->[email protected]
ls certs/
docker rm -f registry
刪除,要重載 registry
docker run -d \
> --restart=always\ ##表示容器開機自啓動
> --name registry\ > -v"$(pwd)"/certs:/certs\ ##指定數據目錄
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443\ ##-e 表示編輯容器運行的參數
> -eREGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt\ ##指定證書文件
> -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key\ ##指定key
> -p 443:443\
> registry
netstat -tnlp
443 端口打開
2.5 測試
先要配置域名的解析,默認是以域名方式通信
mkdir -p /etc/docker/certs.d/red.org
創建證書目錄
cp/ root/certs/red.org.crt /etc/docker/certs.d/red.org/ca.crt
拷貝證書
docker tag nginx:latest red.org/nginx:latest
打 標 籤 , red.org 必須要有解析
docker push red.org/nginx
上傳成功,此時使用的就是 tls 加密
3.docker 倉庫添加用戶認證功能
1 添加用戶
mkdir auth
docker run --rm\
>--entrypointht passwd\
>registry-Bbnadminwestos
>auth/htpasswd
2 再次添加用戶
docker run --rm --entrypoint htpasswd registry -Bbn wsp redhat >> auth/htpasswd
3.用戶認證
docker rm -f registry
docker run -d
--restart=always
--name registry
-v "$(pwd)"/certs:/certs
-e REGISTRY_HTTP_ADDR=0.0.0.0:443
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/red.org.crt
-e REGISTRY_HTTP_TLS_KEY=/certs/red.org.key
-p 443:443
-v "$(pwd)"/auth:/auth
-e "REGISTRY_AUTH=htpasswd"
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
registry
4.測試
docker login westos.org
測試認證登錄
docker logout westos.org
測試認證登出
docker push westos.org/nginx
無法上傳
docker login westos.org
登錄上傳,可以
4.遠程主機連接倉庫
server2 上安裝docker,並且要做解析
scp -r /etc/docker/* server2:/etc/docker/
把證書發送給 server2, 必須有證書才能登錄(server1 在啓動容器時加入了認證,所以要先認證)
docker login red.org
認證登錄
docker pull red.org/nginx
成功拉取
docker run -d --name nginx -p 80:80 red.org/nginx
運行容器
curl localhost