Docker创建私有仓库
Docker創(chuàng)建私有倉庫
1.安裝docker
docker私有庫本身就是一個docker鏡像,所以,首先要安裝docker,然后啟動這個鏡像。關(guān)于安裝docker的過程,參考另外一個文章:
安裝docker過程記錄
2.安裝私有鏡像庫
首先,拉取私有鏡像庫
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker pull registry:2 2: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4a2: Pull complete e2ead8259a04: Pull complete 3790aef225b9: Pull complete Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375 Status: Downloaded newer image for registry:2 docker.io/library/registry:2 [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry 2 b8604a3fe854 3 weeks ago 26.2MB這里拉取標簽為2的鏡像
然后,啟動私有鏡像的容器
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# mkdir -p /opt/data/registry [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker run --name local-regi -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry registry:2 cc672b3e0695adc0d1540ed46ae8253b6d32ed542560b8e8d3dbe1889dc1ef62 [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc672b3e0695 registry:2 "/entrypoint.sh /etc…" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp local-regi執(zhí)行結(jié)果可以看到,容器被啟動,并映射了5000端口到本地。后面就將自己的鏡像提交到私有鏡像庫。
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my-proj latest 2cfa024db852 6 seconds ago 643MB registry 2 b8604a3fe854 3 weeks ago 26.2MB java 8 d23bdf5b1b1b 4 years ago 643MB這里我構(gòu)建了一個私有鏡像"my-proj"
3.提交鏡像
要將鏡像提交到私有倉庫,首先需要對docker聲明私有鏡像服務。
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:16:3e:01:6e:2a brd ff:ff:ff:ff:ff:ffinet 172.17.197.46/20 brd 172.17.207.255 scope global dynamic eth0valid_lft 315358174sec preferred_lft 315358174secinet6 fe80::216:3eff:fe01:6e2a/64 scope link valid_lft forever preferred_lft forever [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc672b3e0695 registry:2 "/entrypoint.sh /etc…" 15 minutes ago Up 15 minutes 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp local-regi本機ip:172.17.197.46,已經(jīng)啟動了容器“l(fā)ocal-regi”,映射端口5000
然后,在docker客戶端注冊私有鏡像服務:
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# tee /etc/docker/daemon.json <<-'EOF' > { > "insecure-registries":["172.17.197.46:5000"] > } > EOF {"insecure-registries":["172.17.197.46:5000"] } [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# systemctl daemon-reload [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# systemctl restart docker此后,當客戶端提交鏡像到私有鏡像庫,分為兩步:打標簽和提交:
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my-proj latest 2cfa024db852 14 minutes ago 643MB registry 2 b8604a3fe854 3 weeks ago 26.2MB java 8 d23bdf5b1b1b 4 years ago 643MB [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker tag my-proj 172.17.197.46:5000/my-proj:latest [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker push 172.17.197.46:5000/my-proj:latest The push refers to repository [172.17.197.46:5000/my-proj] 35c20f26d188: Pushed c3fe59dd9556: Pushed 6ed1a81ba5b6: Pushed a3483ce177ce: Pushed ce6c8756685b: Pushed 30339f20ced0: Pushed 0eb22bfb707d: Pushed a2ae92ffcd29: Pushed latest: digest: sha256:79d74b66dcb69e5b0facbf7a3c815167980ab9a3064c684cf68da01bba39abd8 size: 2000經(jīng)過上面的操作,鏡像已經(jīng)被提交到docker私有服務。
如果客戶端像要下載這個鏡像,首先需要像上面那個描述的,注冊私有鏡像服務。然后就用下面類似的操作即可:
[root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry 2 b8604a3fe854 3 weeks ago 26.2MB java 8 d23bdf5b1b1b 4 years ago 643MB [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker pull 172.17.197.46:5000/my-proj:latest latest: Pulling from my-proj 7448db3b31eb: Already exists c36604fa7939: Already exists 29e8ef0e3340: Already exists a0c934d2565d: Already exists a360a17c9cab: Already exists cfcc996af805: Already exists 2cf014724202: Already exists 4bc402a00dfe: Already exists Digest: sha256:79d74b66dcb69e5b0facbf7a3c815167980ab9a3064c684cf68da01bba39abd8 Status: Downloaded newer image for 172.17.197.46:5000/my-proj:latest 172.17.197.46:5000/my-proj:latest [root@iZ0jl6svdf9rj5xwb0nscoZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 172.17.197.46:5000/my-proj latest 2cfa024db852 18 minutes ago 643MB registry 2 b8604a3fe854 3 weeks ago 26.2MB java 8 d23bdf5b1b1b 4 years ago 643MB4.其他注意
這個私有docker鏡像庫有三個要注意的問題:
a.鏡像存儲
首先,如果沒有特別的操作,私有鏡像作為docker的容器,在重建后,存儲的鏡像就沒有了,需要使用掛載命令,將私有鏡像存儲位置掛載到宿主機或者其他docker容器外部位置,命令如下:
docker run --name local-regi -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry registry:2-v命令將鏡像存儲掛載到宿主機的/opt/data/registry目錄
b.容器啟動
私有鏡像服務作為執(zhí)行的容器,在重啟后,需要手動啟動,可以使用restart參數(shù),在docker服務啟動,自動啟動這個容器,再將docker服務設置為隨系統(tǒng)啟動即可。
docker run --name local-regi -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry registry:2上面的命令用了–restart=always,在docker服務啟動后,自動啟動這個容器
c.管理界面
還存在的問題就是,這個私有服務的容器,內(nèi)部保存著很多私有鏡像,管理起來非常不容器,這需要獨立提供一套管理界面,通常,我們可以使用“harbor”進行這類操作。關(guān)于harbor的使用方法,稍后,另起文檔記錄。
總結(jié)
以上是生活随笔為你收集整理的Docker创建私有仓库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WorkNC3D沿面精加工快速修圆小技巧
- 下一篇: 一文搞懂 Python 私有属性 私有