728x90
반응형
SMALL
AWS EC2에 도커 컨테이너 배포하기
배포 프로세스 개요
- 이미지 구축: 로컬 환경에서 도커 이미지 빌드
- 이미지 공유: Docker Hub에 이미지 푸시
- 서버 설정: AWS EC2 인스턴스 생성 및 구성
- 도커 설치: EC2 인스턴스에 도커 설치
- 컨테이너 실행: EC2에서 이미지 풀 및 컨테이너 실행
- 포트 설정: 보안 그룹 구성으로 웹 접근 허용
AWS EC2 인스턴스 설정
인스턴스 생성
- EC2 대시보드에서 "새 인스턴스 시작" 선택
- Amazon Linux AMI 선택 (기본 운영체제)
- VPC 설정 및 보안 그룹 생성
- 키 페어 생성 및 다운로드 (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
보안 그룹 설정 (중요!)
- EC2 대시보드 → 보안 그룹 → 인스턴스 연결된 보안 그룹 선택
- 인바운드 규칙 편집
- HTTP(80) 포트 추가 → 소스를 "Anywhere"로 설정
- 이제 퍼블릭 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 프리 티어가 적용되지 않는 경우가 많습니다. 사용 후 리소스 제거를 철저히 확인하세요.
참고
728x90
반응형
LIST
'강의 > Docker & Kubernetes : 실전 가이드' 카테고리의 다른 글
[145-149] 다중 컨테이너 앱 AWS ECS 배포 정리 / EFS 볼륨 추가 (0) | 2025.04.20 |
---|---|
[141-144] AWS ECS를 사용한 배포 정리 (0) | 2025.04.14 |
[126 - 130] 도커 컨테이너 배포: 개발에서 프로덕션까지 (0) | 2025.04.11 |
[115-124] Laravel & PHP 프로젝트 도커화: 다중 컨테이너 설정 (1) | 2025.03.31 |
[114] Target 설정 (1) | 2025.03.26 |
댓글