Docker란? — 5W1H로 정리
누가 (Who)
Docker는 개발자, 시스템 관리자, DevOps 엔지니어 등 애플리케이션을 개발·배포·실행하는 모든 사람이 이용하는 오픈소스 플랫폼입니다.
언제 (When)
2013년 3월 처음 공개되었으며, 클라우드·마이크로서비스·CI/CD 환경에 대한 관심이 높아지면서 표준 컨테이너로 자리 잡았습니다. VM보다 가볍고 빠른 격리 환경이 필요한 경우, 또는 애플리케이션을 이식성 있게 배포할 때 사용합니다.
어디서 (Where)
Windows, Mac, Linux 등의 로컬 개발 환경, 온프레미스, AWS·GCP·Azure 등의 서버 환경은 물론 Kubernetes, ECS, Swarm 등의 컨테이너 오케스트레이션 플랫폼 위에서도 동작 가능합니다.
무엇을 (What)
컨테이너를 생성·실행·관리하는 플랫폼입니다. 컨테이너는 '애플리케이션 + 실행 환경'을 패키징하여 하나의 이미지로 구성한, 실행 가능한 인스턴스화된 환경입니다.
어떻게 (How)
Docker는 다음과 같은 흐름으로 동작합니다. 먼저 Dockerfile을 통해 애플리케이션 빌드 방법을 정의하고, 이를 기반으로 docker build를 실행하여 이미지를 생성합니다. 생성된 이미지는 docker run 명령어를 통해 컨테이너 단위로 실행됩니다. 이때 컨테이너는 호스트 OS 커널을 공유하며, 독립된 프로세스·파일시스템·네트워크 네임스페이스에서 동작합니다. 여러 컨테이너 서비스를 한 번에 구성해야 하는 경우에는 docker compose를 사용할 수 있습니다.
왜 (Why)
하이퍼바이저 기반 가상머신과 비교하여 가볍고 빠르며, 높은 이식성, 효율적인 자원 사용, 롤백과 확장의 용이성 등의 이유로 널리 사용됩니다.
기본 사용 명령어
Docker의 가장 기본적인 작업 흐름은 '이미지 빌드 → 컨테이너 실행 → 레지스트리 업로드'입니다.
# 이미지 빌드
docker build -t [docker_username]/[저장소명] [dockerfile 경로]
# 컨테이너 실행
docker run [옵션] [외부노출포트]:[컨테이너연결포트] [이미지명]
# ex) docker run -d -p 8080:80 docker/welcome-to-docker
# 이미지 목록 확인
docker image ls
# 이미지 레지스트리에 올리기
docker push [docker-username]/[저장소명]
컨테이너가 호스트 OS 커널을 공유한다는 것의 의미
Docker를 이해할 때 가장 핵심적인 개념이 바로 '커널 공유'입니다. 하나의 환경을 더 만드는 경우를 가정해 보겠습니다. VM은 각각의 환경이 자체 커널을 가지는 반면, 컨테이너는 호스트의 커널을 공유합니다.
즉, ps, fork, mount, bind 등과 같은 시스템 콜 처리 시, 기존 VM은 각각의 커널에 의해 처리되지만, Docker에서는 호스트 커널에 의해 시스템 콜이 처리됩니다. 결국 컨테이너는 호스트에서 실행되는 하나의 프로세스라고 이해하면 됩니다.
linux/amd64 이미지는 별도의 에뮬레이션(QEMU 등)이 없는 한 arm64 호스트에서 실행할 수 없습니다.여기서 한 가지 의문이 생깁니다. 그렇다면 Mac이나 Windows에서 리눅스 컨테이너를 실행하는 경우, 커널 아키텍처가 호환되지 않는데 어떻게 동작하는 걸까요?
Hypervisor vs. Container
전통적인 가상화 기술은 하이퍼바이저(Hypervisor)를 사용하여 하드웨어를 가상화하고, 그 위에 독립적인 운영체제(Guest OS)를 설치하는 방식입니다. 각 VM은 완전한 OS를 포함하기 때문에 시작 시간이 오래 걸리며 성능 손실이 발생합니다.
반면 컨테이너(Container)는 호스트 OS의 커널을 공유합니다. 애플리케이션과 그 실행에 필요한 라이브러리·바이너리만 격리된 공간에 패키징하므로, OS를 통째로 띄우는 방식이 아니어서 매우 가볍고 빠르며 효율적입니다.
| 구분 | 하이퍼바이저 가상화 (VM) | 컨테이너 가상화 (Container) |
|---|---|---|
| 격리 수준 | 하드웨어 수준 (OS 포함) | 프로세스 수준 (OS 커널 공유) |
| 크기 | 크다 (GB 단위) | 작다 (MB 단위) |
| 시작 시간 | 느리다 (수 분) | 빠르다 (수 초) |
| 오버헤드 | 크다 | 작다 |
| 핵심 기술 | Hypervisor (KVM, VMware ESXi) | Linux Cgroups, Namespaces |
- ① Docker란 무엇인가?
- ② Docker 아키텍처 — CLI부터 커널까지
- ③ Docker 이미지 빌드와 배포 — Dockerfile, 레이어, 멀티스테이지
- ④ Docker 실무 — 명령어와 컨테이너 동작 원리