首頁  >  文章  >  運維  >  搭建docker私有倉庫的方法

搭建docker私有倉庫的方法

王林
王林轉載
2020-11-10 16:28:202692瀏覽

搭建docker私有倉庫的方法

1、背景介紹

在Docker 中,當我們執行docker pull xxx 命令的時候,可能會比較好奇,docker 會去哪裡查找併下載鏡像呢?

相關推薦:docker教學

問題回答:

它其實是從registry.hub.docker.com 這個位址去查找,這就是Docker公司提供給我們的公共倉庫,上面的映像,大家都可以到,也可以使用。所以,我們也可以帶著倉庫位址去拉取映像,如:docker pull registry.hub.docker.com/library/alpine,不過要注意,這種方式下載的映像的預設名稱就會長一些。

如果要在公司中使用 Docker,我們基本上不可能把商業項目上傳到公共倉庫中,那如果要多個機器共享,又能怎麼做呢?

正因為這種需要,所以私有倉庫也就有用武之地了。

所謂私有倉庫,也就是在本地(區域網路)搭建的一個類似公共倉庫的東西,搭建好之後,我們可以將映像提交到私有倉庫。這樣我們既能使用 Docker 來運行我們的專案鏡像,也避免了商業專案暴露出去的風險。

下面我們用官方提供的registry鏡像來搭建私有鏡像倉庫,當然還有其它很多方法。

2、環境

準備兩台安裝好docker的伺服器: 服務端機器 (主機名稱為registry):docker私有倉庫伺服器,執行registry容器; 測試端機器(主機名稱為node):普通的docker伺服器,在這台伺服器上下載一個測試映像nginx,然後上傳到registry伺服器進行測試;

3、部署(服務端操作)

  1. 下載鏡像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复制代码
  2. 查看映像

    # docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    registry            latest              f32a97de94e1        3 months ago        25.8 MB复制代码
  3. 執行registry容器

  4. docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
    # 06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9

    參數說明 -itd:在容器中開啟一個偽終端進行互動操作,並在背景運作; -v:把宿主機的/data/registry目錄綁定 到 容器/var/lib/registry目錄(這個目錄是registry容器中存放鏡像檔的目錄),來實現資料的持久化; -p:映射埠;存取宿主機的5000埠就存取到registry容器的服務了; --restart=always:這是重啟的策略,如果這個容器異常退出會自動重新啟動容器; --name registry:建立容器命名為registry,你可以隨便命名; registry:latest:這個是剛才pull下來的鏡像;

#測試鏡像倉庫中所有的鏡像
  1. # curl http://127.0.0.1: 5000/v2/_catalog

  2. {"repositories":[]}

    現在是空的,因為才剛運行,裡面沒有任何鏡像內容。
  3. 4、測試鏡像倉庫(測試端操作)

    #修改來源與鏡像倉庫

    # vim /etc/docker/daemon.json{"registry-mirrors": [ "https://registry.docker-cn.com"]
    }# systemctl restart docker复制代码

    下載nginx映像<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复制代码
  4. 格式說明:Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

    nginx:lastest

    這是來源鏡像,也是剛才pull下來的鏡像檔;
    registry伺服器:5000/nginx:kurisu 這是目標鏡像,也是registry私有鏡像伺服器的IP位址和連接埠;

    檢視效果
  5.  # docker images
      
     REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
     registry服务器:5000/nginx   kurisu              719cd2e3ed04        2 weeks ago         109MB
     nginx                      latest              719cd2e3ed04        2 weeks ago         109MB复制代码

  6. 上傳到鏡像伺服器

    # 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

  7. 再次上傳:
# docker push registry服务器:5000/nginxThe push refers to repository [registry服务器:5000/nginx]
d7acf794921f: Pushed
d9569ca04881: Pushed
cf5b3c6798f7: Pushed
kurisu: digest: sha256:079aa93463d2566b7a81cbdf856afc6d4d2a6f9100ca3bcbecf24ade92c9a7fe size: 948复制代码

    測試下載映像
  • 上傳測試沒問題了,我們接下來測試一下從registry伺服器上下載剛才上傳的busybox鏡像,先刪除node主機上的鏡像:
# 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复制代码
  • 然後,從registry伺服器上下載nginx映像:
  • # 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中文網其他相關文章!

    陳述:
    本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除