[리팩토링] 2일차

sua_ahn·2023년 5월 31일
0

리팩토링

목록 보기
2/6

Docker compose를 이용한 EC2 배포

Dockerfile

Spring Boot Docker 가이드
https://spring.io/guides/topicals/spring-boot-docker/

FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

docker-compose.yml

version: "3.8"

services:
  db-mysql:
    container_name: db-mysql
    image: mysql:8.0.29
    environment:
      MYSQL_DATABASE: healthygym
      MYSQL_USER: user
      MYSQL_PASSWORD: '0000'
      MYSQL_ROOT_PASSWORD: '0000'
    restart: always
    ports:
      - 3306:3306
    volumes:
      - ./db/conf.d:/etc/mysql/conf.d
      - ./db/init:/docker-entrypoint-initdb.d
    networks:
      - springboot-mysql-net
      
  backend:
    container_name: backend
    build: .
    restart: always
    image: suaahn/gym-backend:0.1
    environment:
      MYSQL_HOST: db-mysql
      SPRING_DATASOURCE_URL: jdbc:mysql://db-mysql:3306/healthygym?useSSL=false&allowPublicKeyRetrieval=true&serverTimeZone=Asia/Seoul
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: '0000'
    ports:
      - 8080:8080
    depends_on:
      - db-mysql
    networks:
      - springboot-mysql-net

networks:
  springboot-mysql-net:
    driver: bridge

application.properties

jdbc-url에 도커의 경로를 적었으므로 프로젝트 빌드 시 에러가 발생한다.
따라서 테스트없이 빌드하도록 옵션을 적어야 한다. (-DskipTests)

spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://db-mysql:3306/healthygym?useSSL=false&allowPublicKeyRetrieval=true&serverTimeZone=Asia/Seoul
spring.datasource.hikari.username=user
spring.datasource.hikari.password=0000

관리자 권한 Powershell

// 프로젝트 디렉토리로 이동
cd D:\springbootSample\gym

// 프로젝트를 테스트없이 빌드
./mvnw clean package -DskipTests

// Mysql 3306 port kill
netstat -a -o
taskkill /f /pid PID번호

// 도커 이미지 및 컨테이너 생성
docker-compose up

// 도커 컨테이너와 볼륨 삭제
docker-compose down -v

git commit & push

EC2 인스턴스 생성, 연결

Ubuntu에 Docker Engine 설치
https://docs.docker.com/engine/install/ubuntu/

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

// 도커 컴포즈 설치 확인
sudo docker compose version

// 프로젝트를 넣을 디렉토리를 하나 만들었다. (필요하진 않음)
mkdir projects
ls
cd projects

// 깃에서 프로젝트 가져오기
git clone 깃주소

// 스프링부트 설정파일 생성
vim application.properties

https://docs.docker.com/compose/install/linux/

내일 할 것


plugin 과 standalone의 차이
https://stackoverflow.com/questions/66514436/difference-between-docker-compose-and-docker-compose

https://stackoverflow.com/questions/37001272/fixing-world-writable-mysql-error-in-docker
이건 내일 봐야겠다..

profile
해보자구

0개의 댓글