中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何搭建私有鏡像倉庫

發布時間:2021-10-14 14:15:33 來源:億速云 閱讀:172 作者:iii 欄目:編程語言

這篇文章主要介紹“如何搭建私有鏡像倉庫”,在日常操作中,相信很多人在如何搭建私有鏡像倉庫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何搭建私有鏡像倉庫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Docker容器

什么是docker

docker是一個的容器實現,包括三個基本概念:

  • 鏡像(Image): Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。

  • 容器(Container): 鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

  • 倉庫(Repository): 倉庫可看成一個代碼控制中心,用來保存鏡像。 如何搭建私有鏡像倉庫

開啟遠程訪問

docker開啟遠程訪問有兩種方式:

Configuring remote access with systemd unit file

編輯docker.service,添加-H fd:// -H tcp://127.0.0.1:2375啟動參數,然后重新加載配置并重啟

 $ sudo systemctl daemon-reload
 $ sudo systemctl restart docker.service
Configuring remote access with daemon.json

修改docker進程配置文件,添加hosts。(本文采用的方式)

  1. Set the hosts array in the /etc/docker/daemon.json to connect to the UNIX socket and an IP address, as follows:

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
  1. Restart Docker.

  2. Check to see whether the change was honored by reviewing the output of netstat to confirm dockerd is listening on the configured port.

$ sudo netstat -lntp | grep dockerd
tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd

systemd vs daemon.json Configuring Docker to listen for connections using both the systemd unit file and the daemon.json file causes a conflict that prevents Docker from starting.

客戶端訪問遠程docker進程需要配置環境變量:
DOCKER_HOST=tcp://172.31.0.250:2375

搭建私有鏡像倉庫

鏡像倉庫是集中存放docker鏡像的地方,Docker Hub就是一個公共的鏡像倉庫。而在公司內使用,我們需要一個私有的倉庫。 可以參照https://github.com/Quiq/docker-registry-ui中的example方案進行部署。該部署方案使用docker-compose,共包含三部分:

  1. register 最重要的鏡像倉庫服務

  2. register-ui 倉庫的web ui

  3. httpd 前置http服務

docker-compose.yml文件如下:

version: "2.3"

services:
  httpd:
    image: httpd:2.4
    ports:
      - "80:80"
    volumes:
      - "./config/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro"

  registry:
    image: registry:2
    ports:
      - "5000"
    volumes:
      - "./data/registry:/var/lib/registry"
    healthcheck:
      test: ["CMD", "wget", "-S", "localhost:5000/v2/"]
      interval: 5s
      timeout: 10s

  registry-ui:
    image: quiq/docker-registry-ui:latest
    ports:
      - "8000"
    volumes:
      - "./data/registry-ui:/opt/data"
      - "./config/registry-ui.yml:/opt/config.yml:ro"
    depends_on:
      registry:
        condition: service_healthy

從配置文件可以看到,該方案使用volumes把需要保存的數據映射到宿主機,配置文件放在./config下,數據文件放到./data下。

如果沒有特殊要求,可以直接使用示例中的registry-ui.yml和httpd.conf配置文件,無需任何修改。使用docker-compose命令啟動。

$ docker-compose up -d

啟動后可以訪問80端口的/ui進入web界面(本例中因為服務運行在本地,所以使用localhost)。 如何搭建私有鏡像倉庫

80端口的/v2請求,將被轉發到鏡像服務(http://registry:5000/v2)上。通過打上tag,就可以push到私服倉庫了。

docker tag getting-started localhost/getting-started

如果是遠程服務器,需要在客戶端修改docker配置文件,增加私服的insecure配置:

$ cat /etc/docker/daemon.json
{ 
    "insecure-registries":["docker-hub.jc.com"] 
}

否則會遇到x509異常:

x509: certificate is valid for ingress.local, not docker-hub.jc.com

踩坑記

因為我使用rancher的ingress進行轉發,結果在push的時候遇到

error parsing HTTP 413 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>413 Request Entity Too Large</title></head>\r\n<body>\r\n<center><h2>413 Request Entity Too Large</h2></center>\r\n<hr><center>nginx/1.19.2</center>\r\n</body>\r\n</html>\r\n"

解決辦法是在ingress的annotations中設置大小,我這里設置了1g:

annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "1g"

制作docker鏡像文件

制作docker鏡像文件有兩種方式:

  1. 使用dockerfile進行構建

$ docker build -f /path/to/a/Dockerfile .

dockerfile示例:

FROM tomcat:8-jdk8
COPY target/pop-seller.war /usr/local/tomcat/webapps/ROOT.war
  1. 使用docker commit命令進行構建

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton

$ docker commit c3f279d17e0a  svendowideit/testimage:version3
f5283438590d

$ docker images
REPOSITORY                        TAG                 ID                  CREATED             SIZE
svendowideit/testimage            version3            f5283438590d        16 seconds ago      335.7 MB

Generally, it is better to use Dockerfiles to manage your images in a documented and maintainable way.

實踐

POP項目中的實踐:

docker run -p 8080:3001 --add-host=pop-seller:172.31.98.102 -v /host/path/logs:/data/logs --name pop-seller-web -d docker-hub.jc.com/pop-web:v2.2
  • -d: 讓容器在后臺運行。

  • -p: 將容器內部使用的網絡端口隨機映射到我們使用的主機上。

  • -v: 主機的目錄 /host/path/logs 映射到容器的 /data/logs。 以日志為例,我們是不希望容器重啟后日志丟失的,對于這樣的場景,就可以將日志目錄掛到主機上。

  • -e: 配置環境變量。比如接了apollo配置中心的的工程需要配置env和key,那么就需要添加環境變量:"JAVA_OPTS=-Denv=fat -Dapollo.key=12345678”

  • --add-host: 增加hosts配置,容器的hosts文件中會增加一條配置,在沒有配置dns的開發環境就經常需要這樣配置。

到此,關于“如何搭建私有鏡像倉庫”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

水城县| 亳州市| 大港区| 辽宁省| 甘德县| 周口市| 密云县| 长沙市| 尼勒克县| 乐至县| 许昌县| 陕西省| 天门市| 石阡县| 海原县| 三门县| 永修县| 栖霞市| 平顶山市| 六枝特区| 卓尼县| 吉隆县| 铜梁县| 田东县| 华安县| 东港市| 萨嘎县| 安乡县| 吉木乃县| 宝鸡市| 双鸭山市| 财经| 广州市| 铁岭市| 博白县| 东光县| 化州市| 清原| 睢宁县| 南靖县| 登封市|