[DevOps]도커 & 쿠버네티스

황성현·2025년 8월 25일

docker

목록 보기
1/1

도커의 기초1 , What is Virtual Solution?

  • 가상화 솔루션도 결국 1개의 어플리케이션에 불과함(os 기준) => os한테 자원 받고 하드웨어가 없음에도 하나의 컴퓨터 처럼 있는거임(겜도 하고 통신도 하고 서버도 되고)
  • cpu, 메모리 ,스토리지 ,네트워크 +@ 등, 컴퓨터 리소스 관장하는 OS(host)에서 리소스들을 할당받아 마치 독립된 PC의 구성 == 가상화 솔루션의 기초

도커의 기초2 , What is Virtual Machine?

  • 가상화 솔루션 위에 os 설치하려면 cd/usb에 모든 파일을 설치를 넣어서 하는데, 이거처럼 무엇을 쓰던 결국 os 설치용 모든 파일을 1개에 묶어야함 => iso 파일(압축파일)
  • 가상화 솔루션에 iso 이미지를 올려 가상화 머신으로 만듦 => window, linux , mac 등
  • 머신끼리 통신 => 네트워크 필요 => NAT 기반이면 직접 IP에 쏘는게 아니고, NAT를 무조건 경유해야함(포트포워딩 , 라우터역할) => Host only를 기반으로 하면 직접 ip 통신 서로 가능
  • socket = ip + port

그래서 도커가 뭔데?

  • 가상솔루션에 이미지 파일로 가상머신(win,linux,mac...)을 만들고 하는 과정이 도커와 정확히 동일.
  • 도커 == 가상솔루션, 도커 이미지(코드+환경) == iso 이미지 / 컨테이너 실행 == 이미지 실행
  • 다만 가상화 솔루션은 가상화 머신을 만들지만, docker는 프로세스(프로그램)를 컨테이너로 가상화( 가상화란? 어디서든 돌아갈 수 있게 추상화 했다는 말로 이해해도 무관할 듯) => 가상화 솔루션이 네트워크, cpu 등 리소스만 받으면 각각 독립적으로 돌아갈 수 있음.
  • 도커로 인해 어느 os에도 동작하는 프로그램을 정확히 가능 + 스냅샷 찍어놓고 해당 버전으로 돌려서 마구 테스트 가능 + 어디서든 동작 가능(코드+ 실행환경)
  • 컨테이너끼리 통신하려면 결국 완전 독립상태여서 네트워크(ip port=socket 필요)

DockerFile vs DockerImage

  • 🔹 1. Dockerfile

정의: Docker 이미지를 만들기 위한 설명서(레시피)

내용: 어떤 OS 기반으로 시작할지, 어떤 패키지를 설치할지, 어떤 포트/환경 변수를 쓸지, 실행할 명령어 등을 적어둔 텍스트 파일

확장자: 보통 Dockerfile (확장자 없음)

베이스 이미지 선택
FROM node:20-alpine

소스코드 복사
COPY . /app

작업 디렉토리 설정
WORKDIR /app

의존성 설치
RUN npm install

컨테이너 실행 시 실행될 명령어
CMD ["node", "index.js"]

Entry point = 외부 overwrite 불가 , cmd = 외부 overwrite 가능
우선순위 : E.P > CMD , 둘 다 있으면 EP 실행 + CMD는 Argument로

  • 🔹 2. Docker Image

정의: Dockerfile을 빌드해서 나온 결과물(실행 가능한 패키지)

형태: 여러 개의 레이어(layer)로 쌓여 있음 (각 레이어는 변경 불가, overlayfs 사용)

용도: 컨테이너를 실행할 수 있는 실제 실행 파일 덩어리

생성 방법

docker build -t myapp:1.0 .


→ 현재 디렉토리의 Dockerfile을 읽어 myapp:1.0이라는 이미지 생성
  • 🔹 3. Dockerfile vs Docker Image 차이
    이미지 만드는 레시피 / 컨테이너 실행 가능한 결과물
    텍스트 파일 / 바이너리 패키지(레이어 구조)
    쉽게 수정 가능 / 수정 불가 (새로 빌드 필요)
    직접 실행 불가 / 바로 컨테이너 실행 가능
    예시 FROM ubuntu:20.04 / ubuntu:20.04 이미지

Docker Compose vs K8s

  • 🔹 1. Docker Compose

용도: 개발 환경에서 여러 개의 컨테이너를 동시에 띄우고 관리하기 쉽게 해줌.

방식: docker-compose.yml 파일에 서비스(예: DB, 백엔드, 프론트엔드)를 정의하고 docker-compose up 한 번으로 실행.

특징:

주로 단일 서버에서 동작.

네트워크, 볼륨, 환경 변수 등을 쉽게 정의 가능.

운영보다는 개발·테스트 환경에서 많이 씀.

예시: 백엔드(Spring Boot), DB(Postgres), 캐시(Redis)를 한 번에 로컬에서 띄워서 개발.

  • 🔹 2. Kubernetes (K8s)

용도: 대규모 운영 환경(프로덕션)에서 수많은 컨테이너를 자동으로 배포, 확장, 관리.

방식: YAML 매니페스트 파일로 Pod, Deployment, Service, Ingress 등을 정의 → 쿠버네티스 클러스터가 자동으로 스케줄링, 배포, 헬스체크, 롤링 업데이트 등을 수행.

특징:

멀티 노드(여러 서버) 환경을 관리 가능.

자동 확장(autoscaling), 자동 복구(self-healing), 로드밸런싱 지원.

운영환경에 적합 → 클라우드(AWS EKS, GCP GKE, Azure AKS 등)와 잘 맞음.

복잡하지만 확장성, 안정성이 강점.

0개의 댓글