AWS + Docker + Jenkins 사용하기 (1)

AWS EC2에서 Docker 컨테이너를 사용하여 웹 서버를 배포하고, 젠킨스를 사용하여 자동배포 구성하기
dustjq1005 · 2024년 12월 23일

해당 글은 플랫포머 배포 스터디에서 공부한 내용을 정리한 글입니다.

AWS EC2 인스턴스 생성하기

💡 EC2 인스턴스에 대한 무료 프리티어 과금 정책 안내
주의! 요금 부과를 피하려면 EC2 생성 시 public IPv4가 할당되지 않도록 설정해야 합니다.
자동으로 IPv4가 할당되도록 체크되어 있으니 반드시 확인 후 진행하세요.

1. EC2 콘솔 접속 후 인스턴스 시작하기 클릭

🌐 EC2 콘솔 이미지

2. 인스턴스 생성 정보 입력

  • Name: 인스턴스 이름 (임의로 작성)
  • Application and OS Images (Amazon Machine Image): Ubuntu 선택
  • 인스턴스 유형: t2.micro
    • 🛠️ Jenkins 설정 및 빌드 시 부하로 문제 발생 가능. 필요 시 RAM 사용량 조정 (Linux Ram Switching)
  • 키 페어 생성:
    • SSH 접속을 위해 필수
    • 생성된 파일은 외부 유출 방지
  • 스토리지 구성: 무료는 최대 30GB까지, 초과 시 요금 부과
  • ▶ 인스턴스 시작 버튼 클릭으로 생성 완료

🐳 Docker 사용하기

Docker는 실행 환경에 상관없이 동일한 환경을 제공하며, 서버에 필요한 코드, 런타임, 시스템 도구 및 라이브러리를 포함합니다. 기존 수동 Gradle 빌드 작업을 대체하여 실행을 지원합니다.

1. Docker 설치하기 (Local - Mac)

Docker는 애플리케이션 개발부터 배포까지 간편하게 사용할 수 있는 컨테이너 플랫폼입니다.

🌐 홈페이지 다운로드

  1. 🌐 Docker 공식 웹사이트에서 Docker Desktop for Mac with Apple silicon (M1/M2 경우) 클릭
  2. .dmg 파일 다운로드 및 실행
  3. 회원가입 후 로그인:
    • Docker 앱에서 로그인
    • 명령어로 로그인

💻 명령어 로그인

docker login
  • username: 회원가입 시 입력한 정보 (우측 상단 프로필에서 확인 가능)

🔑 구글 계정 사용 시 비밀번호 설정:

  1. 🔗 Docker Hub 접속
  2. 우측 상단 프로필 클릭 - My Account
  3. Change Password로 설정

Docker 명령어 간단 정리

  • docker ps: 실행 중인 Docker 컨테이너 목록 보기
  • docker images: 로컬에 있는 Docker 이미지 목록 보기

2. Docker 이미지 Build 및 Push

Docker 이미지는 컨테이너를 실행하기 위한 코드와 설정을 포함하는 템플릿입니다.

Dockerfile 작성

Dockerfile은 Docker 이미지 생성을 위한 템플릿입니다.

FROM openjdk:11-jdk
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
  • FROM: 베이스 이미지 지정 (예: openjdk:11-jdk)
    • 다른 베이스 이미지로 교체할 수 있으며, Java 프로젝트에는 OpenJDK를 주로 사용
  • COPY: 호스트 파일을 컨테이너 파일 시스템으로 복사
    • COPY <src> <dest> 형식으로 작성
  • ENTRYPOINT: 컨테이너 시작 시 실행될 명령어 지정
    • 예: java -jar 명령으로 JAR 파일 실행
  • ARG: 변수 선언 및 사용
    • JAR 파일 경로를 빌드 시 동적으로 지정 가능

⚙️ Docker 이미지 빌드

docker build -t {본인 Docker Hub ID}/{Docker Hub 레포지토리 이름} .
  • Dockerfile을 읽고 이미지를 생성하여 로컬에 저장

🛠️ 명령어 요약

  • docker images: 만들어진 이미지 확인
  • docker push {본인 Docker Hub ID}/{Docker Hub 레포지토리 이름}: 원격 저장소로 이미지 Push
  • docker run -p 8080:8080 {이미지 이름}: Docker 컨테이너 실행
  • nohup docker run -p 8080:8080 {이미지 이름} 2>&1 &: 백그라운드 실행
  • docker ps: 실행 상태 확인

💡 주의: 빌드 시 Docker Hub 레포지토리 이름과 일치하도록 설정


3. Docker로 웹 서버 실행 (AWS EC2 - Ubuntu)

1. EC2에서 Docker 설치

EC2 인스턴스 내에서 Docker를 설치하고 실행 환경을 설정합니다.

sudo apt-get update && \
    apt-get -y install apt-transport-https \
      ca-certificates \
      curl \
      gnupg2 \
      jq \
      software-properties-common && \
    curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
    add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
      $(lsb_release -cs) \
      stable" && \
    apt-get update && \
    apt-get -y install docker-ce

docker --version  # 설치 확인

2. Docker 로그인

  • docker login: Docker Hub 계정으로 로그인

❌ Permission Denied 문제 해결:

# 사용자 그룹 추가
sudo usermod -aG docker ${USER}
newgrp docker  # 그룹 변경 사항 활성화

# or /var/run/docker.sock 접근 권한 허용 (권장 X)
sudo chmod 666 /var/run/docker.sock

3. Docker 실행

Docker 컨테이너를 실행하여 애플리케이션을 배포합니다.

docker run -p 8080:8080 {본인 Docker Hub ID}/{Docker Hub 레포지토리 이름}
nohup docker run -p 8080:8080 {본인 Docker Hub ID}/{Docker Hub 레포지토리 이름} 2>&1 &
  • 명령어 실행 시 원격 저장소의 이미지를 가져와 웹 서버 실행

Comments