docker-compose 配置spring環境

最近須要打包項目給成員們進行測試,但打包運行後很影響開發,因而打算使用docker模擬生產環境運行打包後的項目,這樣就能既開發,又能給成員進行測試了。
因爲原項目過大,打算先拿軟件工程的大實驗試試水,軟件工程大實驗使用的是spring-boot,redis,mysql,angular,nginx這些環境,先試了試後臺的spring-boot,redis,mysqldocker搭建。java

docker-compose

compose項目是Docker官方的開源項目,負責實現對Docker容器集羣的快速編排。 compose定位是定義和運行多個docker容器的應用。

咱們都知道,使用一個Dockerfile模版文件就能夠建立一個應用容器,但一般在一個項目中,須要多個應用容器,就像個人後臺,同時須要jdk8redismysql這些應用。docker-compose恰好知足了這樣的需求。它容許用戶經過一個單獨的docker-compose.yml模版文件來定義一組相關聯的應用容器爲一個項目。mysql

compose中兩個重要的概念:react

  • 服務(service):一個應用的容器,實際能夠包括若干運行相同鏡像的容器實例。
  • 項目(project):由一組關聯的應用容器組成的一個完整的業務單元,在docker-compose.yml文件中定義。

服務就是咱們須要的docker容器,項目就是由許多服務構成的,瞭解了docker-compose以後就能夠進行環境搭建了。nginx

搭建spring-boot

爲了編譯spring-boot,基於如下流程:redis

  • 基於jdk8鏡像
  • spring-boot下的mvnw、pom.xml複製到容器中,導入maven依賴
  • src目錄下的源碼複製到容器中,使用maven打包spring-boot項目
  • 使用jre8環境運行項目

構建的Dockerfile文件:spring

#### 創建spring-boot項目
FROM openjdk:8-jdk-alpine as build

# 設置項目在docker容器中工做目錄
WORKDIR /app

# 將 maven 可執行程序複製到容器中
COPY mvnw .
COPY .mvn .mvn

# 複製pom.xml文件
COPY pom.xml .

# 導入全部maven依賴
RUN ./mvnw dependency:go-offline -B

# 複製項目源代碼
COPY src src

# 打包應用程序
RUN ./mvnw package -DskipTests
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

#### 設置能運行應用程序的最小docker容器
FROM openjdk:8-jre-alpine

ARG DEPENDENCY=/app/target/dependency

# Copy project dependencies from the build stage
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app

ENTRYPOINT ["java","-cp","app:app/lib/*","com.xiang.airTicket.AirTicketApplication"]

docker-compose 集成項目服務

完成了spring-boot的容器構建後,就可使用docker-compose集成spring-boot、redis、mysql容器了。具體思路:sql

  • 聲明項目
  • 聲明項目須要集成的服務

docker-compose.yml文件:docker

version: '3.7'

#  定義服務
services:
  # spring-boot服務
  app-server:
    build:
      context: . # 配置須要構建Dockerfile的路徑 相對於docker-compose.yml
      dockerfile: Dockerfile
    ports:
      - "8080:8080" # 將本機8080端口映射到容器8080端口
    restart: always
    depends_on: 
      - db # 須要依賴的服務 率先構建
      - redis
    environment: # 設置環境變量
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/airTicket?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 123456
      SPRING_REDIS.HOST: redis
    networks: # 網絡 鏈接mysql和redis
      - backend
  db:
    image: mysql:5.6
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_DATABASE: airTicket
      MYSQL_USER: htx
      MYSQL_PASSWORD: 123456
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - backend
  redis:
    image: redis
    command: [ "redis-server", "--protected-mode", "no" ]
    hostname:
      redis
    ports:
      - "6379:6379"
    networks:
      - backend     
volumes:
  db-data:
networks:
  backend:

使用docker-compose build構建項目容器:
image.png
使用docker-compose up啓動容器:
image.png
當成功看到spring-boot啓動成功的日誌,就成功配置好了。網絡

後續

此次只構建了後臺,但願能把前臺的angular、nginx也構建完畢,爭取一條docker命令,就直接啓動應用程序。app

參考連接:Spring Boot, Mysql, React docker compose example

相關文章
相關標籤/搜索