1 minute read

Updated:

👩🏻‍💻 Elastic Compute Cloud / Elastic IP/ Docker Compose를 이용하여 ec2에 애플리케이션을 배포합니다.

Docker Compose 설치 및 배포

EC2에 접속하여 도커 및 Git을 설치해 보자.

1. Git 설치

#Perform a quick update on your instance:
$ sudo yum update -y

#Install git in your EC2 instance
$ sudo yum install git -y

#Check git version
$ git version

2. 도커, 도커 컴포즈 설치 및 시작

docker client와 server(docker daemon)간 통신 방식은 기본적으로 unix domain socket(IPC socket)을 사용하며, 내부적으로 /var/run/docker.sock파일을 사용하여 통신한다. 따라서, 아래와 같이 설치 후 권한을 부여한다

//도커 설치  
$ sudo yum install docker
$ docker -v

// 도커 컴포즈 설치 
$ sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose   

// 도커 시작하기     
$ sudo systemctl start docker

// 실행 권한 적용   
$ sudo chmod +x /usr/local/bin/docker-compose    
$ sudo chmod 666 /var/run/docker.sock
$ docker-compose -v

3. Docker Compose 파일이 존재하는 소스 내려받기

$ git clone [git web URL]

4. Docker 환경변수

로컬에서 개발할 때, DB 계정 정보나 외부에 노출되면 안되는 값들을 따로 제외하여 관리하였고 이를 도커 컨테이너를 실행할 때 전달해주어야 하는데 이때 .ENV 파일을 사용할 수 있다.

docker-compose를 사용할때 .env라는 파일에 환경변수를 사용하면 자동으로 참조하여 사용할 수 있다.

이를 동일하게 EC2에서도 docker-compose파일이 있는 위치에 아래와 같이 환경변수 값들을 추가해 주어서 docker-compose 실행시 해당 값들을 참조하여 컨테이너를 실행시킬 수 있게 해준다.

$ vi .env   

SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=1234

.env 파일을 생성후 아래 명령어를 통해 값을 확인 가능하다.

$ docker-compose config    

5. JDK 설치 및 jar 파일 생성

아래와 같이 Amazon에서 제공하는 OpenJDK인 Amazon Coretto를 다운받아 간편하게 설치할 수 있다.

# aws coreetto 다운로드
$ sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o jdk11.rpm

# jdk11 설치
$ sudo yum localinstall jdk11.rpm
// 테스트 케이스 제외하고, jar 파일 빌드만 진행
$ ./gradlew clean build -x test

만약 gradlew 명령어를 실행할 때 Permission 문제가 발생하는 경우, 아래 명령어를 실행해서 실행권한을 먼저 준 후 위 ./gradlew를 실행한다.

$ chmod +x ./gradlew

6. Docker 이미지 받고 Docker Compose 실행

$ docker-compose up --build

docker-compose를 이용해서 애플리케이션을 실행시킨다.
위에서 적용한 Elastic IP를 통해 접속하게 되면, 정상적으로 애플리케이션을 접속하는 것을 확인 할 수 있다.


reference

https://wonyong-jang.github.io/aws/2022/06/05/AWS-EC2-Elastic-IP.html