Pages

搜尋此網誌

2014年8月7日 星期四

docker: 搭配 fig 快速建立 sails 開發環境,包含 nodejs、ruby、mysql、redis

docker: 搭配 fig 快速建立 sails 開發環境,包含 nodejs、ruby、mysql、redis

最近工作上有機會使用 docker 建制開發環境,跟同事一起研究了一陣子,可以先參考這篇: fig 使用方法,打造 node.js 開發環境,在這篇文獻參考下,這邊延伸將整個測試環境建制完成之步驟與大家分享。

enter image description here

開始說明細節之前我們需要先把所需套件安裝完成:

install docker-osx and fig

  1. install docker-osx
  2. add eval `docker-osx env` to your .bashrc
  3. run command docker-osx start
  4. Installing Fig

if you wanna stop docker: docker-osx halt

安裝好執行環境候,我們需要用到的 docker 如下

docker repository

透過上述的 repository 的使用,就可以把系統運作所需的環境準備好。

一切準備就緒,讓我們來看看 fig.yml 設定檔

fig.yml 定義

web:
  image: smlsunxie/sails-env:latest
  working_dir: /sails_project
  command: "/bin/bash -c 'source ~/.bashrc && node app.js'"
  volumes:
    # 將 project 整個掛載到 docker 的環境
    - .:/sails_project
  ports:
    - "1337:1337"
  links:
    # 連結 redis 與 mysql 環境
    - redis
    - mysql

watch:
  image: smlsunxie/sails-env:latest
  working_dir: /sails_project
  # 監看本機專案程式碼變化,並且進行編譯
  command: "/bin/bash -c 'source ~/.bashrc && node_modules/.bin/gulp watch --require coffee-script/register'"
  volumes:
    - .:/sails_project

redis:
  image: redis:latest
  ports:
    # 開放內部 port 令實體機器可進行存取,以便檢查資料
    - "6379:6379"
  volumes:
    # 將實體機器的資料庫 data 掛載到 docker 裡面
    - "/Users/Spooky/docker/redis:/data"

mysql:
  image: mysql:latest
  ports:
    - "3306:3306"
  volumes:
    - "/Users/Spooky/docker/mysql:/var/lib/mysql"
  environment:
    # 定義 mysql 的 root 密碼
    MYSQL_ROOT_PASSWORD: "root"

其中 web 的設定中:


/bin/bash -c 'source ~/.bashrc && node app.js'

在測試過程中發現若直接 node app.js 將沒有 ruby 相關的套件比如 sass,主要是若是 command 指令,並不會載入 .bashrc,故在執行前進行 source ~/.bashrc 就可以成功載入 ruby 相關的套件。

接著要在設定的是 web 跟 redis 與 mysql 的連結相關 port 與 ip

connection config

參考 fig 官方關於 Environment variables 的說明,我們可以透過下列方式存取在 docker 中的 links 的 ip 以及 port 的設定。

mysql:
  user: 'root'
  password: 'root'
  database: 'mysqlDatabase'
  host: process.env.MYSQL_1_PORT_3306_TCP_ADDR || "127.0.0.1"
  port: process.env.MYSQL_1_PORT_3306_TCP_PORT || 3306

redis:
  adapter: 'sails-redis'
  host: process.env.REDIS_1_PORT_6379_TCP_ADDR ||"127.0.0.1"
  port: process.env.REDIS_1_PORT_6379_TCP_PORT || 6379

這樣的設定方式可以除了 docker 環境之外,也可以相容於本機或是自定的環境。

相關設定沒問題之後,我們就可以透過下列指令啟動服務,並且實際透過瀏覽器執行。

start project

  1. run command fig up web in project root
  2. access website: http://localdocker:1337/auth/login

因為我們的專案有搭配 gulp watch 我們可以在透過下列指令開始 watch 專案變化

run watch with docker

fig run watch

最後,在開發過程中很常用到的 mocha test 也可以進行,我們可以透過下列指令進入 docker 環境。

into vm envirment

fig run web /bin/bash

接著就可以進行測試執行範例如下:

mocha test/services/MyService.spec.coffee

結論

使用 docker 一段時間候,真的感覺到這東西的強大,所有開發所使用的套件都可以很方便的抽換,並且存在於 docker repository,並且有很多相關不同的環境讓你可以進行組合,雖然這次是以 nodejs 為例,其他如 java 或是 ruby 也是同樣的道理。

換電腦或是在新的主機安裝新的環境不用再重新在安裝一次相關套件,新進人員也不用再每次詢問開發所需環境有哪些。

且因為 docker 的幫忙,在多人開發時環境是真正的完全一致,也包括開發環境與正式 production 環境,可以減少一些環境上的問題。

而自己的電腦除非必要不需在裝類似 redis server 或是 mysql server ,node 與 ruby 執行所需套件等。

透過 fig 的幫忙,讓整個環境設定變得非常簡單,並且非常清楚,有興趣的朋友一定要試一試,感謝先進還有 docker 的發明,帶給我們環境建制的全新感受!

張貼留言