본문 바로가기

Docker

Hello Docker! : 프로젝트 EC2에 배포해보기

1. 개요

 지금까지의 프로젝트에서 EC2에 서버를 배포하고, CodeDeploy를 이용하여 CI/CD를 구축하였다. Docker를 여태 들어보기는 했으나 사용하지 않던 중 이런 의문이 들었다.

Docker가 대체 뭐길래?

 

 이를 직접 사용하면서 해결하고자, 직접 배포부터 CI/CD까지 구축해보면서 Docker의 장단점을 스스로 깨달아보고자 한다. 해당 게시글은 구구모 프로젝트를 바탕으로 진행하도록 한다.

 

2. 진행 과정

2-1. BootJar

우선 프로젝트를 빌드하여 실행 가능한 jar 파일을 하나 만든다. 해당 파일을 도커에 올리고, 이를 배포하여 실행하도록 할 것이다.

2-2. Dockerfile

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

해당 파일은 Dockerfile이라는 이름으로 프로젝트 최상위에 위치해야 한다. 간단히 보자면 다음과 같다.

  • FROM openjdk:17: 프로젝트를 실행할 환경
  • ARG JAR_FILE=build/libs/*.jar: 변수 선언
  • COPY ${JAR_FILE} app.jar: JAR_FILE을 복사하여 app.jar라는 이름으로 생성
  • ENTRYPOINT ["java","-jar","-Dspring.profiles.active=default","app.jar"]: 컨테이너가 수행할 명령

2-3 설정

배포의 과정은 다음과 같다.

  1. 로컬 환경에서 프로젝트를 빌드하여 도커 이미지를 생성한다.
  2. 1에서 만든 이미지를 레포에 push 한다.
  3. ec2에서 해당 이미지를 pull한다. 
  4. 이미지를 컨테이너화하여 실행시킨다.

이에 따라 Docker에 가입 후 레포 하나를 만들어주었다. 

Docker Desktop을 설치, 로그인 후 터미널에서 docker login을 입력하여 로그인을 진행한다.

2-4 이미지 생성 후 push

docker build -t theperz/gugumo-test .

프로젝트 최상단 위치에서 다음 명령어로 이미지를 생성한다. 해당 명령어는 다음을 의미한다.

Dockerfile로 빌드하여 theperz/gugumo-test라는 이름의 이미지를 만들어 경로 최상단에 저장한다.
docker push theperz/gugumo-test

위에서 생성한 이미지를 레포에 push한다. 이름에 :를 구분자로 태그를 지정할 수 있는데 지정하지 않으면 기본값으로 latest 태그가 지정된다.

2-5 EC2에 pull

해당 명령어를 사용하여 EC2에 도커 이미지를 받아온다.

2-6 필요한 컨테이너 생성 및 설정, 연결

이대로 바로 실행할 수 있으면 좋겠지만 본 프로젝트는 redis, postgresql을 사용한다. 해당 게시글에서는 각 기술 스택에 해당하는 컨테이너를 만들고, 네트워크를 구성하여 실행시키기로 한다. 우선 네트워크를 하나 만들어준다.

docker network create doc-net

doc-net라는 이름의 네트워크를 하나 만들어주었다. 이제 컨테이너를 실행시킬 때 마다 해당 네트워크를 등록해 줄 것이다.

docker run -p 5432:5432 --network doc-net --name test-postgres -e POSTGRES_PASSWORD=root -d postgres:latest
docker exec -it {test-postgres ID 첫 4자}

doc-net에 postgres를 올려 test-postgres라는 이름의 컨테이너를 실행시킨다. postgresql 이미지가 없다면 도커에서 자동으로 받아온다. docker exec를 사용하여 컨테이너에 접속하여 db 초기설정을 진행할 수 있다.

docker run -p 6379:6379 -d redis

redis도 동일한 방식으로 진행해준다. 먼저 올린 컨테이너를 네트워크에 올리려면 다음의 명령어를 입력하여 할 수 있다.

docker network connect {network-name} {container-name}

 

docker run -d --name gugumo-container --network doc-net -p 8080:8080 theperz/gugumo-test

이제 스프링 컨테이너를 실행시키면 정상 작동하는 것을 확인할 수 있다.

 

docker logs 를 입력하면 로그를 확인할 수 있다.

 

3. 다음으로...

가장 간단한 형태의 배포를 진행해보았다. 다음에는 도커와 Git Action을 이용하여 CI/CD를 진행해보도록 하자.

'Docker' 카테고리의 다른 글

Trouble Shooting: 배포 시 env 관리하기  (0) 2024.12.30
Docker CI/CD 진행하기  (1) 2024.12.28
Docker-compose 사용하기  (0) 2024.12.11