搜尋
首頁運維Docker搭建docker私有倉庫的方法

搭建docker私有倉庫的方法

Nov 10, 2020 pm 04:28 PM
docker

搭建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中文網其他相關文章!

    陳述
    本文轉載於:掘金。如有侵權,請聯絡admin@php.cn刪除
    掌握Docker:Linux用戶指南掌握Docker:Linux用戶指南Apr 18, 2025 am 12:08 AM

    在Linux上使用Docker可以提高開發效率和簡化應用部署。 1)拉取Ubuntu鏡像:dockerpullubuntu。 2)運行Ubuntu容器:dockerrun-itubuntu/bin/bash。 3)創建包含nginx的Dockerfile:FROMubuntu;RUNapt-getupdate&&apt-getinstall-ynginx;EXPOSE80。4)構建鏡像:dockerbuild-tmy-nginx.。 5)運行容器:dockerrun-d-p8080:80

    Linux上的Docker:應用和用例Linux上的Docker:應用和用例Apr 17, 2025 am 12:10 AM

    Docker在Linux上可以簡化應用部署和管理。 1)Docker是容器化平台,將應用及其依賴打包進輕量、可移植容器。 2)在Linux上,Docker利用cgroups和namespaces實現容器隔離和資源管理。 3)基本用法包括拉取鏡像和運行容器,高級用法如DockerCompose可定義多容器應用。 4)調試常用dockerlogs和dockerexec命令。 5)性能優化可通過多階段構建減小鏡像大小,保持Dockerfile簡潔是最佳實踐。

    Docker:用於可移植性和可擴展性的容器化應用程序Docker:用於可移植性和可擴展性的容器化應用程序Apr 16, 2025 am 12:09 AM

    Docker是一種基於Linux容器技術的工具,用於打包、分發和運行應用,提升應用的可移植性和可擴展性。 1)通過dockerbuild和dockerrun命令,可以構建和運行Docker容器。 2)DockerCompose用於定義和運行多容器的Docker應用,簡化微服務管理。 3)使用多階段構建可以優化鏡像大小,提升應用啟動速度。 4)查看容器日誌是調試容器問題的有效方法。

    docker怎麼啟動容器docker怎麼啟動容器Apr 15, 2025 pm 12:27 PM

    Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

    docker怎麼查看日誌docker怎麼查看日誌Apr 15, 2025 pm 12:24 PM

    查看 Docker 日誌的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令運行 /bin/sh 並查看日誌文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

    docker容器名稱怎麼查docker容器名稱怎麼查Apr 15, 2025 pm 12:21 PM

    可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

    docker怎麼創建容器docker怎麼創建容器Apr 15, 2025 pm 12:18 PM

    在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

    docker怎麼退出容器docker怎麼退出容器Apr 15, 2025 pm 12:15 PM

    退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    AI Hentai Generator

    AI Hentai Generator

    免費產生 AI 無盡。

    熱門文章

    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳圖形設置
    1 個月前By尊渡假赌尊渡假赌尊渡假赌
    威爾R.E.P.O.有交叉遊戲嗎?
    1 個月前By尊渡假赌尊渡假赌尊渡假赌

    熱工具

    SublimeText3 Linux新版

    SublimeText3 Linux新版

    SublimeText3 Linux最新版

    EditPlus 中文破解版

    EditPlus 中文破解版

    體積小,語法高亮,不支援程式碼提示功能

    PhpStorm Mac 版本

    PhpStorm Mac 版本

    最新(2018.2.1 )專業的PHP整合開發工具

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強大的PHP整合開發環境