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

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

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

AWS EC2 인스턴스를 생성하고 Docker를 활용하여 애플리케이션을 배포하는 방법을 정리한 가이드입니다.

AWS EC2: 클라우드 환경에서 가상 서버를 제공하는 서비스로, 원하는 운영 체제를 선택하여 손쉽게 서버를 구축할 수 있습니다.

Docker: 컨테이너 기술을 활용하여 애플리케이션을 포장하고 배포하는 도구로, 실행 환경을 일관되게 유지할 수 있습니다.

이 문서를 통해 EC2 인스턴스 생성부터 Docker를 이용한 배포까지의 전 과정을 단계별로 학습할 수 있습니다.

1. AWS EC2 인스턴스 생성하기

  • EC2 인스턴스 생성 방법
  • 인스턴스 설정 (OS, 키 페어, 스토리지 등)

2. Docker 사용하기 (Mac)

  • Docker 설치하기 (Local - Mac)
  • Docker 이미지 빌드 및 Push
  • 🚀 Docker로 웹 서버 실행 (AWS EC2)

3. EC2에서 Docker 설치 및 실행

  • Docker 컨테이너를 이용한 애플리케이션 배포

AWS EC2 인스턴스 생성하기

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

Elastic IP를 사용하여 EC2와 연결하면 부과되지 않는 걸로 알고 있습니다. 단, Elastic IP를 만들고 연결을 해놓지 않으면 요금 부과가 됩니다.

1. 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 홈페이지에서 회원가입 후 로그인: 2가지 방법
    • Docker 앱에서 로그인
    • 명령어로 로그인

(1) Docker 앱에서 로그인

  • 도커 앱 실행하여 로그인

(2) 💻 명령어 로그인

docker login
  • username: 회원가입 시 입력한 정보 (우측 상단 프로필에서 확인 가능)
  • password: 회원가입 시 입력한 정보 (구글 계정은 홈페이지에서 비밀번호 변경 필요)

🔑 구글 계정 사용 시 비밀번호 설정: 구글 계정 같은 경우는 패스워드 지정을 하지 않았으니 홈페이지 접속해서 패스워드를 변경해주면 됩니다.

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

Docker 명령어 간단 정리

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

2. Docker 이미지 Build 및 Push

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

Dockerfile 작성

Dockerfile은 Docker 이미지 생성을 위한 템플릿입니다.
Dockerfile이 위치할 경로는 build 명령어를 수행할 위치입니다. 즉, 프로젝트 루트 경로에 일반적으로 위치시킵니다.

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 Hub 레포지터리는 도커 홈페이지 로그인해서 만들어야 합니다.

https://hub.docker.com/ 접속 -> Repositories 탭 -> Create a repository 클릭

🛠️ 명령어 요약

  • 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  # 설치 확인

💡 주의: E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) 와 같은 에러가 발생할 수 있습니다 sudo apt-get update gpt 키가 deprecation 됐다는 뜻인데.. 권한이 부족하다는 뜻. 이럴 경우 그냥 다음 줄 부터 앞에 sudo를 붙혀서 하나씩 실행합니다. 사실 왜 deprecation이 됐고, 해결하고 넘어야 하지만,,, 원인은 다음과 같습니다.

GPT : "이 오류는 Docker 레포지토리의 GPG 키가 더 이상 /etc/apt/trusted.gpg에 저장되지 않아야 한다는 경고입니다. Ubuntu는 보안 강화를 위해 GPG 키를 /etc/apt/keyrings/에 저장하도록 변경했습니다." 해결 방식도 GPT가 알려주지만, 아직 해보지 않았다.

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 &
  • 명령어 실행 시 원격 저장소의 이미지를 가져와 웹 서버 실행

접속 확인

내가 배포한 Spring Web Application을 접속해서 확인하고 싶다면, 퍼블릭 ipv4(or Elastic IP) 가 할당되어 있어야 합니다.

접속 url : http://{Elastic IP or IPv4 or 할당 도메인}:8080/

Comments