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

    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

    댓글