在Docker 中,當我們執行docker pull xxx 命令的時候,可能會比較好奇,docker 會去哪裡查找併下載鏡像呢?
相關推薦:docker教學
問題回答:
它其實是從registry.hub.docker.com 這個位址去查找,這就是Docker公司提供給我們的公共倉庫,上面的映像,大家都可以到,也可以使用。所以,我們也可以帶著倉庫位址去拉取映像,如:docker pull registry.hub.docker.com/library/alpine,不過要注意,這種方式下載的映像的預設名稱就會長一些。
如果要在公司中使用 Docker,我們基本上不可能把商業項目上傳到公共倉庫中,那如果要多個機器共享,又能怎麼做呢?
正因為這種需要,所以私有倉庫也就有用武之地了。
所謂私有倉庫,也就是在本地(區域網路)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以將映像提交到私有倉庫。這樣我們既能使用 Docker 來運行我們的專案鏡像,也避免了商業專案暴露出去的風險。
下面我們用官方提供的registry鏡像來搭建私有鏡像倉庫,當然還有其它很多方法。
準備兩台安裝好docker的伺服器: 服務端機器 (主機名稱為registry):docker私有倉庫伺服器,執行registry容器; 測試端機器(主機名稱為node):普通的docker伺服器,在這台伺服器上下載一個測試映像nginx,然後上傳到registry伺服器進行測試;
下載鏡像registry
# docker pull registryUsing default tag: latest latest: Pulling from library/registry 81033e7c1d6a: Pull complete b235084c2315: Pull complete c692f3a6894b: Pull complete ba2177f3a70e: Pull complete a8d793620947: Pull complete Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54 Status: Downloaded newer image for registry:latest复制代码
查看映像
# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE registry latest f32a97de94e1 3 months ago 25.8 MB复制代码
執行registry容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest# 06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9
# curl http://127.0.0.1: 5000/v2/_catalog
#修改來源與鏡像倉庫
# vim /etc/docker/daemon.json{"registry-mirrors": [ "https://registry.docker-cn.com"] }# systemctl restart docker复制代码
<pre class="brush:php;toolbar:false"># docker pull nginx# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 719cd2e3ed04 2 weeks ago 109MB复制代码</pre>
為映像打標籤
# docker tag nginx:latest registry服务器:5000/nginx:kurisu复制代码
這是來源鏡像,也是剛才pull下來的鏡像檔;registry伺服器:5000/nginx:kurisu
這是目標鏡像,也是registry私有鏡像伺服器的IP位址和連接埠;
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry服务器:5000/nginx kurisu 719cd2e3ed04 2 weeks ago 109MB nginx latest 719cd2e3ed04 2 weeks ago 109MB复制代码
上傳到鏡像伺服器
# docker push registry服务器:5000/nginxThe push refers to repository [registry服务器:5000/nginx] Get https://registry服务器:5000/v2/: http: server gave HTTP response to HTTPS client复制代码
這是報錯了,需要https的方法才能上傳,我們可以修改下daemon.json來解決:
[root@node ~]# vim /etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn.com"], "insecure-registries": [ "registry服务器:5000"] }复制代码
新增私有映像伺服器的位址,注意書寫格式為json,有嚴格的書寫要求,然後重新啟動docker服務:
# systemctl restart docker
# docker push registry服务器:5000/nginxThe push refers to repository [registry服务器:5000/nginx] d7acf794921f: Pushed d9569ca04881: Pushed cf5b3c6798f7: Pushed kurisu: digest: sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe size: 948复制代码
# docker rmi -f $(docker images -aq)Untagged: registry服务器:5000/nginx:kurisu Untagged: registry服务器:5000/nginx@sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe Untagged: nginx:latest Untagged: nginx@sha256:bdbf36b7f1f77ffe7bd2a32e59235dff6ecf131e3b6b5b96061c652f30685f3a Deleted: sha256:719cd2e3ed04781b11ed372ec8d712fac66d5b60a6fb6190bf76b7d18cb50105 Deleted: sha256:e9b6506fb887de50972aefd99d7c5eb56b1a8e757ed953cdfecb86b5359bcb22 Deleted: sha256:55d9d9692a9615a28d183a42bc3881a72a39393feba3664e669e7affb78daa76 Deleted: sha256:cf5b3c6798f77b1f78bf4e297b27cfa5b6caa982f04caeb5de7d13c255fd7a1e复制代码查看一下node主機上的鏡像全部刪除了:
# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE复制代码
# docker pull registry服务器:5000/nginx:kurisukurisu: Pulling from nginxfc7181108d40: Pull complete c4277fc40ec2: Pull complete 780053e98559: Pull complete Digest: sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe Status: Downloaded newer image for registry服务器:5000/nginx:kurisu复制代码查看node主機上的映像:###
# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE registry服务器:5000/nginx kurisu 719cd2e3ed04 2 weeks ago 109MB复制代码##########查看遠端倉庫映像#########列出所有映像:#### ##
# curl http://registry服务器:5000/v2/_catalog{"repositories":["nginx"]}复制代码######列出nginx映像有哪些tag:######
# curl http://registry服务器:5000/v2/nginx/tags/list{"name":"nginx","tags":["kurisu"]}复制代码
以上是搭建docker私有倉庫的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!