iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
2
DevOps

後端功城獅30天DevOps探討挑戰系列 第 24

實作分享 - Docker Compose + SpringBoot + Mysql

  • 分享至 

  • xImage
  •  

這篇要來實作兩個Container了,分別就是我們的

  • openJDK:部署Spring Boot
  • Mysql:儲存資料

這兩個Container都有Official的在DockerHub上,因此我們只要很簡單的從DockerHub把他們Pull下來就可以,我們依序開始吧

Spring Boot Dockfile

  1. mvn -Dmaven.test.skip=true install
    • 利用Maven build出我們要用的war
    • skip Test因為在包板時,maven就會協助我們跑所設定的Testing,只是此刻我把db連線設定已經先改成連線我們等會的mysql container
    • 可以利用不同stage的包板區隔,就不需略過Test,但我這邊先略過
  2. 於專案根目錄加入Dockerfile
    • 設定Container Base
    • 加入bash功能與wait-for-it.sh(後面docker-compose時會說明),wait-for-it.sh可於此處參考
    • 將步驟1的war加入
    • 開放對外Port為8090
# 載入openjdk
FROM openjdk:8-jdk-alpine


# 加入bash功能
RUN apk add --no-cache bash


# 將檢測MySQL是否Ready的腳本加入
COPY wait-for-it.sh /wait-for-it.sh


# 調整權限
RUN chmod +x /wait-for-it.sh


# 將目標WAR放入Docker Image中
ADD /target/mms.war .


# 此對外Port設定
EXPOSE 8090

Docker-compose.yml

  1. 設定Mysql與剛剛做的Image於Docker-compose中
  2. 這邊提一下,depends_on
    • 表示app-server這個service,必須在app-db啟動後再執行
    • 但是要注意!只是啟動的順序,並不表示會等到app-db準備好
    • 因此加入wait-for-it.sh的腳本,確認等待我們的app-db / Mysql 準備好了,再執行我們的war檔
    • 官方說明
version: '3.7'

# Service
services:
  # Database MySQL
  app-db:
    image: mysql:8.0.17
    container_name: app-db
    #restart: always
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: mms_db
      MYSQL_USER: springboot
      MYSQL_PASSWORD: springboot
    ports:
      - "3306:3306"
    networks:
      - app-server-network
  # APP Server
  app-server:
    depends_on:
      - app-db
    image: mms/member-manage-system:0.0.1
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "8090:8090"
    environment: # Pass environment variables to the service
      DATASOURCE_HOST: app-db
      DATASOURCE_POST: 3306
      DATASOURCE_NAME: mms_db
      DATASOURCE_USERNAME: springboot
      DATASOURCE_PASSWORD: springboot
    networks:
      - app-server-network
    command: ["./wait-for-it.sh", "app-db:3306", "--", "java", "-jar", "mms.war"]

# Volume
volumes:
    mysql-data:

# Network
networks:
  app-server-network:

Docker Start

  1. 設定完Dockerfile、docker-compose.yml、wait-for-it.sh
  2. 執行docker-compose up --build
  3. 等待啟動完成即可於本機http://localhost:8090/MemberManagerSystem 確認囉
    https://ithelp.ithome.com.tw/upload/images/20191010/20111916o4gRtavrO4.png
    https://ithelp.ithome.com.tw/upload/images/20191010/20111916rFUk88yF0X.png
    https://ithelp.ithome.com.tw/upload/images/20191010/201119160AB17M0Ggu.png

另外,也可以看看目前在docker裡的image、container、network、volume的狀況喔
https://ithelp.ithome.com.tw/upload/images/20191010/20111916edMLc4Tftm.png

參考資料、延伸閱讀:

下集預告:實作分享 - Jenkins


上一篇
實作分享 - Docker
下一篇
實作分享 - Jenkins
系列文
後端功城獅30天DevOps探討挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言