AWS + Docker + Jenkins 사용하기 (1)
AWS EC2에서 Docker 컨테이너를 사용하여 웹 서버를 배포하고, 젠킨스를 사용하여 자동배포 구성하기
dustjq1005
·
2024년 12월 23일
해당 글은 플랫포머 배포 스터디에서 공부한 내용을 정리한 글입니다.
AWS EC2 인스턴스 생성하기
💡 EC2 인스턴스에 대한 무료 프리티어 과금 정책 안내
주의! 요금 부과를 피하려면 EC2 생성 시 public IPv4가 할당되지 않도록 설정해야 합니다.
자동으로 IPv4가 할당되도록 체크되어 있으니 반드시 확인 후 진행하세요.
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는 애플리케이션 개발부터 배포까지 간편하게 사용할 수 있는 컨테이너 플랫폼입니다.
🌐 홈페이지 다운로드
- 🌐 Docker 공식 웹사이트에서
Docker Desktop for Mac with Apple silicon
(M1/M2 경우) 클릭 .dmg
파일 다운로드 및 실행- 회원가입 후 로그인:
- Docker 앱에서 로그인
- 명령어로 로그인
💻 명령어 로그인
docker login
- username: 회원가입 시 입력한 정보 (우측 상단 프로필에서 확인 가능)
🔑 구글 계정 사용 시 비밀번호 설정:
- 🔗 Docker Hub 접속
- 우측 상단 프로필 클릭 - My Account
- 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 레포지토리 이름}
: 원격 저장소로 이미지 Pushdocker 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 &
- 명령어 실행 시 원격 저장소의 이미지를 가져와 웹 서버 실행