Docker & Kubernetes

HelloPong·2025년 7월 4일

공부

목록 보기
2/39
post-thumbnail

🚢 Docker란?

  • 애플리세이션틀 컨테이너(Container) 라는 격리된 환경에서 실행시키는 기술
  • 개발 -> 테스트 -> 운영까지 동일한 실행 환경을 보장

🐳 Docker의 핵심 개념

📦 이미지(Image)

  • 컨테이너를 생성하기 위한 템플릿 (스냅샷)

🗂️ Dockerfile

  • 이미지를 빌드하기 위한 설정 스크립트

🧳컨테이너(Container)

  • 이미지로부터 실행된 실제 인스턴스

동작 원리

📝 Dockerfile ➜ 🔨 docker build ➜ 📦 Image ➜ ▶️ docker run ➜ 🏃 Container


🗂️ 리눅스 컨테이너 (Linux Container)

도커는 리눅스 컨테이너를 누구나 쉽게 쓸 수 있게 만든 표준 툴셋이다.
리눅스 컨테이너에 대해서 알아보자

📌 정의

하나의 리눅스 머신 안에서 애플리케이션 실행환경을 가볍게 여러개 쪼개서 격리하는 기술

✏️ 필요한 이유

  • 서버 한대에 여러 앱을 돌리면 서로 간섭
  • VM(Virtual Machine)으로도 분리 가능했지만 너무 무거움
  • 컨테이너로 커널(핵심 OS)는 공유하고, 앱 실행환경만 가상으로 격리

🧩 핵심

  • Namespace (네임스페이스) : 서로 보이지 않게 격리
    • 프로세스(PID) 네임스페이스 : 서로 다른 PID 할당
    • 네트워크 네임스페이스 : 가상 네트워크 분리
    • 마운트 네임스페이스 : 파일시스템 경로 분리
  • cgroup (Control Group)
    • 리소스 사용 제한
[ Linux Host OS ]
 └─ Linux Kernel (Namespace + cgroup)
     ├─ Container 1 (nginx 실행)
     ├─ Container 2 (mysql 실행)
     ├─ Container 3 (api 서버 실행)

💡 리눅스 컨테이너 vs VM 비유

🔍리눅스 컨테이너가상머신(VM)
🏠 비유한 집(커널)에서 방만 여러 개 만든 것집 자체를 통째로 복제해서 여러 채 만든 것
📦 무게커널은 공유하니까 가볍다OS가 하나씩 따로라 무겁다
⚡ 속도프로세스 수준이라 초 단위로 실행OS 부팅까지 걸려서 느리다

🗃️ Docker Compose

📌 정의

여러 컨테이너를 한 번에 정의하고 실행하는 YAML 기반 도구

비교 항목🐳 Docker Compose☸️ Kubernetes
📌 목적여러 컨테이너를 로컬/개발/테스트용으로 간단하게 관리컨테이너를 대규모 분산 환경에서 자동 운영
⚙️ 스케일링docker-compose up --scale로 수동 확장 가능, 자동은 안 됨자동 스케일링(HPA), 롤링 업데이트, 롤백 지원
🔄 상태 복구컨테이너 실패 시 자동 재시작 일부 지원 (depends_on 제한적)파드 자동 복구, Self-Healing
🗂️ 구성 파일docker-compose.yml여러 YAML 매니페스트(Deployment, Service, Ingress 등)
🧩 네트워킹단일 호스트(로컬 bridge 네트워크) 중심클러스터 전역 Overlay 네트워크
☁️ 멀티 호스트 지원기본적으로는 단일 호스트멀티 노드 클러스터, 클라우드 네이티브
🚀 운영환경로컬/개발에 최적화프로덕션(대규모, 무중단 배포) 필수

☸️ Kubernetes 란?

대규모 컨테이너(Pod)를 자동 배포, 운영, 복구, 확장하는 오케스트레이션 플랫폼

🚫 컨테이너만 쓸 때☸️ 쿠버네티스 쓸 때
Pod 다운 시 직접 재시작죽으면 자동으로 다시 띄움 (Self-Healing)
새 버전 배포 중 다운타임 발생롤링 업데이트로 단계적 교체, 장애 시 롤백
트래픽 폭주하면 수동으로 scaleHPA로 CPU/메모리 기반 오토스케일링
컨테이너 IP 바뀌면 통신 오류Service가 IP를 고정하고 로드밸런싱
시크릿/환경변수 직접 관리ConfigMap/Secret으로 안전하게 주입
클라우드 연동 직접 셋팅관리형 K8s(EKS, GKE, AKS)로 부담 ↓

🔗 쿠버네티스 핵심 오브젝트

