docker下安裝部署jenkins(一)

weixin_34357887發表於2018-09-24

前言

本文帶你在docker中安裝jenkins服務,為入門級別的介紹,建議閱讀時間10-15min.

檢查是否安裝docker

docker --version 
複製程式碼

拉取映象

// 拉取映象
docker pull jenkins 
// 拉取成功提示
Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668
Status: Downloaded newer image for jenkins:latest
//通過命令檢視本地具有的所有映象
docker images
複製程式碼

簡單配置

你需要配置jenkins的相關目錄,並且給其對應的許可權,這兩者都是必備的。

mkdir -p /root/jenkins_home
chown -R 1000  /root/jenkins_home
複製程式碼

解說:mkdir 是建立資料夾的命令,-p代表強制建立目錄,就是說如果沒有中間目錄的時候也會順便建立其父目錄。 而chown用來更改某個目錄或檔案的使用者名稱和使用者組,而chmod是修改資料夾的修改許可權,其是有差別的,而我們一般修改的是檔案所有者的許可權,1000指的是使用者的id,正常情況下是使用者名稱。或者使用者組。

這裡多說一點,建議大家多去看比較正規或者完善一點的教程,不要隨便百度一般網友的回覆或者部落格,儘量關注大佬或者比較官方的,有人維護的一些技術文件。這裡提供的是菜鳥教程的一些簡單說明,作為入門掌握還是足夠的。

啟動jenkins服務

docker run  -d -p 8080:8080  --name myjenkins    -v /root/jenkins-home:/root/jenkins_home  jenkins
複製程式碼

命令解讀:docker run 是執行所有docker映象的標準寫法,其中-d代表後臺執行,-p指的是對映容器埠與伺服器埠,--name指 的是對映象所自定義的名稱,當不方便使用容器id的時候,可以使用名字對其進行檢視或者刪除,-v指的是自定義配置jenkins目錄,最後的引數jenkins指的是使用的是本地的jenkins映象。

檢視日誌記錄其祕鑰

這一步是在正常啟動後,順便檢視下其日誌,因為其後續是需要的。所以不妨直接進入日誌檢視下,當然也可以通過其他方式進行檢視。

注意事項

檢視全部狀態的docker容器

可以檢視到所有的容器,包括退出的,啟動的,線上的等

docker ps -a
// 其實你可以rm ,stop後執行多個容器的,空格隔開就可以
docker rm myjenkins1 myjenkins2 heuristic_lamarr quirky_kirch
複製程式碼

用ps檢視jenkins服務的具體情況

ps -ef |grep jenkins
www       4470  4453  0 9月23 ?       00:00:02 /bin/tini -- /usr/local/bin/jenkins.sh
www       4501  4470  0 9月23 ?       00:01:38 java -jar /usr/share/jenkins/jenkins.war
root      6213  5885  0 21:14 pts/0    00:00:00 grep --color=auto jenkins
複製程式碼

jenkins部分是否需要java環境,tomcat服務做埠監聽

jenkins映象本身同時具有這兩者,所以不用操心了。如果你按照上面的配置完成啟動,正常情況下就可以通過ip+埠訪問到你的jenkins介面了。

啟動失敗的情況

1 容器名稱重複,解決辦法:將容器的名字也就是--name後的引數換掉即可

docker: Error response from daemon: Conflict. The container name "/myjenkins" is already in use by container
複製程式碼

2 埠衝突,其他服務已經佔用,解決辦法,檢視所有的埠占用情況或者直接檢視某埠下是否有服務。

//報錯
 Bind for 0.0.0.0:8080 failed: port is already allocated.
//檢視埠占用情況
netstat -tunlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14379/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15847/sshd          
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      10245/mysqld        
tcp6       0      0 :::8080                 :::*                    LISTEN      4447/docker-proxy   
tcp6       0      0 :::8099                 :::*                    LISTEN      1508/docker-proxy   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           777/dhclient        
udp        0      0 172.17.0.1:123          0.0.0.0:*                           24745/ntpd          
udp        0      0 172.16.199.194:123      0.0.0.0:*                           24745/ntpd    
// netstat -tunlp | grep 8080
//如果埠占用是不合理的情況,可以關掉其埠的程式,kill -9 程式id

複製程式碼

3 檔案沒有許可權,設定許可權即可

如果在伺服器上檢視是否啟動成功

你可以通過docker ps 檢視所有的啟動好的容器,也可以通過docker ps | grep containerName 來具體檢視你的服務啟動狀態,如果為up就是正常的。

docker ps | grep myjenkins
1df370bbb026        jenkins             "/bin/tini -- /usr/l…"   24 hours ago        Up 24 hours         0.0.0.0:8080->8080/tcp, 50000/tcp   myjenkins
複製程式碼

你也可以通過curl ip+埠進行訪問,如果啟動正常,其和瀏覽器一樣會返回其頁面程式碼的部分。

curl localhost:8080
<html><head><meta http-equiv='refresh' content='1;url=/login?from=%2F'/><script>window.location.replace('/login?from=%2F');</script></head><body style='background-color:white; color:white;'>
Authentication required
複製程式碼

外網不可訪問

我遇到的就是這種情況,被坑了比較久,也是自己比較小白的原因。 1 檢視防火牆的狀態,之前的linux系統可能是用iptables的,最新的都是用firewalld.service來進行相應的管理的。 相關參考:firewalld.serivce

2 檢視你的雲伺服器是否有單獨的安全組設定,我就是被這部分坑的。 主要是因為阿里雲伺服器針對其他埠預設是不對外開放的,你需要單獨設定增加規則才可以。

總結

本文就到這裡,還沒有涉及到基本的部署配置,等待我下一篇更新吧。

相關文章