四、docker 倉庫(讓我們的鏡像有處可存)
- 2019 年 11 月 5 日
- 筆記
前言
前面講完了docker 鏡像和容器,以及通過Dockerfile 訂製屬於我們自己的鏡像,那那現在就是需要將我們自己訂製的鏡像存放到倉庫中供他們使用。這一套流程才算是正式走完了。從獲取鏡像,操作鏡像容器,訂製鏡像,上傳鏡像。會了這些,也算是docker 正式入門了。
上傳到共有倉庫
docker 官網有一個共有的倉庫,大家應該都知道,和github 類似。dockehub可以管理你自己的鏡像。我們需要創建一個帳號用來管理。
我們創建好帳號後,就可以在我們本機的電腦上登錄到官網了。
docker login 用戶名 網址 網址可以不填,默認的就是去登錄官網,登錄官網之後就可以上傳我們自己的鏡像了
docker push [OPTIONS] NAME[:TAG] eg: docker push quellanan/hello:1.0.0 
我這截圖是上傳過一次,再上傳的時候提示已經存在,說明是上傳成功的。
我們可以查看一下:
docker search quellanan 
私有倉庫
docker 官方提供了一個私用倉庫的鏡像,我們可以直接使用。docker-registry.
下載
我們先下載registry 鏡像
docker pull registry 
容器運行
docker run -d -p 5000:5000 --restart=always --name registry registry 
到現在我們私有倉庫已經有了,現在我們如何將自己本地鏡像上傳私有倉庫呢?
上傳
首先我們需要使用docker tag 將鏡像重命名,前綴需要和私用倉庫一致,才能上傳成功。
docker tag java:8 127.0.0.1:5000/java:8 docker push 127.0.0.1:5000/java:8 
通過下面命令查看是否成功
docker push 127.0.0.1:5000/java:8 
上面證明我們已經將鏡像上傳到我們的私有倉庫了。
下載
那現在我們先將本地的鏡像刪除掉,然後從私服上下載鏡像,看是否能夠下載下來。
docker image rm 127.0.0.1:5000/java:8 docker pull 127.0.0.1:5000/java:8 
證明我們創建的私服是可以用的,但是有沒有感覺有點彆扭,不能想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 做準備。

容器啟動之後我們在頁面上訪問
192.168.252.53:8081 可以看到我們的 nexus3的鏡像已經啟動成了,我們需要登錄才能進行配置。網上說的用戶名為admin,密碼為admin123 我試了發現登錄不上去。

然後看提示說密碼存放在這個位置,所以我們進入到容器。查看我們的密碼。
docker ps docker exec -it /bin/bash cat /nexus-data/admin.password 
找到密碼後,我們在介面登錄後,會讓我們修改密碼。

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

選擇docker(hosted)

配置倉庫名和埠

這些都配置好了,現在我們怎麼使用這個私有倉庫呢,我們在/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 
一樣的我們打標籤。
docker tag java:8 192.168.252.53:8082/java:8 上傳
docker push 192.168.252.53:8082/java:8 
可以看到我們已經將鏡像上傳的nexus 上了,我們現在在介面上看下。整個的介面就是這樣的。

說明我們用 nexus3 搭建的私有倉庫是沒有問題的。
Nexus3 代理倉庫
上面我們只是配置了docker(host),這個相當於我們的私有倉庫,但是我們現在使用docker login 我們自己的倉庫,如果我們需要的鏡像我們倉庫沒有,就會很麻煩,需要重新登錄到共有倉庫上下載下來,再上傳到我們的私有倉庫,那有沒有辦法可以一步到位呢?
下面我們就來操作一波。
docker(proxy)
上面我們已經配置好了私有倉庫的不用動,下面我們來配置代理倉庫,

選擇docker(proxy),name 自定義。主要的Proxy 這裡需要注意一下。
https://registry-1.docker.io 
docker(group)
埠設置8083

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

這樣上面就配置好了。
番外
這篇算是馬馬虎虎的寫完了吧,但總感覺不經如意,又不知道怎麼修改,就先這樣發出來吧,後續調整。
好了,就說這麼多啦
後續加油♡
歡迎大家關注個人公眾號 "程式設計師愛酸奶"
分享各種學習資料,包含java,linux,大數據等。資料包含影片文檔以及源碼,同時分享本人及投遞的優質技術博文。
如果大家喜歡記得關注和分享喲❤


