Docker仓库搭建
一、docker倉庫
1.簡介
Docker 倉庫是用來包含鏡像的位置,Docker提供一個注冊服務器(Register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。Docker運行中使用的默認倉庫是 Docker Hub 公共倉庫。
2.docker hub
docker hub是docker公司維護的公共倉庫,用戶可以免費使用,也可以購買私有倉庫。
首先在docker hub 官網網站注冊一個賬號
在docker hub上新建一個公共倉庫
接下來要從docker主機上傳鏡像,首先需要登錄:
docker hub為了區分不同用戶的同名鏡像,要求鏡像的格式是:[username]/xxx.tag
我們在dockerhub上已經成功看到剛才我們上傳的webserver了
3.registry工作原理
一次docker pull 或 push背后發生的事情
index服務主要提供鏡像索引以及用戶認證的功能。當下載一個鏡像的時候,首先會去index服務上做認證,然后查找鏡像所在的registry的地址并放回給docker客戶端,docker客戶端再從registry下載鏡像,在下載過程中 registry會去index校驗客戶端token的合法性,不同鏡像可以保存在不同的registry服務上,其索引信息都放在index服務上。
Docker Registry有三個角色,分別是index、registry和registry client。
- index
負責并維護有關用戶帳戶、鏡像的校驗以及公共命名空間的信息。
Web UI
元數據存儲
認證服務
符號化 - registry
是鏡像和圖表的倉庫,它不具有本地數據庫以及不提供用戶認證,通過Index Auth service的Token的方式進行認證。 - Registry Client
Docker充當registry客戶端來維護推送和拉取,以及客戶端的授權。
二、搭建私有倉庫
docker hub雖然方便,但是還是有限制
需要internet連接,速度慢
所有人都可以訪問
由于安全原因企業不允許將鏡像放到外網
好消息是docker公司已經將registry開源,我們可以快速構建企業私有倉庫
1.下載registry鏡像
[root@server1 nginx]# docker pull registry [root@server1 nginx]# docker images registry [root@server1 nginx]# docker history registry:latest我們看到registry的端口是5000,數據卷是/var/lib/registry 所以我們需要做端口映射,把數據卷指定掛載到宿主機
2.端口映射
[root@server1 nginx]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry 將本地的鏡像上傳到倉庫 [root@server1 registry]# docker tag yakexi007/game2048 localhost:5000/game2048:latest ## 改名 [root@server1 registry]# docker push localhost:5000/game2048
查看是否上傳成功
5.為Docker倉庫添加證書加密功能
鏈接:參考docker參考文檔
實驗環境,這里我們需要重新開一臺虛擬機。server2,并且下載docker
我們測試從遠端拉取我們上傳的鏡像,發現拉取不到,這是沒有相應的注冊信息
1.部署普通的HTTP注冊表
編輯daemon.json文件,其默認位置 /etc/docker/daemon.json , 重新啟動Docker以使更改生效。
[root@server2 ~]# cd /etc/docker/ [root@server2 docker]# vim daemon.json {"insecure-registries" : ["myregistrydomain.com:5000"] } [root@server2 docker]# systemctl reload docker.service
這是我們再次嘗試拉取,成功拉取
2.使用自簽名證書
使用自簽名證書,這比不安全的注冊表解決方案更安全
這里還需要將剛才編寫的注冊巍峨文件刪除
- 生成自己的證書
生成證書(域名westos.org要求在主機上有解析)
如果注冊表當前正在運行,請停止它。
參考:官方文檔
[root@server1 ~]# vim /etc/hosts ##加上reg.westos.org解析 ,server2相同 將westos.org..crt文件復制到 /etc/docker/certs.d/reg.westos.org/ca.crt每個Docker主機上。您無需重啟Docker。 [root@server1 ~]# mkdir /etc/docker/certs.d/reg.westos.org -p [root@server2 ~]# mkdir /etc/docker/certs.d/reg.westos.org -p [root@server1 ~]# cp certs/westos.org.crt /etc/docker/certs.d/reg.westos.org/ca.crt 拷貝證書到其他docker主機 [root@server1 ~]# cd /etc/docker/certs.d/reg.westos.org/ [root@server1 reg.westos.org]# scp ca.crt server2:/etc/docker/certs.d/reg.westos.org/ 重新啟動注冊表,將其定向為使用TLS證書。此命令將certs/目錄綁定安裝到容器中的/certs/,并設置環境變量,該變量告訴容器在何處找到domain.crt anddomain.key文件。注冊表在端口443(默認的HTTPS端口)上運行。 [root@server1 ~]# docker run -d --name registry -p 443:443 -v /opt/registry:/var/lib/registry -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key registry測試:
server1上傳,server2下載
3.本地基本身份驗證
實現訪問限制的最簡單方法是通過基本身份驗證(這與其他Web服務器的基本身份驗證機制非常相似)。本示例使用本機基本身份驗證htpasswd來存儲機密。
參考:https://docs.docker.com/registry/deploying/#get-a-certificate
創建一個密碼文件
[root@server1 ~]# yum install -y httpd-tools [root@server1 ~]# mkdir auth [root@server1 ~]# htpasswd -B -c auth/htpasswd sun [root@server1 ~]# docker rm -f registry ## 停止注冊表。 [root@server1 ~]# docker run -d --name registry -p 443:443 -v /opt/registry:/var/lib/registry -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/westos.org.crt -e REGISTRY_HTTP_TLS_KEY=/certs/westos.org.key -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry ## 使用基本身份驗證啟動注冊表。注意路徑問題
測試上傳鏡像
[root@server1 ~]# docker tag mario:latest reg.westos.org/mario:latest [root@server1 ~]# docker push reg.westos.org/mario:latest
我們發現沒有認證,所以不能上傳。
嘗試從注冊表中提取鏡像,或將圖像推入倉庫。這些命令都是失敗的。
需要登錄到注冊表。
[root@server1 ~]# docker login reg.westos.org
再次嘗試上傳,顯示上傳成功。
嘗試遠端拉取鏡像,顯示失敗,沒有認證信息。
登陸
二、harbor倉庫
軟件下載:harbor-offline
部署:(依賴性 docker 17.06.0-ce+ and docker-compose 1.18.0+)
鏈接: harbor-offline-install提取碼: 2azb
1.軟件下載
[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.1.tgz [root@server1 ~]# cd harbor/ [root@server1 harbor]# mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose [root@server1 harbor]# chmod +x /usr/local/bin/docker-compose [root@server1 harbor]# docker rm -f registry [root@server1 ~]# cp -r certs/ / ##因為下面配置文件里我選擇了放在/下,所以這里將證書復制到根下了。2.修改配置信息
[root@server1 harbor]# vim harbor.yml ## 修改內容如下 hostname: reg.westos.orgcertificate: /certs/westos.org.crtprivate_key: /certs/westos.org.key harbor_admin_password: westos [root@server1 harbor]# ./install.sh ##進入默認,不加任何選項 [root@server1 harbor]# docker-compose ps [root@server1 harbor]# docker ps
3.登陸到web頁面
推送的路徑查看
4.重新獲取認證
[root@server1 harbor]# docker logout reg.westos.org Removing login credentials for reg.westos.org [root@server1 harbor]# docker login reg.westos.org Username: admin Password: 此處賬號密碼和配置文件中相同,就是登陸web頁面的賬號密碼。5.上傳鏡像
[root@server1 harbor]# docker tag mario:latest reg.westos.org/library/mario:latest [root@server1 harbor]# docker push reg.westos.org/library/mario:latest
到web頁面查看是否上傳成功
在遠端拉取鏡像時,我們可以直接指定我們的私有倉庫進行下載,如果私有倉庫中沒有,再從網絡上下載。
這里我們編輯一下文件
下圖中我們可以看到是從我們的私有倉庫中下載的
查看日志可以看到下載情況。
6加入選項重新下載配置
[root@server1 harbor]# docker-compose down ##停止并刪除 [root@server1 harbor]# ./prepare ##清理配置信息
配置中加入了漏洞掃描,內容信任等選項。
手動進行掃描,掃描太耗費內存的,所以不建議開啟掃描功能
部署根證書:
啟用docker內容信任:
export DOCKER_CONTENT_TRUST=1 export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443上傳鏡像:
[root@server1 ~]# docker tag yakexi007/game2048:latest reg.westos.org/library/game2048:latest [root@server1 ~]# docker push reg.westos.org/library/game2048:latest當我們修改鏡像的名字的時候需要我們輸入root key 當我們只修改標簽的時候,我們只用輸入repository key
為了不讓掃描,使得占用的空間越來越大,所以重新修改一下選項
總結
以上是生活随笔為你收集整理的Docker仓库搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker容器(配置+镜像建立及优化+
- 下一篇: Docker安全