四、docker 倉庫(讓我們的鏡像有處可存)

  • 2019 年 11 月 5 日
  • 筆記

前言

前面講完了docker 鏡像和容器,以及通過Dockerfile 定製屬於我們自己的鏡像,那那現在就是需要將我們自己定製的鏡像存放到倉庫中供他們使用。這一套流程才算是正式走完了。從獲取鏡像,操作鏡像容器,定製鏡像,上傳鏡像。會了這些,也算是docker 正式入門了。

上傳到共有倉庫

docker 官網有一個共有的倉庫,大家應該都知道,和github 類似。dockehub可以管理你自己的鏡像。我們需要創建一個賬號用來管理。

官網:https://hub.docker.com/

我們創建好賬號後,就可以在我們本機的電腦上登錄到官網了。

docker login 用戶名 網址

網址可以不填,默認的就是去登錄官網,登錄官網之後就可以上傳我們自己的鏡像了

 docker push [OPTIONS] NAME[:TAG]     eg:   docker push quellanan/hello:1.0.0

file

我這截圖是上傳過一次,再上傳的時候提示已經存在,說明是上傳成功的。
我們可以查看一下:

docker search quellanan

file

私有倉庫

docker 官方提供了一個私用倉庫的鏡像,我們可以直接使用。docker-registry.

下載

我們先下載registry 鏡像

docker pull registry

file

容器運行

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

file

到現在我們私有倉庫已經有了,現在我們如何將自己本地鏡像上傳私有倉庫呢?

上傳

首先我們需要使用docker tag 將鏡像重命名,前綴需要和私用倉庫一致,才能上傳成功。

docker tag java:8 127.0.0.1:5000/java:8  docker push 127.0.0.1:5000/java:8 

file

通過下面命令查看是否成功

docker push 127.0.0.1:5000/java:8

file

上面證明我們已經將鏡像上傳到我們的私有倉庫了。

下載

那現在我們先將本地的鏡像刪除掉,然後從私服上下載鏡像,看是否能夠下載下來。

 docker image rm 127.0.0.1:5000/java:8     docker pull 127.0.0.1:5000/java:8

file

證明我們創建的私服是可以用的,但是有沒有感覺有點彆扭,不能想dockerhub 那樣直觀的查看我們私有倉庫的鏡像,沒有可視化界面。所以接下來我們用另一個鏡像來搭建我們私有倉庫。

Nexus3

Nexus 是管理maven 的jar 包工具,Nexus3 支持對鏡像的管理。

下載

我們先下載nexus3的鏡像

docker pull sonatype/nexus3

啟動

下載成功後,我們來啟動對應的容器。

docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 --mount src=nexus-data,target=/nexus-data sonatype/nexus3

這裡說明一下為什麼要啟動三個端口。8082是私有倉庫,不啟動的話,好像我們本地根本連不上去,一直報超時。8083為後面代理dockerhub 做準備。
file

容器啟動之後我們在頁面上訪問

192.168.252.53:8081

可以看到我們的 nexus3的鏡像已經啟動成了,我們需要登錄才能進行配置。網上說的用戶名為admin,密碼為admin123 我試了發現登錄不上去。
file

然後看提示說密碼存放在這個位置,所以我們進入到容器。查看我們的密碼。

docker ps  docker exec  -it /bin/bash  cat /nexus-data/admin.password

file

找到密碼後,我們在界面登錄後,會讓我們修改密碼。
file

配置

登錄成功後,我們開始配置我們docker的私有倉庫。選擇Create Repostory
file

選擇docker(hosted)
file

配置倉庫名和端口
file

這些都配置好了,現在我們怎麼使用這個私有倉庫呢,我們在/etc/docker/daemon.json 文件中加上私有倉庫的地址。

{          "registry-mirrors": [                  "https://registry.docker-cn.com",                  "https://dockerhub.azk8s.cn"          ],          "insecure-registries":["192.168.252.53:8082","192.168.252.53:8083"]  }

registry-mirrors 是配置國內鏡像,不需要的可以不配置。insecure-registries 就是設置我們自己的私有倉庫地址。

重啟

systemctl daemon-reload  systemctl restart docker

測試

現在我們來登錄上我們私有倉庫(密碼我改成了admin123)

docker login -u admin -p admin123 192.168.252.53:8282

file

一樣的我們打標籤。

docker tag java:8 192.168.252.53:8082/java:8

上傳

docker push 192.168.252.53:8082/java:8

file

可以看到我們已經將鏡像上傳的nexus 上了,我們現在在界面上看下。整個的界面就是這樣的。
file

說明我們用 nexus3 搭建的私有倉庫是沒有問題的。

Nexus3 代理倉庫

上面我們只是配置了docker(host),這個相當於我們的私有倉庫,但是我們現在使用docker login 我們自己的倉庫,如果我們需要的鏡像我們倉庫沒有,就會很麻煩,需要重新登錄到共有倉庫上下載下來,再上傳到我們的私有倉庫,那有沒有辦法可以一步到位呢?

下面我們就來操作一波。

docker(proxy)

上面我們已經配置好了私有倉庫的不用動,下面我們來配置代理倉庫,
file

選擇docker(proxy),name 自定義。主要的Proxy 這裡需要注意一下。

https://registry-1.docker.io

file

docker(group)

端口設置8083
file

將代理的和個人倉庫加到group中
file

這樣上面就配置好了。

番外

這篇算是馬馬虎虎的寫完了吧,但總感覺不經如意,又不知道怎麼修改,就先這樣發出來吧,後續調整。

好了,就說這麼多啦

後續加油♡

歡迎大家關注個人公眾號 "程序員愛酸奶"

分享各種學習資料,包含java,linux,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。

如果大家喜歡記得關注和分享喲❤

file