您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何搭建私有鏡像倉庫”,在日常操作中,相信很多人在如何搭建私有鏡像倉庫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何搭建私有鏡像倉庫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
docker是一個的容器實現,包括三個基本概念:
鏡像(Image): Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
容器(Container): 鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
倉庫(Repository): 倉庫可看成一個代碼控制中心,用來保存鏡像。
docker開啟遠程訪問有兩種方式:
編輯docker.service,添加-H fd:// -H tcp://127.0.0.1:2375啟動參數,然后重新加載配置并重啟
$ sudo systemctl daemon-reload $ sudo systemctl restart docker.service
修改docker進程配置文件,添加hosts。(本文采用的方式)
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"] }
Restart Docker.
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_HOST=tcp://172.31.0.250:2375
鏡像倉庫是集中存放docker鏡像的地方,Docker Hub就是一個公共的鏡像倉庫。而在公司內使用,我們需要一個私有的倉庫。 可以參照https://github.com/Quiq/docker-registry-ui中的example方案進行部署。該部署方案使用docker-compose,共包含三部分:
register 最重要的鏡像倉庫服務
register-ui 倉庫的web ui
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鏡像文件有兩種方式:
使用dockerfile進行構建
$ docker build -f /path/to/a/Dockerfile .
dockerfile示例:
FROM tomcat:8-jdk8 COPY target/pop-seller.war /usr/local/tomcat/webapps/ROOT.war
使用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的開發環境就經常需要這樣配置。
到此,關于“如何搭建私有鏡像倉庫”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。