Docker學習之倉庫

倉庫Repository 是集中存放鏡像的地方。nginx

Docker官方目前維護公共倉庫叫 docker hub,能夠在 https://cloud.docker.com 免費註冊帳號;docker


Docker Hubjson

登陸 ubuntu

執行命令 docker login 交互式輸入用戶名密碼登陸docker hubcentos

退出登陸 docker logoutcurl


拉取鏡像pullide

docker search <NAME> 查找官方倉庫的鏡像工具

docker pull <NAME> 下載鏡像到本地測試

docker search <NAME> --filter=stars=N 指定僅顯示STARS爲N以上的鏡像ui

例如:# docker search centos --filter=stars=100 顯示centos收藏數量大於100的鏡像列表

QQ截圖20180515111442.jpg


鏡像分類:

一、基礎鏡像或根鏡像 相似centos;由docker公司官方提供;通常使用單個名詞做爲名字;

二、docker用戶建立並維護的,username/image


推送鏡像push

docker push 推送本身的鏡像到Docker hub上

例如 # docker push username/ubuntu:17.10


自動建立 Automated Builds

自動建立(Automated Builds)功能對於須要常常升級鏡像內程序來講,十分方便。

有時候,用戶建立了鏡像,安裝了某個軟件,若是軟件發佈新版本則須要手動更新鏡像。



私有倉庫

docker-registry 官方提供的工具,能夠構建私有的鏡像倉庫。


安裝運行docker-registry

容器運行,本地沒有registry鏡像會自動下載。

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

使用官方registry鏡像啓動私有倉庫。默認狀況下,倉庫會被建立再容器 /var/lib/registry 目錄下。能夠經過-v 參數講鏡像文件存放本地的指定路徑。例如 /opt/registry 沒有目錄的話須要建立;

# docker run -d -p 5000:5000 -v /opt/registry/:/var/lib/registry registry

76d011a935ef352efb6e6722c9b403540112bd5a7c6dea417fdbcfd6e19d3d9c


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

docker tag 標記一個鏡像,並推送到倉庫。例如私有倉庫地址127.0.0.1:5000

格式爲 docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]


使用 docker tag 將 ubuntu:latest 這個鏡像標記爲 127.0.0.1:5000/ubuntu:latest。

# docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest

# docker image ls

REPOSITORY              TAG           IMAGE ID            CREATED             SIZE

127.0.0.1:5000/ubuntu   latest   452a96d81c30        2 weeks ago         79.6MB

ubuntu                  latest              452a96d81c30        2 weeks ago         79.6MB

registry                  latest             d1fd7d86a825        4 months ago        33.3MB


docker push 上傳標記的鏡像(只有上傳以後纔會在本地保存)

# docker push 127.0.0.1:5000/ubuntu:latest

The push refers to repository [127.0.0.1:5000/ubuntu]

059ad60bcacf: Pushed

8db5f072feec: Pushed

67885e448177: Pushed

ec75999a0cb1: Pushed

65bdd50ee76a: Pushed

latest: digest: sha256:90f24abe180424046a5d53f6fc6f9fdb8f79b835cb2fd7d1a782e4c30dfb5dcc size: 1357


用curl 查看倉庫中的鏡像

# curl 127.0.0.1:5000/v2/_catalog

{"repositories":["ubuntu"]}

代表鏡像已經被成功上傳。


刪除已有鏡像,再從私有倉庫下載鏡像

# docker image rm 127.0.0.1:5000/ubuntu:latest

# docker pull 127.0.0.1:5000/ubuntu:latest

latest: Pulling from ubuntu

Digest: sha256:90f24abe180424046a5d53f6fc6f9fdb8f79b835cb2fd7d1a782e4c30dfb5dcc

Status: Downloaded newer image for 127.0.0.1:5000/ubuntu:latest

# docker image ls

REPOSITORY              TAG           IMAGE ID            CREATED             SIZE

127.0.0.1:5000/ubuntu   latest   452a96d81c30        2 weeks ago         79.6MB



注意事項

若是你不想使用 127.0.0.1:5000 做爲倉庫地址,好比想讓本網段的其餘主機也能把鏡像推送到私有倉庫。你就得把例如 192.168.20.11:5000 這樣的內網地址做爲私有倉庫地址,這時你會發現沒法成功推送鏡像。

由於 Docker 默認不容許非 HTTPS 方式推送鏡像。

經過 Docker 的配置選項來取消這個限制.


修改以下,若是沒有daemon.json文件須要新建

# cat /etc/docker/daemon.json

{

"registry-mirror": [ "https://registry.docker-cn.com" ],

"insecure-registries": [ "192.168.20.11:5000" ]

}

重啓docker生效  systemctl restart docker.service



本地創建私有倉庫,內網其餘機器經過私有倉庫下載鏡像

私有倉庫ip 192.168.20.11 內網測試機器192.168.20.10


步驟以下:

2臺機器都須要安裝docker,並新建daemon.json文件,內容保持一致;

私有倉庫機器:

# docker tag nginx:latest 192.168.20.11:5000/nginx:latest

# docker push 192.168.20.11:5000/nginx:latest

QQ截圖20180515155015.jpg


內網測試機器下載:

# docker pull 192.168.20.11:5000/nginx:latest

QQ截圖20180515155224.jpg


內網機器,測試push鏡像到私有倉庫機器

# docker tag ubuntu:latest 192.168.20.11:5000/ubuntu:latest

# docker push 192.168.20.11:5000/ubuntu:latest

QQ截圖20180515161553.jpg


私有倉庫機器pull 內網機器push的鏡像

# docker pull 192.168.20.11:5000/ubuntu:latest

# docker image ls

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE

192.168.20.11:5000/ubuntu  latest              452a96d81c30        2 weeks ago         79.6MB


測試OK;

相關文章
相關標籤/搜索