[DevOps] Docker Compose를 이용하여 EC2환경에서 배포

Donghoon Jeong·2024년 2월 29일
2

DevOps

목록 보기
3/4
post-thumbnail

이번 포스팅에서는 Docker Compose를 이용하여 로컬에서 만든 프로젝트를 EC2환경에 배포하는 방법을 알아보겠습니다.

사전에 EC2 인스턴스를 생성해야된다는 점을 알려드립니다.

EC2 인스턴스를 생성하는 법은 아래 포스팅에서 확인할 수 있습니다.

https://velog.io/@jjeongdong/AWS-EC2-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1


EC2 인스턴스 설정

인바운드 규칙 편집

프로젝트가 배포된 후에 8080 포트로 접속하기 위해 8080 포트를 열어두는 작업을 하도록 하겠습니다.

실행중인 인스턴스의 보안 그룹으로 이동하여 인바운드 규칙 편집을 클릭합니다.

해당 서버에 8080 포트에 모든 사용자가 접속하기 위해 다음과 같은 설정을 해줍니다.


EC2 Linux에 Docker & Docker Compose 설치

1. 관리자 권한으로 전환

Docker 명령어의 경우 관리자 권한으로 실행하는 일이 많아 관리자 권한으로 전환해 줍니다.

sudo su -

2. Docker 설치

아래 명령어를 사용하여 EC2 Linux에 Docker를 설치해줍니다.

# 1. 프로그램 설치 전 우분투 시스템 패키지 업데이트
$ sudo apt-get update
 
# 2. 필요한 패키지 설치
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
 
# 3. Docker의 공식 GPG 키 추가
 
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 
# 4. Docker의 공식 apt 저장소 추가
 
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

 
# 5. 시스템 패키지 업데이트
$ sudo apt-get update
 
# 6. Docker 설치
 
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

3. Docker Compose 설치

아래 명령어를 사용하여 EC2 Linux에 Docker Compose도 설치해 줍니다.

# Docker Compose 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 다운로드 한 파일에 권한 설정
$ sudo chmod +x /usr/local/bin/docker-compose

Dockerfile & docker-compose.yml 작성

배포할 프로젝트의 루트 디렉터리 Dockerfiler과 docker-compose.yml을 작성해 줍니다.

Dockerfile

FROM openjdk:17-jdk-slim
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]

docker-compose.yml

version: "3"
services:
  mysql:
    container_name: mysql_db
    image: mysql
    environment:
      MYSQL_ROOT_HOST: '%'
      MYSQL_DATABASE: qna
      MYSQL_ROOT_PASSWORD: 1234
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/conf.d:/etc/mysql/conf.d # MySQL 설정 파일 위치
    command:
      - "mysqld"
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    networks:
      - test_network

  springbootapp:
    restart: on-failure
    build: .
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql_db:3306/qna?useSSL=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: "root"
      SPRING_DATASOURCE_PASSWORD: "1234"
    depends_on:
      - mysql
    networks:
      - test_network

networks:
  test_network:

EC2 Linux에서 Docker Compose 실행

1. EC2 접속

키 페어가 있는 경로로 가 EC2에 접속합니다.

$ ssh -i 키페어이름.pem ubuntu@퍼블릭 IPv4 DNS

2. EC2에 프로젝트 복사

git clone 명령어를 통해 EC2안에 해당 프로젝트를 복사하고, cd 명령어를 사용하여 해당 프로젝트 루트 디렉터리로 이동합니다.

$ git clone { Github Repository URL }

$ cd { Project Name }

3. docker-compose.yml 실행

/build/*.jar가 없는 경우엔 build 명령어를 통해 jar 파일을 생성한 후에, docker compose 명령어를 사용하여 위에서 작성한 docker-compose.yml을 실행합니다.

$ .gradlew build

$ docker-compose up --build -d

결과

AWS에서 해당 EC2 인스턴스의 퍼블릭 IPv4 주소 뒤에 접속하고 싶은 포트를 입력하면 정상적으로 접속되는 것을 확인 할 수 있습니다.

profile
정신 🍒 !

0개의 댓글