日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker仓库搭建

發布時間:2024/9/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker仓库搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、docker倉庫

1.簡介

Docker 倉庫是用來包含鏡像的位置,Docker提供一個注冊服務器(Register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像。Docker運行中使用的默認倉庫是 Docker Hub 公共倉庫。

2.docker hub

docker hub是docker公司維護的公共倉庫,用戶可以免費使用,也可以購買私有倉庫。

首先在docker hub 官網網站注冊一個賬號
在docker hub上新建一個公共倉庫

接下來要從docker主機上傳鏡像,首先需要登錄:

[root@server1 sysctl.d]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: 852791073 Password:


docker hub為了區分不同用戶的同名鏡像,要求鏡像的格式是:[username]/xxx.tag

[root@server1 ~]# docker tag webserver:v1 852791073/webserver:latest ## 我們將之前最好的nginx鏡像上傳 [root@server1 ~]# docker push 852791073/webserver:latest


我們在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


查看是否上傳成功

[root@server1 registry]# curl localhost:5000/v2/_catalog

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


這是我們再次嘗試拉取,成功拉取

[root@server2 docker]# docker pull 172.25.1.1:5000/webserver

2.使用自簽名證書

使用自簽名證書,這比不安全的注冊表解決方案更安全
這里還需要將剛才編寫的注冊巍峨文件刪除

[root@server2 docker]# rm -fr daemon.json
  • 生成自己的證書
[root@server1 ~]# mkdir -p certs [root@server1 ~]# openssl req \ > -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key \ > -x509 -days 365 -out certs/westos.org.crt

生成證書(域名westos.org要求在主機上有解析)

如果注冊表當前正在運行,請停止它。

[root@server1 ~]# docker stop registry [root@server1 ~]# docker rm registry

參考:官方文檔

[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下載

[root@server1 ~]# docker tag busybox:latest reg.westos.org/busybox:latest [root@server1 ~]# docker push reg.westos.org/busybox:latest [root@server2 ~]# docker pull reg.westos.org/busybox:latest


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


再次嘗試上傳,顯示上傳成功。

嘗試遠端拉取鏡像,顯示失敗,沒有認證信息。

[root@server2 ~]# docker pull reg.westos.org/mario


登陸

[root@server2 ~]# docker login reg.westos.org Username: sun Password: [root@server2 ~]# docker pull reg.westos.org/mario

二、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頁面查看是否上傳成功

在遠端拉取鏡像時,我們可以直接指定我們的私有倉庫進行下載,如果私有倉庫中沒有,再從網絡上下載。
這里我們編輯一下文件

[root@server2 ~]# cd /etc/docker/ [root@server2 docker]# vim daemon.json {"registry-mirrors" : ["https://reg.westos.org"] } [root@server2 docker]# systemctl reload docker.service [root@server2 docker]# docker pull mario

下圖中我們可以看到是從我們的私有倉庫中下載的

查看日志可以看到下載情況。

6加入選項重新下載配置

[root@server1 harbor]# docker-compose down ##停止并刪除 [root@server1 harbor]# ./prepare ##清理配置信息


[root@server1 harbor]# ./install.sh --with-notary --with-clair --with-chartmuseum 內容信任 ,鏡像掃描,


配置中加入了漏洞掃描,內容信任等選項。

手動進行掃描,掃描太耗費內存的,所以不建議開啟掃描功能

部署根證書:

[root@server1 ~]# mkdir ~/.docker/tls/reg.westos.org:4443 -p [root@server1 ~]# cd ~/.docker/tls/reg.westos.org:4443 [root@server1 reg.westos.org:4443]# cp /etc/docker/certs.d/reg.westos.org/ca.crt .

啟用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



為了不讓掃描,使得占用的空間越來越大,所以重新修改一下選項

[root@server1 ~]# export DOCKER_CONTENT_TRUST=0 [root@server1 harbor]# docker-compose down [root@server1 harbor]# ./prepare [root@server1 harbor]# ./install.sh --with-chartmuseum 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Docker仓库搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。