Spring/괴발개발

[괴발개발] TODO 웹 개발 노트 - 도커(Docker) 배포

오잎 클로버 2022. 2. 21. 09:10
728x90

먼저 docker를 사용해서 배포를 했습니다.

ssh 역시 적용하고자하였으나 잘 되지않아 일단 localhost에서만 하도록 하였습니다.

 

기존에는 테스트 단계였기에 인-메모리 DB인 H2 데이터베이스를 사용하였습니다.

현재는 mysql 8.0 데이터베이스를 적용하였습니다.

 

먼저 DB를 docker에 저장하면서, 어플리케이션을 같이 실행(배포)하기 위해

docker-compose.yml를 사용해서 배포를 했습니다.

application.yml에 있는 정보 일부를 docker-compose.yml로 넘깁니다.

그리고 ./gradlew build를 사용해서 빌드를 하고 jar를 생성하여 도커에 배포합니다.

version: "3"

services:
  database:
    image: mysql
    container_name: workshopDB
    environment:
      - MYSQL_DATABASE=workshopTodo
      - MYSQL_ROOT_HOST=%
      - MYSQL_ROOT_PASSWORD=1234
    command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
    ports:
      - "3306:3306"
    volumes:
      - /home/revision/docker_spring/database/workshopTodo/:/var/lib/mysql
    networks:
      - test_network_02
    restart: unless-stopped

  application:
    build: .
    restart: always
    ports:
      - "80:8080"
    depends_on:
      - database
    container_name: workshop_todo
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://database:3306/workshopTodo?useSSL=false&serverTimezone=UTC&LegacyDatetimeCode=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 1234
    networks:
      - test_network_02

networks:
  test_network_02:

mysql이 종료될 수도 있기에 종료되었다면 다시 재실행하도록 하도록 하고

SpringApplication은 늘 재실행하도록 합니다.

 

FROM openjdk:11-jdk-oracle AS builder
VOLUME /tmp
ARG JAR_FILE=./build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

Dockerfile에는 jdk 및 VOLUME을 설정한 뒤, docker 배포를 합니다.

 

테스트
Docker 배포

참조

https://doinge-coding.tistory.com/entry/Docker-docker-compose%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-Spring-boot-Mysql-%EB%B0%B0%ED%8F%AC-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1

 

 

이상입니다.