Docker學習之倉庫
Docker官方目前維護公共倉庫叫 docker hub,可以在 https://cloud.docker.com 免費註冊賬號;
Docker Hub
登錄
執行命令 docker login 交互式輸入用戶名密碼登錄docker hub
退出登錄 docker logout
拉取鏡像pull
docker search <NAME> 查找官方倉庫的鏡像
docker pull <NAME> 下載鏡像到本地
docker search <NAME> --filter=stars=N 指定僅顯示STARS為N以上的鏡像
例如:# docker search centos --filter=stars=100 顯示centos收藏數量大於100的鏡像列表
鏡像分類:
1、基礎鏡像或根鏡像 類似centos;由docker公司官方提供;一般使用單個名詞作為名字;
2、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
內網測試機器下載:
# docker pull 192.168.20.11:5000/nginx:latest
內網機器,測試push鏡像到私有倉庫機器
# docker tag ubuntu:latest 192.168.20.11:5000/ubuntu:latest
# docker push 192.168.20.11:5000/ubuntu:latest
私有倉庫機器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;
Docker學習之倉庫