DevOps課程-Jenkins 4

在Nexus上建立docker私有hub來用,並讓Jenkins Container可以docker login(過程有很多要注意)

ZONGRU Li
7 min readJan 10, 2022

這邊Nexus又是我另外重建的空機

首先建立對應空間:

建立docker image使用的repo:

針對存放docker image的Repo類型選擇這個

點進去後開始設定名稱等:

其實這邊還有一個要設定,等等後面解說

然後就看到建置完成的Repo:

接著對應這個新建的Repo要建立對應的Role

設定這個Role名稱與必要的權限:

接著跟前面一樣建立一個對應的使用者:

設定名稱與給予剛剛建立的Role(權限):

這邊就建完User了:

但這邊還有一個重點:

上圖中產生的url其port位置是Nexus針對這個Repo位置定義的

但是當真的要執行docker push到這個Repo時

我們需要額外開通其他Port才能成功push到這個Repo

算是儲存docker image先天上的額外限制

所以額外修改:

儲存設定後到機台上觀看被咬住的PORT,執行:

netstat -lnpt
多咬了8083了!!

上述這個PORT就是用來提供docker push上到剛剛建立的Repo用的!

接著就是將Droplet這個PORT的防火牆規則打開!:

針對Client端要連接到上述Nexus上的8083 PORT,放image到這個Repo

需要的會是先執行docker login這個動作來跟這個Repo取得token

而當完成docker login,Token會產生在Client端的:

~/.docker/config.json這個檔案內

在那之前我們得先替這個docker image Repo先建立token機制

讓Client端在做docker login時可以拿到token:

此時理當就可以在任意client端可以對上述建立好的docker image Repo做到

pull,push,…etc等操作

但是目前還有個問題是:

當Client端要連接到上述docker Repo(in-secure registry)時

勢必會因為非安全(只有http,不是https)連接有出問題,所以找解答:

如果用docker desktop,要去Docker Engine內設置(參考講師畫面如下):

我這邊的話是用Jenkins Container

登入到jenkins Server編輯需要的檔案:

儲存!

接著進到Jenkins Server上的Jenkins Container內

(因為Jenkins容器與實體docker有連動,所以容器內應該可以登入)

登入方法則是執行:

docker login {Repo的IP}:{Repo額外開的PORT}
參考下圖:

所以就是:

docker login 159.223.76.133:8083

然後我才意識到需要重開docker

才能讓docker咬到/etc/docker/daemon.json設定內容:

執行:

systemctl restart docker

依樣重建jenkins container:

docker run -p 8080:8080 -p 50000:50000 -d \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
jenkins/jenkins:lts

一樣登入root修改docker.sock:

docker exec -u 0 -it {Jenkins容器ID} bash
chmod 666 /var/run/docker.sock

離開root,改用一般身分進到Jenkins Container,執行docker login指令:

docker exec -it {Jenkins容器ID} bash
看起來還是一樣...

過半小時候我才發覺...

設定好重來:

這次吐Error有變快!!,所以應該只是docker那個daemon沒吃到

我決定重建Jenkins Container:

重建為(多下面綁daemon.json那行!!!):

docker run -p 8080:8080 -p 50000:50000 -d \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v /etc/docker/daemon.json:/etc/docker/daemon.json \
jenkins/jenkins:lts

同理以下指令還要重做(就不在截圖):

docker exec -u 0 -it {Jenkins容器ID} bash
chmod 666 /var/run/docker.sock

再次一般身分登進這個Jenkins Container內執行:

docker login 159.223.76.133:8083

看起來還是進不去:

後來又發覺這邊設錯:

上面重啟docker/Jenkins Container又要再來一次...只能當練習了

(上面一樣動作這邊不再截圖)

終於....夭壽!

就先到這邊...後面之後繼續!

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet