BackEnd Docker 배포

조예빈·2024년 9월 4일
0

우선, 나는 AWS, Docker, Jenkins를 사용해서 배포 및 CI/CD를 적용해 줄 것이다. 우선, AWS는 클라우드 인프라를 위해서, Docker는 애플리케이션 컨테이너화를 위해서, Jenkins는 CI/CD를 위해서 사용하기로 하였다.

Jenkins

  • 지속적 통합 및 배포 자동화
  • 코드 변경 사항 자동 감지 및 빌드
  • 배포 프로세스 자동화

Docker

  • 애플리케이션과 그 종속성을 컨테이너로 패키징
  • 일관된 환경에서 애플리케이션 실행 가능
  • Dockerfile이 이미지를 만들고, docker 이미지가 jar파일을 가지고 있음. 그리고 컨테이너는 이 이미지들(프론트, 백)을 모아서 실행되도록 하는 것

AWS

  • 확장성과 유연성이 높은 인프라 환경 제공
  • Docker 컨테이너는 AWS의 가상 머신(EC2)

1. EC2 인스턴스 생성

ubuntu로 생성해 주었다. 이후 콘솔에 접속해 준다.

2. Docker 설치

  1. ubuntu에서 패키지를 다운받을 때 사용하는 apt 업데이트
sudo apt update
  1. Docker 설치
sudo apt install docker.io
sudo apt install docker-compose
  1. git 설치(기본적으로 설치되어 있어서 없는 경우만 설치)

3. Git Repository Clone

  1. 사용하려는 브랜치로 가서 clone
sudo git clone {git 경로} --branch {브랜치명} --single-branch

single-branch 옵션을 지정하면 지정한 브랜치만 클론 할 수 있다.

4. Docker 컨테이너 실행

Docker를 사용하여 컨테이너 기반으로 앱을 실행시켜야 함
1. jar파일 생성 : 우측 Gradle -> Tasks -> build -> bootJar 클릭

  1. 프로젝트 경로로 들어가서 jar파일 확인 : 프로젝트명/build/libs(필수 과정 아님. 잘 되는지 확인한것)
  1. EC2에서 jar파일 생성 : git clone을 받아온 root directory로 이동해서 JAR 파일 빌드
  • test code를 제외하고 gradle build
./gradlew clean build -x test

이후 cd build/libs로 확인해보면 jar파일이 생성된 것을 알 수 있다.

  1. EC2에서 jar파일이 있는 디렉토리로 이동한 후 Dockerfile 생성(백엔드)
  • JAVA 애플리케이션을 컨테이너에서 쉽게 실행할 수 있도록 필요한 환경을 설정하고, 애플리케이션 코드를 복사한 후 실행하는 과정을 자동화함
  • Jenkins에서 Docker명령어를 추가하고, 그럼 코드의 변경이 감지되었을 때 Dockerfile이 실행되는 것
  • dockerfile은 docker 이미지를 생성하는 것
# 1. 베이스 이미지 설정
FROM openjdk:17-jdk-slim

# 2. 작업 디렉토리 설정.만들면 여기로 들어옴
WORKDIR /app

# 3. JAR 파일 복사
COPY build/libs/프로젝트 파일.jar app.jar

# 4. 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]

베이스 이미지 설정

  • Docker의 기반이 될 이미지를 지정하는 것
  • Java 애플리케이션을 실행하기 위해 OpenJDK 17사용

작업 디렉토리 설정

  • 컨테이너 내에서 작업할 디렉토리를 /app으로 설정
  • 이후의 명령은 이 디렉토리 내에서 실행됨
  • 일반적으로 /app 이라는 디렉토리를 사용하는 것이 관례

JAR 파일 복사

  • JAR 파일을 컨테이너의 /app 디렉토리로 복사

애플리케이션 실행

  • 컨테이너가 시작될 때 실행할 명령 지정
  • 위의 코드에서는 java -jar app.jar라는 명령어가 실행됨

  1. 도커 로그인 및 현재 사용자를 Docker 그룹에 추가
  • 현재 사용자 그룹에 추가
sudo usermod -aG docker 현재사용자
  • 로그인(추가 후 재부팅 한 다음에 로그인 해야 함)
docker login
  1. Docker 이미지 빌드
docker build -t <이미지_이름>:<태그> .
  • 태그를 지정해 주지 않으면 latest라는 이름이 자동으로 할당되지만, 명시적으로 태그를 지정하는 것이 좋음
  • 도커 이미지 확인
docker images

  1. MySQL 연동
docker run --name mysql_container -e MYSQL_ROOT_PASSWORD=비밀번호 -e MYSQL_DATABASE=데이터베이스명 -p 3306:3306 -d mysql:latest
  1. Docker 컨테이너 실행
docker run -d -p 호스트 포트:컨테이너 포트 --name <컨테이너_이름> <이미지_이름>:<태그>
  • 호스트 포트 : 도커가 실행되고 있는 컴퓨터의 포트. 호스트의 8080포트를 외부에서 접근할 수 있게 설정
  • 컨테이너 포트 : 컨테이너에서 실행 중인 애플리케이션이 사용하는 포트. 호스트의 포트에 접속하면 컨테이너의 포트로 요청이 전달되어 애플리케이션이 응답

mysql설정해주기. localhost는 안됨. 그리고 비번 설정도 해 주어야 함(현재는 비번이 설정돼있지 않는데 properties 파일에는 설정돼있어서 그럼)

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글