建置一個開發Web服務用的Docker環境 (I)
當我們要開發一個Web服務時,前後端通常會切割成不同的Service
例如,前端採用Angular;後端則是WildFly(前身為JBoss)跟MariaDB
未來如果有其他服務要新增
開發者就要在自有主機或VM上面架設對應的環境
不僅如此,開發中一旦檔案損毀或改錯需重新建構也是一大工程
例如,前端採用Angular;後端則是WildFly(前身為JBoss)跟MariaDB
未來如果有其他服務要新增
開發者就要在自有主機或VM上面架設對應的環境
不僅如此,開發中一旦檔案損毀或改錯需重新建構也是一大工程
因此,Docker等容器化技術就是在改善這類問題以減少開發者的負擔
也會有需要客製化Image的時候,就會需要撰寫
現在我們就以上述的情境來設計我們的Docker開發環境
也會有需要客製化Image的時候,就會需要撰寫
Dockerfile
現在我們就以上述的情境來設計我們的Docker開發環境
Docker與專案開發的目錄結構如下
- DockerProject
主要是控制容器間的溝通邏輯
.env主要是放一些容器間共用的參數或設定檔
docker-compose.yml 設定檔大致如下version: "3.3" services: jboss-backend: image: jboss/wildfly:ytTest container_name: 'jboss_Backend' env_file: .env ports: - 8080:8080 volumes: - ./JBoss:/${JBOSS_WORKING_DIR} - web-dist-volume:/opt/jboss/wildfly/angular-dist working_dir: /${JBOSS_WORKING_DIR} jenkins: image: jenkins/jenkins:ytTest container_name: 'jenkins' env_file: .env ports: - "18080:8080" - "50000:50000" volumes: - ./Jenkins:/${JENKINS_WORKING_DIR} - web-dist-volume:/angular-dist working_dir: /${JENKINS_WORKING_DIR} db: image: mariadb container_name: 'maria_db' env_file: .env environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} ports: - 3306:3306 restart: always volumes: - ./MariaDB:/${MARIADB_WORKING_DIR} working_dir: /${MARIADB_WORKING_DIR} volumes: web-dist-volume:
services下就是要描述各容器的設定檔
外層的volumes我們是用來宣告共用目錄的名字,並非DockerProject下的目錄
主要參數說明:image
:該容器要使用的image,此欄位必填。<NAME>:<TAG>,ytTest是我們自己建的imagecontainer_name
:容器運行時的名稱,透過指令加這名稱可以進入容器操作env_file
:該容器要參照的環境變數檔案envireonment
:環境變數的 Key,Value,也可整併到.env
裡面ports
:要轉出docker machine與對應得容器port。<EXPOSE_PORT>:<CONTAINER_PORT>volumes
:本地端與容器端要共用的目錄。<LOCAL_DIR>:<CONTAINER_DIR>working_dir
:進入容器後的起始目錄,注意這並不一定等於容器的$HOME
目錄為便於開發,我們有裝一些DBMS(e.g., phpmyadmin)串接MariaDB,但在這先聚焦主要元件 - JBoss
內部設定可以參考之前說的Docker Container 檔案共享,用來設定與Jenkins的共用目錄 - MariaDB
用來新增預設的使用者帳密、初始化資料庫與Schema - 前後端程式碼
為了便於維護,前後端程式碼直接沒放在Docker目錄下
如果只是想Build本地端的專案
Docker可以掛載任意目錄,所以沒有影響
原則上
在DockerProject目錄下執行 docker-compose up 就可以開啟三個容器了
Docker-compose.yml
配置好,若有客製化的image建好之後在DockerProject目錄下執行 docker-compose up 就可以開啟三個容器了
然而,如果沒有像Registry Server(e.g., DockerHub)儲存我們的image
協同開發的人,就必須得按照你提供的檔案與Dockerfile來建置image才能正常使用
我們下一篇會以Jenkins為例,說明這個部分。
協同開發的人,就必須得按照你提供的檔案與Dockerfile來建置image才能正常使用
我們下一篇會以Jenkins為例,說明這個部分。
留言
張貼留言