Docker零基礎入門指南(五):Docker倉庫使用

原文地址:Docker零基礎入門指南(五)

倉庫( Repository )是集中存放鏡像的地方。一個容易混淆的概念是註冊服務器( Registry )。實際上註冊服務器是管理倉庫的具體服務器,每一個服務器上能夠有多個倉庫,而每一個倉庫下面有多個鏡像。從這方面來講,倉庫能夠被認爲是一個具體的項目或目錄。例如對於倉庫地址 dl.dockerpool.com/ubuntu 來講,dl.dockerpool.com 是註冊服務器地址, ubuntu 是倉庫名。nginx

Docker Registry

Docker Registry用來提供集中的存儲、分發鏡像的服務。
一個 Docker Registry 中能夠包含多個倉庫(Repository);每一個倉庫能夠包含多個標籤(Tag);每一個標籤對應一個鏡像。
一般,一個倉庫會包含同一個軟件不一樣版本的鏡像,而標籤就經常使用於對應該軟件的各個版本。咱們能夠經過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪一個版本的鏡像。若是不給出標籤,將以 latest 做爲默認標籤。docker

以 Ubuntu 鏡像 爲例,ubuntu 是倉庫的名字,其內包含有不一樣的版本標籤,如,14.04, 16.04。咱們能夠經過 ubuntu:14.04,或者 ubuntu:16.04 來具體指定所需哪一個版本的鏡像。若是忽略了標籤,好比 ubuntu,那將視爲 ubuntu:latest。ubuntu

倉庫名常常以 兩段式路徑 形式出現,好比 jwilder/nginx-proxy,前者每每意味着 Docker Registry 多用戶環境下的用戶名,後者則每每是對應的軟件名。但這並不是絕對,取決於所使用的具體 Docker Registry 的軟件或服務。服務器

Docker Hub

最常使用的 Registry 公開服務是官方的 Docker Hub,這也是默認的 Registry,並擁有大量的高質量的官方鏡像。curl

註冊工具

能夠在 https://cloud.docker.com 免費註冊一個 Docker 帳號。網站

登陸ui

能夠經過執行 docker login 命令交互式的輸入用戶名及密碼來完成在命令行界面登陸Docker Hub。能夠經過 docker logout 退出登陸。url

拉取鏡像
能夠經過 docker search 命令來查找官方倉庫中的鏡像,並利用 docker pull 命令來將它下載到本地。命令行

推送鏡像
用戶也能夠在登陸後經過 docker push 命令來將本身的鏡像推送到 Docker Hub。

自動建立
自動建立(Automated Builds)功能對於須要常常升級鏡像內程序來講,十分方便。有時候,用戶建立了鏡像,安裝了某個軟件,若是軟件發佈新版本則須要手動更新鏡像。而自動建立容許用戶經過 Docker Hub 指定跟蹤一個目標網站(目前支持 GitHub 或 BitBucket)上的項目,一旦項目發生新的提交或者建立新的標籤(tag),Docker Hub 會自動構建鏡像並推送到 Docker Hub 中。要配置自動建立,包括以下的步驟:

  1. 建立並登陸 Docker Hub,以及目標網站;
  2. 在目標網站中鏈接賬戶到 Docker Hub
  3. 在 Docker Hub 中 配置一個自動建立
  4. 選取一個目標網站中的項目(須要含 Dockerfile )和分支
  5. 指定 Dockerfile 的位置,並提交建立

以後,能夠在 Docker Hub 的 自動建立頁面 中跟蹤每次建立的狀態。

私有 Docker Registry

除了使用公開服務外,用戶還能夠在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 鏡像,能夠直接使用作爲私有 Registry 服務。
docker-registry 是官方提供的工具,能夠用於構建私有的鏡像倉庫。如下內容基於dockerregistry v2.x 版本。

安裝運行 docker-registry
能夠經過獲取官方 registry 鏡像來運行

$ docker run -d -p 5000:5000 --restart=always --name registry registry

這將使用官方的 registry 鏡像來啓動私有倉庫。默認狀況下,倉庫會被建立在容器的/var/lib/registry 目錄下。能夠經過 -v 參數來將鏡像文件存放在本地的指定路徑。

$ docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry

在私有倉庫上傳、搜索、下載鏡像

建立好私有倉庫以後,就能夠使用 docker tag 來標記一個鏡像,而後推送它到倉庫。例如私有倉庫地址爲 127.0.0.1:5000 。

先在本機查看已有的鏡像。

$ docker image ls
REPOSITORY TAG IMAGE ID CREATED
VIRTUAL SIZE
ubuntu latest ba5877dc9bec 6 weeks ago
192.7 MB

使用 docker tag 將 ubuntu:latest 這個鏡像標記爲 127.0.0.1:5000/ubuntu:latest 。
格式爲 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

$ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED
VIRTUAL SIZE
ubuntu latest ba5877dc9bec 6 weeks ago
192.7 MB
127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago
192.7 MB

使用 docker push 上傳標記的鏡像。

$ docker push 127.0.0.1:5000/ubuntu:latest
The push refers to repository [127.0.0.1:5000/ubuntu]
373a30c24545: Pushed
a9148f5200b0: Pushed
cdd3de0940ab: Pushed
fc56279bbb33: Pushed
b38367233d37: Pushed
2aebd096e0e2: Pushed
latest: digest: sha256:fe4277621f10b5026266932ddf760f5a756d2facd505a94d2da12f4f52f71f5
a size: 1568

用 curl 查看倉庫中的鏡像。

$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["ubuntu"]}

這裏能夠看到 {"repositories":["ubuntu"]} ,代表鏡像已經被成功上傳了。

先刪除已有鏡像,再嘗試從私有倉庫中下載這個鏡像。

$ docker image rm 127.0.0.1:5000/ubuntu:latest
$ docker pull 127.0.0.1:5000/ubuntu:latest
Pulling repository 127.0.0.1:5000/ubuntu:latest
ba5877dc9bec: Download complete
511136ea3c5a: Download complete
9bad880da3d2: Download complete
25f11f5fb0cb: Download complete
ebc34468f71d: Download complete
2318d26665ef: Download complete

(本文出自itcsdaixie.com,轉載請註明出處)

相關文章
相關標籤/搜索