1. 程式人生 > 實用技巧 >【Docker】Docker 訪問倉庫

【Docker】Docker 訪問倉庫

參考教程:https://yeasy.gitbook.io/docker_practice/introduction
書籍:《Docker技術入門與實踐》

倉庫(Repository)是集中存放映象的地方。

一個容易混淆的概念是註冊伺服器(Registry)。實際上註冊伺服器是管理倉庫的具體伺服器,每個伺服器上可以有多個倉庫,而每個倉庫下面有多個映象。從這方面來說,倉庫可以被認為是一個具體的專案或目錄。例如對於倉庫地址 docker.io/ubuntu 來說,docker.io 是註冊伺服器地址,ubuntu 是倉庫名。

大部分時候,並不需要嚴格區分這兩者的概念。

環境

  1. virtual box 6.1
  2. centos 7.8
  3. docker 19.03

Docker Hub

推送映象到 Docker Hub。

[node1] (local) [email protected] ~
$ docker tag busybox jiangbo920827/my_busybox:v1
[node1] (local) [email protected] ~
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
jiangbo920827/my_busybox   v1                  6858809bf669        10 days ago         1.23MB
busybox                    latest              6858809bf669        10 days ago         1.23MB
[node1] (local) [email protected] ~
$ docker login --username jiangbo920827
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[node1] (local) [email protected] ~
$ docker push jiangbo920827/my_busybox:v1
The push refers to repository [docker.io/jiangbo920827/my_busybox]
be8b8b42328a: Mounted from library/busybox 
v1: digest: sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002 size: 527
[node1] (local) [email protected] ~

私有倉庫

有時候使用 Docker Hub 這樣的公共倉庫可能不方便,使用者可以建立一個本地倉庫供私人使用。

docker-registry 是官方提供的工具,可以用於構建私有的映象倉庫。本文內容基於 docker-registry v2.x 版本。

[node1] (local) [email protected] ~
$ docker run -d -p 5000:5000 --restart=always --name registry registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
cbdbe7a5bc2a: Pull complete 
47112e65547d: Pull complete 
46bcb632e506: Pull complete 
c1cc712bcecd: Pull complete 
3db6272dcbfa: Pull complete 
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:latest
4256b6cfdd6daaa74ec055f030eb92432c753e905239dad428f16acbdf589a45
[node1] (local) [email protected] ~
$ docker tag busybox 127.0.0.1:5000/my_busybox
[node1] (local) [email protected] ~
$ docker push 127.0.0.1:5000/my_busybox
The push refers to repository [127.0.0.1:5000/my_busybox]
be8b8b42328a: Pushed 
latest: digest: sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002 size: 527
[node1] (local) [email protected] ~
$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["my_busybox"]}
[node1] (local) [email protected] ~

Nexus 3

使用 Docker 官方的 Registry 建立的倉庫面臨一些維護問題。比如某些映象刪除以後空間預設是不會回收的,需要一些命令去回收空間然後重啟 Registry 程式。在企業中把內部的一些工具包放入 Nexus 中是比較常見的做法,最新版本 Nexus3.x 全面支援 Docker 的私有映象。所以使用 Nexus3.x 一個軟體來管理 Docker , Maven , Yum , PyPI 等是一個明智的選擇。

$ docker run -d --name nexus3 --restart=always \
    -p 8081:8081 \
    --mount src=nexus-data,target=/nexus-data \
    sonatype/nexus3

看到如下的介面,則啟動成功:

總結

介紹了公共倉庫和私有倉庫,都可以用來儲存映象。