09.28 全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

上兩篇

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

1、docker部分

1.1、docker簡介

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

1.2、docker架構

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

1.3、docker虛擬機管理命令

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

1.4、安裝docker

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

1.5、啟動docker服務

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

2、node部分

可以通過koa框架隨便寫一個hello-world項目,然後在項目的根目錄下新建一個Dockerfile文件。Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

筆者自己的Dockerfile文件配置信息如下,熟悉docker的人可以自行配置

# 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部署做前提準備

3、jenkins部分

  • 查詢jenkins鏡像
 docker search jenkins 
全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

  • 拉取最新的jenkins鏡像
 docker pull jenkins:latest
  • 啟動jenkins
\tsudo 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,覆蓋容器中內置的賬號 2. -v /root/jenkins_node1:/var/jenkins_home

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

2、--name jenkins_node1

將容器命名為 jenkins_node1

3、-p 49003:8080

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

4、--privileged

賦予最高權限

  • 整條命令的意思

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

  • 查看jenkins

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

可以查看宿主機 /root/jenkins_node1下是否多了很多文件

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

看到如下界面說明啟動成功:

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

點擊安裝

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

選擇 ssh插件

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

直接安裝,等待安裝完成,回到首頁,來到 系統管理 -> 系統配置

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

拖到最下Publish over SSH這

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

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

新建一個項目

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

輸入項目名稱

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

完成來到選擇構建環境

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

執行的命令

sudo docker stop nodeapp || true \\
&& sudo docker rm nodeapp || 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

4、jenkins + github自動部署

如果想本地代碼提交push到github後,jenkins自動拉取最新代碼重新部署,請繼續看

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

  1. 在首頁點擊用戶

首頁 -> 用戶 -> root

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

點擊設置 -> show API Token

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

複製API Token 裡面的值

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

登陸到你的github項目頁面 打開 Setting -> Webhooks -> Add webhooks

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

添加 webhooks

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

修改jenkins的安全策略

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

全棧之路:從零搭建docker+jenkins+node.js自動化部署環境

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

5、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 myjava -p 9000:8085 -p 9000:8086 java bash
  • 暫停容器
docker pause node
  • 停止暫停容器
docker unpause node
  • 停止容器
docker stop node 
  • 啟動容器
docker start -i node
  • 查看容器
docker ps -a

docker網段相關

  • 創建網段
docker network create net1
  • 查看網段信息
docker network inspect net1
  • 刪除網段信息
docker network rm net1

鏈接文章:

https://juejin.im/post/5b8ddb70e51d45389153f288


分享到:


相關文章: