【Docker】Docker 訪問倉庫
阿新 • • 發佈:2020-11-23
參考教程:https://yeasy.gitbook.io/docker_practice/introduction
書籍:《Docker技術入門與實踐》
倉庫(Repository
)是集中存放映象的地方。
一個容易混淆的概念是註冊伺服器(Registry
)。實際上註冊伺服器是管理倉庫的具體伺服器,每個伺服器上可以有多個倉庫,而每個倉庫下面有多個映象。從這方面來說,倉庫可以被認為是一個具體的專案或目錄。例如對於倉庫地址 docker.io/ubuntu
來說,docker.io
是註冊伺服器地址,ubuntu
是倉庫名。
大部分時候,並不需要嚴格區分這兩者的概念。
環境
- virtual box 6.1
- centos 7.8
- 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
看到如下的介面,則啟動成功:
總結
介紹了公共倉庫和私有倉庫,都可以用來儲存映象。