이번 포스팅에서는 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
프로젝트가 배포된 후에 8080 포트로 접속하기 위해 8080 포트를 열어두는 작업을 하도록 하겠습니다.
실행중인 인스턴스의 보안 그룹으로 이동하여 인바운드 규칙 편집을 클릭합니다.
해당 서버에 8080 포트에 모든 사용자가 접속하기 위해 다음과 같은 설정을 해줍니다.
Docker 명령어의 경우 관리자 권한으로 실행하는 일이 많아 관리자 권한으로 전환해 줍니다.
sudo su -
아래 명령어를 사용하여 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
아래 명령어를 사용하여 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
배포할 프로젝트의 루트 디렉터리 Dockerfiler과 docker-compose.yml을 작성해 줍니다.
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"]
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에 접속합니다.
$ ssh -i 키페어이름.pem ubuntu@퍼블릭 IPv4 DNS
git clone 명령어를 통해 EC2안에 해당 프로젝트를 복사하고, cd 명령어를 사용하여 해당 프로젝트 루트 디렉터리로 이동합니다.
$ git clone { Github Repository URL }
$ cd { Project Name }
/build/*.jar가 없는 경우엔 build 명령어를 통해 jar 파일을 생성한 후에, docker compose 명령어를 사용하여 위에서 작성한 docker-compose.yml을 실행합니다.
$ .gradlew build
$ docker-compose up --build -d
AWS에서 해당 EC2 인스턴스의 퍼블릭 IPv4 주소 뒤에 접속하고 싶은 포트를 입력하면 정상적으로 접속되는 것을 확인 할 수 있습니다.