오브젝트설명
🧩 Pod쿠버네티스에서 관리하는 최소 실행 단위. 보통 하나의 Pod에 하나의 컨테이너가 들어있지만, 사이드카 패턴 등으로 여러 개도 가능!
📑 Deployment“내 Pod 3개로 유지해!” 같은 원하는 상태를 선언하고 자동으로 유지하게 함. 롤링 업데이트, 롤백까지 자동.
🔗 ServiceIP가 계속 바뀌는 Pod들을 고정 주소로 묶고 로드밸런싱해줌. 클러스터 내부/외부 접근 모두 담당!
🌍 Ingress외부 트래픽을 Service로 라우팅. 도메인 기반 라우팅 & TLS(HTTPS) 설정도 가능!

Pod -> Deployment로 유지 -> Service로 묶고 -> Ingress로 외부로 공개

🧩 Pod

  • 쿠버네티스에서 관리하는 가장 작은 배포 단위
  • 하나 이상의 컨테이너를 묶어 하나의 논리 단위로 실행
    -> 컨테이너 단일 실행만 있으면 로그 수집, 모니터링 등 사이드카 패턴 같은 부가기능 불가능

📑 Deployment

Pod를 원하는 상태로 선언하고 지속적으로 유지하도록 관리하는 쿠버네티스 리소스

역할설명
📋 선언적 상태 유지replicas: 3이라면 항상 3개 Pod 유지
🔄 롤링 업데이트새 이미지 배포 시 다운타임 없이 단계적 교체
🔙 롤백장애 발생 시 이전 버전으로 즉시 복원
🌀 스케일링replicas 숫자만 바꿔도 수평 확장/축소 가능
  • 몇개로, 어떤 버전으로 유지할지 쿠버네티스에서 선언하는 매니저

🔗 Service

동적 Pod들을 하나로 묶고, 고정 IP/도메인/로드밸런싱을 제공

타입설명
📡 ClusterIP클러스터 내부 통신용 (기본)
🌐 NodePort클러스터 외부에서 Node IP + Port로 접근 가능
☁️ LoadBalancer클라우드 환경에서 외부 로드밸런서와 연동 (AWS ELB 등)
🔗 HeadlessService DNS만 제공, 직접 Pod로 접근 (StatefulSet에서 사용)

🌍 Ingress

  • 외부 클라이언트 트래픽을 Service로 도메인 기반으로 라우팅하는 진입점
  • 로드밸런싱 + 리버스 프록시 + TLS 설정
기능설명예시
🌐 도메인 라우팅하나의 IP에 여러 도메인을 연결해 각기 다른 Service로 트래픽 분기api.example.com → API Service
www.example.com → Web Service
🔒 TLS 종단 처리HTTPS 인증서를 Ingress에서 관리하고 SSL 연결을 종료(종단 처리)Let’s Encrypt 자동 발급 연동
🔗 리버스 프록시하나의 도메인에서 경로(path)에 따라 다른 Service로 연결/api → API Service
/static → Static Service

📢 Q&A

🐳 Docker

1️⃣ Docker 기본 개념

❓ Docker란 무엇인가요?

컨테이너(Container)라는 격리된 실행환경에서 애플리케이션을 구동해
개발 → 테스트 → 운영까지 동일한 환경을 보장하는 가상화 기술입니다.

❓ 이미지(Image)와 컨테이너(Container)의 차이점은?

이미지는 컨테이너 실행에 필요한 템플릿(스냅샷)이고,
컨테이너는 그 이미지를 실행한 실제 인스턴스입니다.


2️⃣ Docker 동작 원리 & 장점

❓ Docker가 가상머신(VM)과 다른 점은?

VM은 OS 단위 가상화라 무겁고 느린 반면, Docker는 커널을 공유하고
앱 실행환경만 격리해 가볍고 실행 속도가 빠릅니다.

❓ 리눅스 컨테이너가 뭔가요?

리눅스 커널의 네임스페이스와 cgroup 기능을 활용해 프로세스를 서로 격리하고,
리소스를 제한하여 동일 OS 안에서 여러 격리된 앱 환경을 운영하는 기술입니다.

❓ 포트 포워딩은 왜 필요한가요?

컨테이너는 기본적으로 호스트와 네트워크가 격리되어 있어 외부에서 접근할 수 없습니다.
-p 옵션으로 호스트 포트를 컨테이너 포트에 연결해 접근 경로를 열어줍니다.


3️⃣ Docker Compose & 실무 활용

❓ Docker Compose는 왜 사용하나요?

여러 컨테이너(웹 서버, DB 등)를 한 번에 정의하고 실행할 수 있어
MSA 개발과 테스트 환경 구축이 간편해집니다.

❓ Dockerfile과 Compose의 관계는?

Dockerfile로 이미지를 빌드하고, docker-compose.yml로
그 이미지를 기반으로 여러 컨테이너를 정의하고 실행합니다.


☸️ Kubernetes

1️⃣ 쿠버네티스 기본 개념

❓ Kubernetes란 무엇인가요?

수백~수천 개의 컨테이너(Pod)를 자동으로 배포, 운영, 복구, 확장하는
오케스트레이션 플랫폼입니다.

