강의/Docker & Kubernetes : 실전 가이드

[131-140] AWS EC2에 도커 컨테이너 배포하기

JJIMJJIM 2025. 4. 13. 14:42
728x90
반응형
SMALL

 

AWS EC2에 도커 컨테이너 배포하기

배포 프로세스 개요

  1. 이미지 구축: 로컬 환경에서 도커 이미지 빌드
  2. 이미지 공유: Docker Hub에 이미지 푸시
  3. 서버 설정: AWS EC2 인스턴스 생성 및 구성
  4. 도커 설치: EC2 인스턴스에 도커 설치
  5. 컨테이너 실행: EC2에서 이미지 풀 및 컨테이너 실행
  6. 포트 설정: 보안 그룹 구성으로 웹 접근 허용

 

AWS EC2 인스턴스 설정

인스턴스 생성

  1. EC2 대시보드에서 "새 인스턴스 시작" 선택
  2. Amazon Linux AMI 선택 (기본 운영체제)
  3. VPC 설정 및 보안 그룹 생성
  4. 키 페어 생성 및 다운로드 (SSH 연결용)
    • 키 파일은 안전하게 보관할 것
    • 키 파일은 한 번만 다운로드 가능

 

SSH 연결

1. Windows

  • WSL2 사용 또는
  • PuTTY 설치

2. macOS/Linux

  • 터미널에서 직접 SSH 명령 사용

3. 키 파일 권한 설정

chmod 400 키파일.pem

 

4. 연결

ssh -i 키파일.pem ec2-user@인스턴스IP

 

**cmod 400 의미?

chmod 400 키파일.pem 명령에서 400은 파일 권한을 나타내는 숫자 코드입니다.
이 숫자 코드의 의미는 다음과 같습니다:

첫 번째 숫자 4: 소유자에게 읽기(read) 권한 부여
두 번째 숫자 0: 그룹에 아무 권한도 부여하지 않음
세 번째 숫자 0: 다른 모든 사용자에게 아무 권한도 부여하지 않음

결과적으로 400은 "파일 소유자만 읽을 수 있고, 다른 모든 사용자는 접근할 수 없음"을 의미합니다.
SSH 키 파일에 이런 제한적인 권한을 설정하는 이유는 보안 때문입니다.
SSH 키는 서버에 접근할 수 있는 민감한 정보이므로,
파일 소유자만 읽을 수 있게 하고 다른 사용자는 접근할 수 없도록 제한하는 것이 좋습니다.
실제로 SSH 클라이언트는 키 파일의 권한이 너무 개방적일 경우
보안상의 이유로 해당 키 사용을 거부하기도 합니다.

 

 

 

EC2에 도커 설치

# 패키지 업데이트
sudo yum update -y

# 도커 설치
sudo yum -y install docker

# 도커 서비스 시작
sudo service docker start

# ec2-user에 도커 권한 부여
sudo usermod -a -G docker ec2-user

# 재부팅 시 도커 자동 시작 설정
sudo systemctl enable docker

 

 

이미지 배포 접근 방식

1. 소스코드 배포 방식

  • 소스코드와 Dockerfile을 EC2로 복사
  • EC2에서 이미지 빌드
  • 불필요한 단계가 많음

2. 이미지 배포 방식 (권장)

  • 로컬에서 이미지 빌드
  • Docker Hub에 푸시
  • EC2에서 이미지 풀
  • 효율적이고 간단함

 

로컬 이미지 Docker Hub에 푸시하기

1. 이미지 빌드

docker build -t node-dep-example-1 .

 

2. 이미지 태그 설정

docker tag node-dep-example-1 사용자명/node-example-1

 

3. Docker Hub 로그인

docker login

 

4. 이미지 푸시

docker push 사용자명/node-example-1

 

 

 

EC2에서 컨테이너 실행

1. 이미지 다운로드

sudo docker pull 사용자명/node-example-1

 

2. 컨테이너 실행

sudo docker run -d --rm -p 80:80 사용자명/node-example-1

 

3, 컨테이너 상태 확인

sudo docker ps

 

 

 

보안 그룹 설정 (중요!)

  1. EC2 대시보드 → 보안 그룹 → 인스턴스 연결된 보안 그룹 선택
  2. 인바운드 규칙 편집
  3. HTTP(80) 포트 추가 → 소스를 "Anywhere"로 설정
  4. 이제 퍼블릭 IP를 통해 웹 애플리케이션 접근 가능

 

 

컨테이너 관리 및 업데이트

1. 코드 변경 및 새 이미지 빌드

docker build -t node-dep-example-1 .
docker tag node-dep-example-1 사용자명/node-example-1
docker push 사용자명/node-example-1

 

2. EC2에서 업데이트

# 최신 이미지 명시적 다운로드
sudo docker pull 사용자명/node-example-1

# 기존 컨테이너 중지
sudo docker stop 컨테이너이름

# 새 컨테이너 시작
sudo docker run -d --rm -p 80:80 사용자명/node-example-1

 

 

이 접근 방식의 장단점

장점

  • 완전한 제어 권한
  • 설정 유연성
  • 상세한 구성 가능

단점 (자체 관리의 책임)

  • 서버 관리 책임 (OS 업데이트 등)
  • 보안 관리 필요
  • 트래픽 증가 시 직접 확장 필요
  • 기술적 지식 요구됨

대안: 관리형 서비스

  • AWS ECS (Elastic Container Service)
  • Microsoft Azure Container Instances
  • Google Cloud Run

이러한 관리형 서비스는:

  • 서버 관리 자동화
  • 보안 패치 자동 적용
  • 확장성 제공
  • 모니터링 용이
  • 책임 감소 (더 적은 통제와 함께)

 

참고: 관리형 서비스 사용 시 약간의 비용이 발생할 수 있으며, AWS 프리 티어가 적용되지 않는 경우가 많습니다. 사용 후 리소스 제거를 철저히 확인하세요.

 

 

 

참고

https://www.udemy.com/course/docker-kubernetes-2022

728x90
반응형
LIST