DevBoi

[Aws] Docker-compose 구성하기 본문

Infra/[AWS]

[Aws] Docker-compose 구성하기

HiSmith 2023. 7. 30. 17:17
반응형

기존에는 Aws Mariadb를 별도로 구성해서 사용했는데, 이제 Ec2에서 app, mariadb 두개의 컨테이너를 띄우고 사용할 것이다.

구조는 이렇다.

로컬에서 도커파일을 빌드해서 이미지를 Docker hub로 올리고

docker-compose 파일을 수정해준다.

ec2에 scp로 docker-compose 파일을 보내고(추후에는 vi로 직접 수정)

해당 docker-compose 파일로 빌드 및 컨트롤한다.

 

1) DockerFile

FROM openjdk:17-alpine

ARG JAR_FILE=/build/libs/boiler-0.0.1-SNAPSHOT.jar

COPY ${JAR_FILE} /boiler.jar

ENTRYPOINT ["java","-jar","-Dspring.profiles.active=prod", "/boiler.jar"]

 

2) 도커 빌드 및 hub push

docker build --platform linux/amd64 -t dbtjdwocjswo/boiler:0.0.1 -f ./DockerFile .
docker push dbtjdwocjswo/boiler:0.0.1

 

 

3) local prod 환경 프로파일 분리 

 

 

application-prod

spring:
  config:
    activate:
      on-profile: "prod"
  datasource:
    url: ${SPRING_DATASOURCE_URL}
    username: ${SPRING_DATASOURCE_USERNAME}
    password: ${SPRING_DATASOURCE_PASSWORD}
    driver-class-name: org.mariadb.jdbc.Driver
  jpa:
    open-in-view: false
    generate-ddl: true
    show-sql: true
    hibernate:
      ddl-auto: create
server:
  servlet:
    context-path=/:

 

 

docker-compose

version: "3.2"
services:
  database:
    container_name: database
    image: mariadb
    volumes:
      - ~/docker/mariadb/etc/mysql/conf.d:/etc/mysql/conf.d:ro
      - ~/docker/mariadb/var/lib/mysql:/var/lib/mysql
      - ~/docker/mariadb/var/log/maria:/var/log/maria
    environment:
      - MYSQL_DATABASE=db1
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_ROOT_HOST=%
    command: ['--character-set-server=utf8mb4','--innodb-read-only-compressed=OFF','--collation-server=utf8mb4_unicode_ci','--transaction-isolation=READ-COMMITTED']
    ports:
      - 3306:3306
    networks:
      - spring-network
  backend:
    image: dbtjdwocjswo/boiler:0.1.0
    environment:
      SPRING_DATASOURCE_URL: jdbc:mariadb://database:3306/db1?useUnicode=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: 1234
    ports:
      - 8080:8080
    depends_on:
      - database
    networks:
      - spring-network

networks:
  spring-network:

 

DB와 스프링 관련 네트워크를 묶고

Spring properties에 들어가는 변수를 compose파일에서 적어두고, 

미리 빌드해서 푸쉬한 이미지를 컨테이너로 띄운다.

 

이렇게 되면 실제 서버에서는 Docker-compose파일만으로 컨테이너를 사용할 수 있다.

 

compose file - scp 전달

scp -i ~/.ssh/honey-bit.pem  docker-compose.yaml ubuntu@13.125.233.255:~/

 

ec2 docker compose 설치 및 compose 파일 실행

sudo apt  install docker-compose
docker-compose up -d

 

정상적으로 동작한다.

 

배포 및 관리는

 

로컬 -> 도커 이미지 빌드 및 푸쉬

서버 -> docker compose 파일 내 vi 로 이미지 버전 수정 및 compose 재기동

 

이런 방식으로 관리를 진행 할 예정이다.

mariadb 파일 저장 및 영속성관리에 대해서는 추후 포스팅 예정이다.

반응형

'Infra > [AWS]' 카테고리의 다른 글

[AWS] Mariadb 한글 인코딩 이슈  (1) 2023.10.07
[AWS] Mariadb encoding 오류  (1) 2023.10.02
[AWS] Docker 이미지 ECR에 올리기  (0) 2023.06.08
[AWS] S3 구성  (0) 2023.06.08
[AWS] Multiplatform Docker image를 빌드하는 법  (0) 2023.05.28