❓ 왜 Kubernetes를 써야 하나요?

컨테이너만으로는 장애 복구, 스케일링, 롤링 업데이트, 롤백 등을 수동으로 해야 해
운영이 어렵습니다. Kubernetes는 이걸 자동화해 무중단 서비스를 실현해줍니다.


2️⃣ 쿠버네티스 구조 & 핵심 오브젝트

❓ Pod란 무엇인가요?

쿠버네티스에서 관리하는 가장 작은 실행 단위로, 하나 이상의 컨테이너와
공유 네트워크/볼륨으로 구성됩니다.

❓ Deployment란 무엇인가요?

Pod의 원하는 상태(예: 3개로 유지)를 선언하면, 쿠버네티스가
ReplicaSet으로 이를 자동으로 유지하고 롤링 업데이트/롤백을 지원합니다.

❓ Service란 무엇인가요?

IP가 바뀌는 Pod들을 고정 IP/도메인으로 묶어 안정적인 통신과 로드밸런싱을 제공합니다.

❓ Ingress란 무엇인가요?

외부 트래픽을 도메인/경로 기반으로 Service에 연결하고, HTTPS까지 처리하는
클러스터 진입점입니다.


3️⃣ 실무 시나리오 질문

❓ Pod가 죽으면 어떻게 되나요?

ReplicaSet이 원하는 개수와 실제 개수를 비교하고, 부족하면 즉시 새 Pod를 생성합니다.

❓ 트래픽이 갑자기 폭주하면 어떻게 대응되나요?

Horizontal Pod Autoscaler(HPA)가 CPU/메모리 사용량을 감시해
자동으로 Pod 수를 늘려줍니다.

❓ 쿠버네티스가 Docker Swarm보다 나은 점은?

대규모 클러스터에서 장애 복구, 롤링 업데이트, 오토스케일링 같은 고급 기능을
훨씬 안정적으로 지원하며, 클라우드 관리형 서비스(EKS/GKE/AKS)가 풍부해 운영 비용이 절감됩니다.

☸️쿠버네티스 삼성 임직원 특강

수 많은 컨테이너들을 자동으로 관리하는 Container Orchestrator

Kubernetes가 해결하는 문제

  • 컨테이너의 배포/확장/복구 자동화
  • 무중단 배포, 롤백
  • 서비스 디스커버리, 로드밸런싱
  • 리소스 최적화, 자동 스케일링, 셀프 힐링

👍용어 설명

Container

  • 실행환경 [어플리케이션, Library, Config…]
    • 이식성 (Portability) : 어디서든 동일하게 실행된다
    • 격리성 (Isolation) : 독립적이고 안전하게 실행된다 → 다른 컨테이너에 영향 X
    • 경량성 (Lightweght) : 빠르게 실행 → 컨테이너는 OS가 없어서 부팅속도가 빠르다!

Pod

  • 쿠버네티스에서 컨테이너가 배포되는 가장 작은 단위

Ingress

  • HTTP/HTTPS 요청을 클러스터 외부에서 내부로 라우팅

HPA (Horizontal Pod Autoscaler)

  • 쿠버네티스에서 애플리케이션 부하에 따라 Pod의 개수를 자동으로 늘리거나 줄여주는 컨트롤러

NA (Node Autoscaler)

  • Cluster Autoscaler 라고 불리는 개념, 클러스터의 전체 리소스가 부족하면 새로운 Node를 클라우드에서 자동으로 프로비저닝하고, 불필요하게 리소스를 낭비하는 Node는 Pod들을 다른 Node로 옮긴 뒤 Node를 삭제해서 비용을 절감

3-Tier Architecture

애플리케이션의 기능을 논리적으로 분리된 세 개의 개층으로 나누어 구성하는 클라이언트-서버 아키텍쳐

  • 비지니스 레이어 자체가 너무 커져버리면 3-Tier Architecture 로 불가능해짐

3-Tier Architecture in Kubernetes

Container 기반 Web Service Architecture

VPC

  • 모든 서비스가 구성
  • 논리적인 공간

Subnet > Kubernetes Engin

  • Ingress : 외부로 노출시킴 > Load Balancer
  • Web Server
  • Application Server

Monolithic vs MSA Architecture

MONOLITHIC

  • 데이터 Access 까지 한번에 처리하는 방식

MicroService

Microservice Architecture in Kubernetes

Data Ops Architecture

Cloud Native

  • 개발 할 때 항상 염두해둬야할 철학 전체
  1. 빠른 혁신 : 시장이 빠르게 변하는 만큼 빠르게 변화하고 대응해야함
  2. 유연한 확장성 : 각 서비스 별로 유연한 확장
  3. 높은 가용성 : 버그상황이 다른곳으로 확장되면 안됨 -> 고립성!
  4. 운영 효율성 : 반드시 자동화, 배포, 롤백 등 운영 최소화

0개의 댓글