[Docker] Springboot + MySQL + Selenium을 도커 컨테이너 환경에서 운영하기

2024. 4. 17. 23:00Devops/Docker

AWS에 Docker를 이용하여 배포하기 위해 Docker컨테이너 환경에서 Springboot, MySQL, Selenium를 운영테스트를 진행했다.

 

구현 환경

JDK 17 JetBrains

MySQL 8.3.0

Springboot 3.2.4

gradle

Intellij

 

1. 아래에 두 파일을 프로젝트 최상위 폴더에 작성하고 시작하면 된다.

Dockerfile

FROM openjdk:17
WORKDIR /app
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

docker-compose.yml

version: '3.8'

services:
  mysql:
    image: mysql:8-oracle
    container_name: mysql
    restart: "always"
    environment:
      MYSQL_ROOT_PASSWORD: dummypassword
      MYSQL_DATABASE: social-media-database
      MYSQL_USER: social-media-user
      MYSQL_PASSWORD: dummypassword
      TZ: Asia/Seoul
    ports:
      - "3306:3306"  # 호스트 포트:컨테이너 포트
    volumes:
      - ./db/mysql/data:/var/lib/mysql
      - ./db/mysql/init:/docker-entrypoint-initdb.d

  java_app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: java_app
    restart: "always"
    depends_on:
      - mysql
    links:
      - mysql
    ports:
      - "5000:5000"  # 호스트 포트:컨테이너 포트
    environment:
      DATABASE_URL: jdbc:mysql://mysql:3306/social-media-database
      DATABASE_USERNAME: social-media-user
      DATABASE_PASSWORD: dummypassword

  chrome:
    image: selenium/standalone-chrome:latest
    hostname: chrome
    ports:
      - "4444:4444"
      - "7900:7900"
    privileged: true
    shm_size: 2g
  framework:
    build: .
    depends_on:
      - chrome
volumes:
  mysql_data:

 

Docker 컨테이너에서 MySQL과 Selenium에 사용되는 호스트 네임은 mysql, chrome로 사용하도록 작성하였다.

 

2. Gradle - build - bootjar로 jar파일을 빌드

 

3. 그 다음 인텔리제이에서 도커를 설치하고 yml파일을 우클릭 -> run으로 실행하면

 

이렇게 컨테이너들이 시작되었다고 나오면 성공이다

 

Docker desktop

 

Spring Scheduler로 매 시 10분마다 인기검색어 업데이트를 해두었다.