從零搭建docker+jenkins 自動化部署環境

從零搭建docker+jenkins+node.js自動化部署環境

  • 本次案例基於CentOS 7系統
  • 適合有必定docker使用經驗的人閱讀
  • 適合有必定linux命令使用經驗的人閱讀

一、docker部分

1.一、docker簡介

Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口java

 

1.二、docker架構

簡單的說,docker就是一個輕量級的linux系統。Docker 容器經過 Docker 鏡像來建立。容器與鏡像的關係相似於面向對象編程中的對象與類。docker架構如圖所示:node

1.三、docker虛擬機管理命令

1.四、安裝docker

  1. 更新軟件庫
yum update -y
  1. 安裝docker
yum install docker -y
 

1.五、啓動docker服務

  1. 啓動docker服務
service docker start
  1. 其它相關命令
service docker restart  // 重啓docker服務
service docker stop     // 中止docker服務

 

二、node部分

能夠經過koa框架隨便寫一個hello-world項目,而後在項目的根目錄下新建一個Dockerfile文件linux

Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,所以每一條指令的內容,就是描述該層應當如何構建。git

筆者本身的Dockerfile文件配置信息以下,熟悉docker的人能夠自行配置github

# Dockerfile # 使用node作爲鏡像 FROM node # 在容器中建立該目錄 RUN mkdir -p /home/project # 設置容器的工做目錄爲該目錄 WORKDIR /home/project # 向外提供3000端口 EXPOSE 3000
# 容器建立完成後執行的命令 CMD npm install --registry=https://registry.npm.taobao.org && node ./start.js
 

將該項目發佈到github上,爲以後的jenkins部署作前提準備web

三、jenkins部分

  • 查詢jenkins鏡像
docker search jenkins

 

 

  • 拉取最新的jenkins鏡像
docker pull jenkins:latest
 
  • 啓動jenkins
sudo docker run -d -u 0 --privileged  --name jenkins_node1 -p 49003:8080 -v /root/jenkins_node1:/var/jenkins_home jenkins:latest
 
  • 命令解析:
  1. -u 0

    指的是傳入root帳號ID,覆蓋容器中內置的帳號docker

    2. -v /root/jenkins_node1:/var/jenkins_homenpm

    指的是 將docker容器內的目錄/var/jenkins_home映射到宿主機 /root/jenkins_node1目錄上編程

  1. --name jenkins_node1

    將容器命名爲 jenkins_node1瀏覽器

  1. -p 49003:8080

    端口映射,將容器的8080端口映射到宿主機的49003端口

  1. --privileged

    賦予最高權限

  • 整條命令的意思

    運行一個鏡像爲jenkins:latest的容器,命名爲jenkins_node1,使用root帳號覆蓋容器中的帳號,賦予最高權限,將容器的 /var/jenkins_home映射到宿主機的 /root/jenkins_node1目錄下,映射容器中8080端口到宿主機49003端口

  • 查看jenkins

執行完成後,等待幾十秒,等待jenkins容器啓動初始化。

能夠查看宿主機 /root/jenkins_node1下是否多了不少文件

到瀏覽器中輸入 localhost:49003 查看jenkins是否啓動成功

看到以下界面說明啓動成功:

 


  • 獲取密碼
cat /root/jenkins_node1/secrets/initialAdminPassword
 

複製輸出的密碼,粘貼到頁面中,點擊continue會進入到下面這個頁面

 


點擊安裝

 


等待安裝完成,進入到建立管理員帳號界面

 


輸入帳號密碼信息後點擊保存(信息要填完),來到首頁

 


配置jenkins,進入系統管理頁面,管理插件

 


 


選擇 ssh插件,

 


直接安裝,等待安裝完成,回到首頁,

來到 系統管理 -> 系統配置

 


拖到最下Publish over SSH這

 


選擇高級,輸入服務器IP,用戶名,密碼,而後點擊 Test Configuration

顯示 Success 則說明配置沒問題。而後保存,回到首頁

新建一個項目

 


輸入項目名稱

 


選擇源碼管理,使用git管理,輸入github倉庫地址,添加github用戶

 

 

 


完成來到選擇構建環境,

 


執行的命令

sudo docker stop nodeapp || true \ && sudo docker rm nodeapp || true \
&& sudo dcoker rmi node || true \ 
&& cd /root/jenkins_node1/workspace/node \ && sudo docker build --rm --no-cache=true -t node - < Dockerfile \ && sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_node1/workspace/node:/home/project node
 

保存後,點擊當即構建

構建成功後,能夠在宿主機的目錄/root/jenkins_node1/workspace/node下看到你的項目文件了

在瀏覽器輸入 docker服務器地址 localhost:3000 便可訪問到頁面信息

啓動失敗的,能夠查看日誌來肯定一下失敗的緣由

docker logs nodeapp
 

三、jenkins + github自動部署

    若是想本地代碼提交push到github後,jenkins自動拉取最新代碼從新部署,請繼續看!

    服務器要外網能訪問,本地環境想測試的能夠嘗試內網穿透 natapp 或者 ngrok

  1. 在首頁點擊用戶

    首頁 -> 用戶 -> root

 

  1. 點擊設置 -> show API Token

 


  1. 複製API Token 裏面的值

  2. 返回到首頁 -> node -> 配置 -> 構建觸發器 粘貼到身份驗證令牌 中

 


  1. 登錄到你的github項目頁面 打開 Setting -> Webhooks -> Add webhooks
  1. 添加 webhooks
  1. 修改jenkins的安全策略

jenkins首頁,選擇 系統管理-->Configure Global Security(系統設置下面那個) 進行以下設置

至此,已完成 git push 後,jenkins 自動構建自動部署。

四、docker的經常使用命令

對docker比較感興趣的人能夠了解一下,繼續學習

鏡像相關

  • 查詢鏡像
docker search [name]

 

  • 拉取鏡像
docker pull [name]

 

  • 導入鏡像
docker load < /home/node.tar.gz

 

  • 導出鏡像
docker save > /home/node.tar.gz
  • 查詢全部鏡像
docker images

 

  • 刪除鏡像
docker rmi [name]

 

  • 修改鏡像名
docker tag docker.io/node node
容器相關
  • 啓動
# 運行並進入交互模式 docker run -it --name myjava java bash # 在後臺運行 docker run -d --name myjava java

 

  • 端口映射
docker run -it --name myjava -p 9000:8085 -p 9000:8086 java bash

 

  • 目錄映射
docker run -it --name myjava -v /home/project:/soft --privileged docker.io/node bash

 

  • 進入後臺運行的容器
docker exec -it name bash

 

  • 自動重啓
docker run --restart=always -it --name nodeapp -p 9000:8085 -p 9000:8086 node bash

 

  • 暫停容器
docker pause nodeapp

 

  • 中止暫停容器
docker unpause nodeapp

 

  • 中止容器
docker stop nodeapp

 

  • 啓動容器
docker start -i nodeapp

 

  • 查看容器
docker ps -a
 

docker網段相關

  • 建立網段
docker network create net1

 

  • 查看網段信息
docker network inspect net1

 

  • 刪除網段信息
docker network rm net1
 

五、總結

筆者本身最近學習node,故想嘗試一下經過Docker+jenkins來實現這個自動化部署的流程,本身踩了一天坑,總算是配置成功了。以前是使用pm2來管理node項目,以及使用pm2來自動化部署node項目的,有興趣的能夠去看一下。使用pm2自動化部署node項目.算是給本身作個總結筆記。寫的很差的地方,望指出。

相關文章
相關標籤/搜索