Kubernetes 여정 파트 1: 왜 Docker인가?

발행: (2025년 12월 22일 오후 09:57 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

Kubernetes 학습 시리즈의 첫 번째 포스트에 오신 것을 환영합니다! 복잡한 내용에 들어가기 전에, 모든 것을 가능하게 만든 기본 블록인 Docker에 대해 이야기해야 합니다.

소프트웨어 개발을 해본 적이 있다면 “하지만 내 머신에서는 동작해요!” 라는 말을 들어봤을 것입니다.

왜 Docker인가?

새로운 기능을 막 마무리하고 코드가 버전 관리 시스템(VCS)에 병합되었다고 가정해 보세요. 빌드 파이프라인이 아티팩트를 생성하고 이를 서버에 배포합니다.

  • Dev Server: 완벽히 동작합니다. ✅
  • Test Server: 기대대로 동작합니다. ✅
  • Production: 배포했는데 빌드가 실패합니다. ❌

무슨 일이 일어났나요?

가장 흔한 원인은 환경 설정 오류 혹은 개발·테스트 환경에는 있었지만 프로덕션에는 없는 의존성 누락입니다. 전통적으로는 전체 환경이 아니라 아티팩트만을 배포할 수 있었습니다. 여기서 컨테이너가 등장합니다.

Docker가 해결한 방법

Docker는 코드 실행에 필요한 모든 것—라이브러리, 의존성, 설정, 심지어 기본 OS 바이너리까지—를 하나의 단위로 패키징합니다. 이 덕분에 환경 관련 오류가 거의 발생하지 않게 됩니다.

컨테이너란?

컨테이너는 애플리케이션 코드, 라이브러리, 런타임 의존성을 포함한 격리된 경량 샌드박스 환경이며, 호스트 운영 체제와 무관합니다.

  • 핵심 차이점: 가상 머신(VM)과 달리 컨테이너는 전체 운영 체제를 패키징하지 않습니다. 최소한의 바이너리만 포함하고 호스트 OS 커널을 사용하므로 빠르고, 이식성이 뛰어나며, 자원 효율적입니다.

정의: Docker는 이러한 컨테이너를 어디서든 빌드하고, 배포하고, 실행할 수 있게 해 주는 플랫폼입니다.

작동 방식: Dockerfile → 런타임

애플리케이션을 컨테이너화하려면 Dockerfile, 이미지, 컨테이너라는 세 가지 주요 요소를 다룹니다.

Dockerfile

Dockerfile은 명령어 목록이 적힌 평문 파일입니다. docker build를 실행하면 이 명령어들을 읽어 이미지가 생성됩니다.

이미지

Docker 이미지란 애플리케이션의 스냅샷으로, 실행에 필요한 모든 것이 포함됩니다. 이미지는 레지스트리(버전 관리 시스템과 유사) 에 저장되어 모든 환경이 docker pull로 동일한 이미지를 가져올 수 있습니다.

컨테이너

docker run을 실행하면 이미지가 실제 실행 인스턴스로 변환되어 컨테이너가 생성됩니다.

Docker 아키텍처

Docker 아키텍처는 세 가지 주요 구성 요소로 이루어집니다.

  1. 클라이언트 – 코드를 작성하는 곳(예: 노트북).
  2. Docker 데몬(dockerd) – API 요청을 듣고, 이미지 관리 및 컨테이너 실행을 담당하는 “두뇌”.
  3. 레지스트리 – 이미지의 원격 저장소.

Docker 명령의 라이프사이클

# Dockerfile로부터 이미지 빌드 (클라이언트 → 데몬)
docker build -t myapp:latest .

# 로컬 이미지를 원격 레지스트리에 푸시
docker push myrepo/myapp:latest

# 대상 환경에서 이미지 풀
docker pull myrepo/myapp:latest

# 풀한 이미지로 컨테이너 실행
docker run -d -p 80:80 myrepo/myapp:latest

요약

Docker를 사용하면 개발 환경과 프로덕션 환경이 동일해집니다. 내 머신에서 동작한다면 서버에서도 동작합니다. 왜냐하면 코드와 함께 “내 머신”(컨테이너)을 배포하기 때문입니다.

이제 컨테이너가 왜 필요한지 이해했으니, 다음 단계는 여러 컨테이너를 한 번에 관리하는 방법을 배우는 것입니다. 바로 여기서 Kubernetes가 등장합니다.

파트 2를 기대해 주세요!

Back to Blog

관련 글

더 보기 »

DevOps를 위한 Linux 기초 – Epic

개요 이 에픽은 DevOps 작업에 필요한 Linux 기본기를 구축하는 데 초점을 맞춥니다. 이는 학문적 주제가 아니라 운영 도구입니다. 목표 끝까지...

초보자를 위한 CI/CD

!CI/CD 초보자를 위한 커버 이미지https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3...