[微服務] Docker基礎(8) - 讓Docker進入實務的專案(二)
前言
我們會延續第七篇的內容,創造一個真實實務的Docker體系,包含
- 開發
- 測試
- 部屬
工具
在這個實務專案我們會用到
- GitHub (Free)
- 包含master和feature觀念
- Travis CI (Free)
- 由GitHub提供的CI工具
- AWS (有免費專案)
- 我們會將AWS的服務當作最終生產環境
- React
- 我們只單純的使用React的初始APP不會做太多的React Code主要是要看到他的畫面
流程
Dev
- 創建/更新code 在feature branch中
- 將code merge到master中
Test
- 將code push到Travis CI中
- 測試程式碼
Prod
- 將PR merge進master中
- 測試
- 部屬到AWS Beanstalk中
這篇文章會著重於,將Code推上GitHub透過Travis部屬至AWS平台
讓你的專案和GitHub連接
先到你的GitHub創立一個Repository
在到上篇文章的React app和GitHub連接
git init
git add .
git commit -m "First commit"
git remote add origin 你的.git連結
git push origin master
就完成專案和GitHub的連接了
Travis
直接用GitHub的SSO登入Travis,並且透過官方的基本操作將目標Repository拉到Travis工作區
接下來我們要
- 透過Travis跑我們的Docker.dev環境
- 告訴Travis我們要跑測試
只要在上一篇(七)的文章中我們前置作業做好的React App資料夾中加上.travis.yml檔案就可以開始使用travis的功能
將GitHub的專案拉到Trais工作區
登入Travis後點擊右上角的帳號setting就可以將自己的範例專案拉到工作區,如下點擊我們這範例的Docker react專案
接下來Travis只要新增下面的檔案到自己專案的根目錄,每次push上去就會幫你建置搂!
.travis.yml
sudo: required
services:
- docker
before_install:
- docker build -t charlie/docker-react -f Dockerfile.dev .
script:
- docker run charlie/docker-react npm run test -- --coverage
- sudo是告訴Travis要用根權限操作
- services是宣告會用到那些服務
- berfore_install當執行我們要做的script前我們要先做那些操作
- script是我們要做哪些事情
- 這裡我們多了-- --coverage是要透過npm幫我們看單元測試的覆蓋率
記得要將此檔案推到GitHub上
推上Github後,更新Travis的畫面,就可以看到我們的單元測試開始跑了!
AWS
我們這裡會使用到AWS的Elastic Beanstalk,在控制台尋找Elastic Beanstalk簡單的輸入專案名稱並且宣告自己使用是Docker platform,其他使用預設就好
在這裡不深入探討如何使用Elastic Beanstalk,之後會再增加介紹文章
新增EBS一個新的Server,並且選擇Docker專案
透過AWS使用介面尋找S3的服務並且記錄S3的bucket name
我們要對Elastic Beanstalk做甚麼呢?
- 我們要將我們的Docker容器放進去並且啟動
- 我們要進入S3我們EBS(Elastic Beanstalk)拿取我們的Bucketname
- 進入IAM特別開一個專屬於這個EBS的部屬帳號(記得打開EBS權限),並且拿取Access和Secret ID
- 設定我們的.travis.yml檔的部屬設置
過程結束後我們的.travis.yml會長這個樣子
sudo: required
services:
- docker
before_install:
- docker build -t charlie/docker-react -f Dockerfile.dev .
script:
- docker run charlie/docker-react npm run test -- --coverage
deploy:
provider: elasticbeanstalk
region: "us-east-1"
app: docker-react
env: "DockerReact-env"
bucket_name: "從S3拿到的BucketName"
bucket_path: "docker-react"
on:
branch: master
access_key_id: $AWS_ACCESS_KEY
secret_access_key:
secure: "$AWS_SECRET_KEY"
- deploy 是告訴travis我要如何部屬
- provider 標明我們要部屬在EBS中
- region 是我們EBS所在的區域
- app 就是我們EBS所開的專案名稱
- env 此專案所在的環境
- bucket_name 從S3得到和這個EBS連接的儲存裝置名稱
- bucket_path 打上我們的專案名稱(他會直接幫你以專案名稱作為App的根目錄資料夾)
- on
- branch 我要針對哪一個branch變動時作部署
- access_key_id 我們要連進EBS的進入金鑰
- 裡面的$AWS_ACCESS_KEY是透過travis專案裡面setting的environment設定
- secret_access_ley
- secre 同上透過環境變數設定
再來是記得打開我們Dockfile Nginx的port,因為EBS上我們不能透過docker run -p的方法設定要打開的port,所以只能透過docker裡面設定
dockerfile
FROM node:alpine as builder
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
FROM nginx
EXPOSE 80
COPY --from=builder /app/build /usr/share/nginx/html
再將這次更動push到我們的github上,等一下部屬時間,就可以看到我們的react app成功發布到AWS EBS上,恭喜你完成第一個簡單的實戰應用,之後如果要在上面開發你已經做到了第一個CI/CD搭配Docker的自動架構了
結論
這兩篇文章從打包React到Docker,設定Dockerfile/Dockerfile.dev還有travis的自動化測試,以及最後將整個App部屬至AWS上
留言
張貼留言