本篇是 Centos 從安裝到部署 系列文章的最後一篇。最近忙於其他事情,本該早就完成的終結篇拖了好久。
在 《Centos 從安裝到部署之 Docker》中簡單的講解了一些 Docker 的基礎知識,主要就是為本篇文章做一個前置鋪墊。接下來將會為大家介紹如何通過藉助 Daocloud 實現 Docker 映象的自動構建及部署。
使用 Docker 進行應用部署的優勢:
- 使用不同版本的映象部署容器,輕鬆實現應用版本管理及控制,且方便移植
- 可以同時部署多個容器,實現單機叢集化部署
- 依託第三方平臺,輕鬆實現應用的持續整合、自動構建及部署
- 應用之間彼此隔離,降低環境維護成本,提高安全性
要實現的目標:
- 本地編寫業務程式碼,無需構建
- 推送程式碼到 Github 倉庫
- Daocloud 拉取最新程式碼進行映象構建
- 構建完成自動部署映象到指定伺服器
Talk is cheap, show me step!
一、編寫 Dockerfile 檔案
在 上一篇 中,我們瞭解到 Dockerfile 檔案是構建 docker 映象的 “指南”,Docker Daemon 會根據專案上下文中的 Dockerfile 檔案中的指令將專案打包構建為一個映象,所以編寫 Dockerfile 檔案是第一步。
首先我們在專案根目錄下建立一個 Dockerfile 檔案(本文的構建過程以我的個人專案 recatch 為例),然後在其中寫入如下程式碼:
# 指定當前映象的基礎映象為 node,版本為 8.9.1
FROM node:8.9.1
# 指定當前映象維護人資訊
MAINTAINER yvanwang googolewang@gmail.com
# 此處將專案根目錄下的 package*.json 拷貝到 /tmp/資料夾下
COPY package*.json /tmp/
# 執行命令列指令切換執行上下文到 /tmp 下,並執行 npm install 命令進行第三方依賴包的安裝。
# 之所以要在 /tmp/ 目錄下安裝 npm 包,是為了可以充分利用 docker 映象層的快取,
# 防止每次構建映象都需要重新安裝
RUN cd /tmp && npm install
# 執行命令建立 /usr/src/recatch 資料夾
RUN mkdir -p /usr/src/recatch
# 指定工作目錄為 /usr/src/recatch
WORKDIR /usr/src/recatch
# 將專案根目錄下的內容拷貝到映象的 /usr/src/recatch 目錄下
COPY . .
# 執行命令將安裝的 npm 包 拷貝到/usr/src/recatch 目錄下,並執行專案構建
RUN cp -a /tmp/node_modules /usr/src/recatch && npm run build
# 執行命令安裝 pm2,我們將使用 pm2 來守護我們的 node 程式
RUN npm install pm2 -g
# 宣告容器執行埠
EXPOSE 8084
# 容器啟動命令,將會執行 package.json 中的 start:docker 指令碼
CMD ["npm", "run", "start:docker"]複製程式碼
對配置指令進行簡單介紹:
FROM:指定基礎映象,我們的映象就是基於該基礎映象進行定製,所以在 Dockerfile 中 FROM 指令是必需的,而且必須是第一條指令
MAINTAINER:映象維護人資訊
COPY:複製檔案,格式為:COPY <源路徑> <目標路徑>
RUN:是用來執行命令列命令的
WORKDIR:指定工作目錄,格式為: WORKDIR <工作目錄路徑>
EXPOSE: 宣告執行時容器提供服務埠,只是一個宣告,容器執行埠以啟動容器時的配置為主
CMD: 容器啟動命令,用於指定容器啟動時需要執行的啟動命令
詳細具體的 Dockerfile 指令參考 《Docker — 從入門到實踐》。
二、配置 Daocloud 設定 Github 專案
需要前往 Daocloud 註冊一個管理賬戶,可以使用 Github 賬戶登入。
登入完成後,配置 Github 專案倉庫。選擇 專案 —> 建立新專案,
建立專案完成後,我們登入 Github,選擇我們在 Daocloud 中選中配置的專案,切換到 Settings —> Webhooks
在選單下可以看到一個 hook 配置。有了這個鉤子配置,每次在我們提交程式碼之後,Github 就會向 Daocloud 傳送一個 POST 請求,傳送專案推送資訊,Daocloud 接受到通知後就會自動執行映象構建流程。
三、拉取映象,執行容器
映象構建完成後,設定 Daocloud 中的叢集管理,配置我們的自有主機,拉取映象並執行。選擇 自有主機 —> 叢集管理 —> 新增應用雲平臺
執行完成後選擇 應用—>建立應用—>選擇我們設定的專案 即可手動進行映象部署。
至此,當我們的專案提交程式碼後, Daocloud 就會自動執行映象構建,然後我們就可以部署映象到我們的雲主機,但是映象部署這一步仍然需要我們手動執行。
萬里長征就差最後一步,設定自動部署。選擇 應用 —>我們建立的應用(點選應用名稱)—>釋出 將自動釋出功能開啟。
經過以上三步,我們就可以實現專案的自動構建和部署了。
本文旨在為大家提供一種使用 Docker 實現應用自動構建及部署的方法,如有不正確的地方,大家可以留言指出,共同學習,共同進步。
本篇文章首發於我的個人部落格:Centos 從安裝到部署之 自動化構建及部署(三)
歡迎大家加入前端學習交流群 { 前端學習之同道中人 } :713117335
參考專案:
參考資料:
Docker 五大優勢 — 持續整合、版本控制、可移植性、隔離性和安全性