🧱 컨테이너 관리 초급 요약
✅ 1. 컨테이너란?
- 애플리케이션을 작고, 독립된 단위로 묶는 기술.
- 내부에 실행파일, 설정파일, 라이브러리까지 포함 → 어디서나 동일하게 실행 가능.
- 대표 도구: Docker
👉 예: 앱을 설치하려면 이것저것 환경 맞추는 게 힘들지만, Docker는 “앱 통조림”처럼 필요한 걸 다 넣어서 실행하는 방식이야.
✅ 2. 왜 컨테이너 관리가 필요할까?
컨테이너가 많아지면 누가 언제, 어디서 실행되는지 관리하기 어려워짐
→ 그래서 자동으로 관리해주는 시스템이 필요해!
👉 이걸 도와주는 게 바로 컨테이너 오케스트레이션 도구(Kubernetes)
✅ 3. 컨테이너 관리에 필요한 주요 개념
항목설명
| 이미지(Image) | 컨테이너를 만들기 위한 ‘설치 파일 묶음’ |
| 컨테이너(Container) | 실행 중인 이미지 |
| Pod | Kubernetes에서 컨테이너를 담는 최소 단위 |
| 노드(Node) | 컨테이너를 실행하는 컴퓨터 |
| 클러스터(Cluster) | 여러 노드가 모인 관리 단위 |
| 레이블(Label) | 컨테이너에 태그처럼 붙이는 정보 (선택/관리 용이) |
✅ 4. 대표 도구들
기능도구
| 컨테이너 실행 | Docker |
| 대규모 운영 관리 | Kubernetes |
| 이미지 저장소 | Docker Hub |
| 로그 및 모니터링 | Grafana, Prometheus |
| 보안 검사 | Trivy |
✅ 5. 컨테이너 관리 흐름
plaintext
[개발자가 코드 작성]
↓
[Docker로 이미지 생성]
↓
[이미지를 Docker Hub에 저장]
↓
[Kubernetes가 이미지를 가져와 컨테이너 실행]
↓
[자동 확장, 복구, 상태 확인 등 관리]
✅ 6. 알아두면 좋은 기초 용어
- YAML: Kubernetes 설정 파일 작성할 때 쓰는 형식
- kubectl: 쿠버네티스를 제어하는 명령어 도구
- Deployment: 컨테이너를 몇 개 실행할지 관리하는 설정
🔁 예시 시나리오 (입문형)
“쇼핑몰 서버를 Docker로 만들고 Kubernetes로 3개 실행되게 설정해요. 하나 죽으면 자동으로 다시 살아나요.”
"쇼핑몰 서버를 Docker로 만들고 Kubernetes로 3개 실행되게 하고, 하나가 죽으면 자동으로 복구되게 하는 실습"을 10% 수준으로 단계별 설명해줄게.
(기초부터 Kubernetes 자동 복구까지 포함)
✅ 목표
- 쇼핑몰 웹서버를 Docker 컨테이너로 만들고
- Kubernetes에서 3개 Pod로 실행
- Pod 하나가 죽으면 자동으로 다시 생성됨
🧱 1단계: Dockerfile로 웹 서버 만들기
Dockerfile
# 📄 Dockerfile
FROM nginx:latest
COPY ./index.html /usr/share/nginx/html/index.html
FROM nginx:latest
COPY ./index.html /usr/share/nginx/html/index.html
html
<!-- 📄 index.html -->
<h1>내 쇼핑몰에 오신 걸 환영합니다!</h1>
<h1>내 쇼핑몰에 오신 걸 환영합니다!</h1>
✅ 빌드 & 테스트
bash
docker build -t myshop-web .
docker run -d -p 8080:80 myshop-web
docker run -d -p 8080:80 myshop-web
🧱 2단계: Docker Hub에 이미지 올리기 (공개 허용 시)
bash
docker tag myshop-web YOUR_DOCKER_ID/myshop-web
docker push YOUR_DOCKER_ID/myshop-web
docker push YOUR_DOCKER_ID/myshop-web
※ Docker Hub 계정이 필요해요.
🧱 3단계: Kubernetes에서 배포
📄 deployment.yaml
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myshop-web
spec:
replicas: 3 # 👉 Pod 3개 실행
selector:
matchLabels:
app: myshop-web
template:
metadata:
labels:
app: myshop-web
spec:
containers:
- name: myshop-web
image: YOUR_DOCKER_ID/myshop-web # 👉 본인 Docker Hub 이미지 주소
ports:
- containerPort: 80
kind: Deployment
metadata:
name: myshop-web
spec:
replicas: 3 # 👉 Pod 3개 실행
selector:
matchLabels:
app: myshop-web
template:
metadata:
labels:
app: myshop-web
spec:
containers:
- name: myshop-web
image: YOUR_DOCKER_ID/myshop-web # 👉 본인 Docker Hub 이미지 주소
ports:
- containerPort: 80
✅ 배포 명령어
bash
kubectl apply -f deployment.yaml
✅ 상태 확인
bash
kubectl get pods
3개가 떠야 하고, 이름은 myshop-web-XXXX 형식일 거예요.
🧱 4단계: 하나 죽여보기 (자동 복구 테스트)
bash
kubectl delete pod <pod-name>
예시: kubectl delete pod myshop-web-7c58bcdf44-vqf5s
🔁 결과: Pod가 삭제되어도 Kubernetes가 자동으로 다시 생성함
🧱 5단계: 서비스로 외부 노출
📄 service.yaml
yaml
apiVersion: v1
kind: Service
metadata:
name: myshop-service
spec:
selector:
app: myshop-web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort # 👉 테스트용 외부 노출
kind: Service
metadata:
name: myshop-service
spec:
selector:
app: myshop-web
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort # 👉 테스트용 외부 노출
✅ 적용
bash
kubectl apply -f service.yaml
kubectl get svc
kubectl get svc
EXTERNAL-IP:PORT 정보로 접속하면 브라우저에서 쇼핑몰 화면이 나올 거예요.
✅ 요약
기능구성
| 쇼핑몰 서버 | Nginx + HTML |
| 컨테이너 수 | 3개 (replicas 설정) |
| 장애 복구 | Kubernetes가 자동 재시작 |
| 외부 접속 | NodePort Service 사용 |
실습 환경 없이 연습만 하고 싶다면 모의 문제나 구성도 설명으로도 도와줄게.
다음은 Helm으로 배포하는 방식도 알려줄까?