本文章是在網易云課堂的課程學習中編寫,部分圖片從網易云課堂ppt引用
【公共倉庫Docker Hub】
首先我們來了解一下公共倉庫Docker Hub。Docker官方維護了一個公共倉庫Docker Hub,大部分鏡像都可以在Docker Hub中直接下載。
1、注冊登錄
在 https://hub.docker.com/ 免費注冊一個 Docker 賬號
注冊好賬號后,在某個宿主機上執行 docker login
命令,輸入用戶名及密碼,可以在命令行界面登錄 Docker Hub
通過 docker logout
可以退出登錄
2、拉取鏡像
可以通過docker search
命令來查找官方倉庫中的鏡像,并利用 docker pull
命令來將它下載到本地。
比如:
docker search tomcat
docker pull tomcat
3、推送鏡像
我們也可以在登錄后通過 docker push
命令來將自己的鏡像推送到 Docker Hub
以下命令中的 dockerId為鏡像id,username 替換為自己的 Docker 賬號用戶名,image:version為鏡像名及版本號
docker tag dockerId username/image:version
docker image ls
docker push username/image:version
docker search username
來操作試一下:
4、自動創建
對于需要經常升級的鏡像內程序來說,自動創建功能十分方便。
軟件發布新版本,一般需要手動更新鏡像,而自動創建功能,允許用戶通過 Docker Hub 指定跟蹤一個目標網站(目前支持 GitHub 或 BitBucket)上的項目。一旦項目發生新的提交或者創建新的標簽(tag),Docker Hub 會自動構建鏡像并推送到 Docker Hub 中。
要配置自動創建,包括如下的步驟:
- 創建并登錄 Docker Hub,以及目標網站
- 在目標網站中連接帳戶到 Docker Hub
- 在 Docker Hub 中 配置一個自動創建
- 選取一個目標網站中的項目(需要含 Dockerfile)和分支
- 指定 Dockerfile 的位置,并提交創建
- 之后,可以在 Docker Hub 的 自動創建頁面 中跟蹤每次創建的狀態
【Docker私有倉庫】
有時候使用 Docker Hub 公共倉庫可能不方便,那么我們可以創建一個本地倉庫供私人使用。
1、安裝運行 docker-registry
docker-registry 是官方提供的工具,可以用于構建私有的鏡像倉庫。本次構建是基于 docker-registry v2.x 版本。
docker run --name registry -d -p 5000:5000 --restart=always -v /opt/data/registry:/var/lib/registry registry
使用官方 registry 鏡像來啟動私有倉庫。默認情況下,倉庫會被創建在容器的 /var/lib/registry 目錄下,我們可以通過 -v 參數來將鏡像文件存放在本地的指定路徑。例如上面的例子將上傳的鏡像放到本地的 /opt/data/registry 目錄
2、在私有倉庫上傳、搜索、下載鏡像
創建好私有倉庫之后,就可以使用 docker tag
來標記一個鏡像,然后推送它到倉庫。格式為:
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]。
例如私有倉庫地址為 127.0.0.1:5000,先在本機查看已有的鏡像:
docker image ls
2.1 使用 docker tag 將 ubuntu:16.04 這個鏡像標記為 127.0.0.1:5000/ubuntu:16.04
docker tag ubuntu:16.04 127.0.0.1:5000/ubuntu:16.04
docker image ls
2.2 使用 docker push
上傳標記的鏡像
docker push 127.0.0.1:5000/ubuntu:16.04
2.3 用 curl 查看倉庫中的鏡像
curl 127.0.0.1:5000/v2/_catalog
這里可以看到 {"repositories":["ubuntu"]},表明鏡像已經被成功上傳了。
2.4 下面我們來試試從私有倉庫下載這個鏡像,先刪除已有鏡像,再拉取。
docker image rm 127.0.0.1:5000/ubuntu:16.04
docker pull 127.0.0.1:5000/ubuntu:16.04
docker images
3、注意事項
如果不想使用 127.0.0.1:5000 作為倉庫地址,比如想讓本網段的其他主機也能把鏡像推送到私有倉庫,就得把例如 192.168.199.100:5000 這樣的內網地址作為私有倉庫地址,這時會發現無法成功推送鏡像。
這是因為 Docker 默認不允許非 HTTPS 方式推送鏡像,我們可以通過 Docker 的配置選項來取消這個限制。
3.1 Ubuntu 14.04, Debian 7 Wheezy
對于使用 upstart 的系統,編輯 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中增加如下內容:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com --insecure-registries=192.168.199.100:5000"
重新啟動服務
sudo service docker restart
3.2 Ubuntu 16.04+, Debian 8+, centos 7
對于使用 systemd 的系統,在 /etc/docker/daemon.json 中寫入如下內容(如果文件不存在需新建該文件)
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]
insecure-registries參數是我們新增的配置
注意:該文件必須符合 json 規范,否則 Docker 將不能啟動。
3.3 Windows、Mac
對于 Docker for Windows 、Docker for Mac ,在設置中編輯 daemon.json 增加和上邊一樣的字符串
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.199.100:5000"
]