DevOps課程-Jenkins 4
在Nexus上建立docker私有hub來用,並讓Jenkins Container可以docker login(過程有很多要注意)
這邊Nexus又是我另外重建的空機
首先建立對應空間:
建立docker image使用的repo:
點進去後開始設定名稱等:
然後就看到建置完成的Repo:
接著對應這個新建的Repo要建立對應的Role
設定這個Role名稱與必要的權限:
接著跟前面一樣建立一個對應的使用者:
設定名稱與給予剛剛建立的Role(權限):
這邊就建完User了:
但這邊還有一個重點:
上圖中產生的url其port位置是Nexus針對這個Repo位置定義的
但是當真的要執行docker push到這個Repo時
我們需要額外開通其他Port才能成功push到這個Repo
算是儲存docker image先天上的額外限制
所以額外修改:
儲存設定後到機台上觀看被咬住的PORT,執行:
netstat -lnpt
上述這個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
過半小時候我才發覺...
設定好重來:
我決定重建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又要再來一次...只能當練習了
(上面一樣動作這邊不再截圖)
就先到這邊...後面之後繼續!