[DevOps 기본] Docker는 무엇인가?
개발자, 서버 엔지니어, 그리고 데이터 분석가라면 한 번쯤 들어봤을 단어 — Docker(도커).
하지만 정작 “도커가 정확히 뭐 하는 도구인지” 한 문장으로 설명하기는 쉽지 않습니다.
목차
이번 글에서는 Docker는 무엇인가라는 근본적인 질문을 중심으로,
컨테이너 개념부터 실제 사용 사례까지 단계별로 정리해드리겠습니다.
1) Docker란 무엇인가
Docker(도커) 는 애플리케이션을 실행하기 위한 환경 전체를 컨테이너(Container) 라는 단위로 묶어서
쉽게 배포하고 실행할 수 있게 해주는 가상화 플랫폼입니다.
쉽게 말해,
“내 컴퓨터에서 잘 되던 프로그램이 다른 사람 컴퓨터에서도 똑같이 동작하게 만들어주는 기술.”
즉, 개발자가 만든 프로그램과 그 프로그램이 의존하는 모든 라이브러리, 설정, OS 패키지를
하나의 이미지로 묶어 배포하는 것이 Docker의 핵심입니다.

2) 컨테이너(Container)의 개념
컨테이너는 “독립된 실행 공간”입니다.
리눅스의 네임스페이스(Namespace) 와 Cgroup(Control Group) 기술을 이용해
한 컴퓨터 안에서도 서로 다른 환경을 완벽히 분리할 수 있습니다.
💡 비유하자면
한 빌딩(호스트 OS) 안에 여러 개의 독립된 오피스(컨테이너)가 존재하는 것.
서로 문은 있지만, 각자의 공간 안에서는 완전히 독립적으로 일할 수 있습니다.
- OS를 공유하면서도
- 각 컨테이너는 독립적인 파일시스템, 네트워크, 프로세스를 가짐
- 몇 초 만에 실행되고, 쉽게 중지하거나 삭제할 수 있음
3) 가상머신(VM)과의 차이
가상머신(Virtual Machine)은 하드웨어 전체를 가상화해 운영체제를 통째로 실행하는 방식입니다.
반면 Docker 컨테이너는 호스트 OS 커널을 공유하므로 훨씬 가볍고 빠릅니다.
| 구분 | Docker(컨테이너) | Virtual Machine(가상머신) |
|---|---|---|
| OS 구조 | 호스트 OS 커널 공유 | 완전한 게스트 OS 필요 |
| 부팅 속도 | 수 초 이내 | 수십 초~수 분 |
| 리소스 사용량 | 매우 낮음 | CPU/RAM 고정 할당 |
| 실행 단위 | 컨테이너 | VM 전체 |
| 이미지 크기 | 수백 MB | 수 GB 이상 |
| 배포 속도 | 매우 빠름 | 느림 |
| 용도 | 개발, 테스트, 배포 | 완전한 OS 격리, 보안 실험 |
✅ 결론:
Docker = “가벼운 가상화 + 자동화된 배포 시스템”
4) Docker의 핵심 구성요소
Docker는 크게 3가지 요소로 구성됩니다:
1️⃣ Docker Image (이미지)
- 실행에 필요한 모든 환경의 청사진(Template)
- OS + 라이브러리 + 코드 + 설정 파일을 포함
Dockerfile을 이용해 직접 만들 수 있음- 예:
ubuntu:latest,nginx:alpine,python:3.12
2️⃣ Docker Container (컨테이너)
- 이미지를 실제로 실행한 “프로세스 단위”
- 여러 개의 컨테이너가 하나의 이미지를 기반으로 동작 가능
- 쉽게 시작/중지/삭제 가능
docker run -d -p 8080:80 nginx
3️⃣ Docker Hub (이미지 저장소)
- 전 세계 개발자들이 공유하는 이미지 레지스트리
- 무료로 공개 이미지를 다운로드 가능
docker pull ubuntu→ 자동으로 이미지 다운로드
5) Docker의 동작 원리
Docker는 리눅스 커널 위에서 컨테이너를 생성합니다.
Dockerfile을 작성해 이미지를 빌드 (docker build)- 빌드된 이미지를 실행하면 새로운 컨테이너가 생성 (
docker run) - 컨테이너는 호스트 커널 위에서 독립된 환경으로 실행
- 필요 없을 시
docker stop,docker rm으로 제거 가능
⚙️ 내부 구조 요약
[호스트 OS]
├── Docker Daemon (dockerd)
│ ├── 이미지 저장소 관리
│ ├── 컨테이너 실행 제어
│ └── 네트워크/볼륨 관리
└── CLI (docker 명령어)
6) Docker의 장점과 활용 사례
🚀 주요 장점
- 환경 일관성 유지
→ “개발 환경과 서버 환경이 다르다” 문제 해결 - 빠른 배포와 복구
→ 컨테이너 중지 후 즉시 새 버전 실행 가능 - 가벼운 리소스 사용량
→ VM보다 3~10배 효율적 - 자동화 파이프라인과 연동
→ CI/CD, Kubernetes와 자연스럽게 결합
💡 활용 사례
| 분야 | 예시 |
|---|---|
| 웹 개발 | Nginx, Node.js, Django, Flask 등 테스트 환경 |
| 데이터 분석 | Jupyter Notebook, Pandas, Spark 환경 구성 |
| DevOps | Jenkins, GitLab Runner, CI/CD 파이프라인 |
| 클라우드 | AWS ECS, GCP Cloud Run, Azure Container Apps |
7) Docker로 시작하기 (기본 명령어 예시)
✅ 이미지 다운로드
docker pull nginx
✅ 컨테이너 실행
docker run -d -p 8080:80 nginx
→ 브라우저에서 http://localhost:8080 접속하면 Nginx 페이지 확인 가능
✅ 실행 중 컨테이너 목록
docker ps
✅ 컨테이너 중지 / 삭제
docker stop <컨테이너ID>
docker rm <컨테이너ID>
✅ 이미지 목록 확인
docker images
✅ 정리하며
**Docker는 “환경을 코드로 정의하고, 어디서나 동일하게 실행되게 만드는 기술”**입니다.
개발, 테스트, 배포의 경계를 허물며
현대적인 DevOps와 클라우드 환경의 기반이 되는 필수 도구이기도 합니다.
요약하자면 👇
| 핵심 포인트 | 내용 |
|---|---|
| 정의 | 애플리케이션 실행 환경을 컨테이너로 묶어 배포하는 플랫폼 |
| 핵심 구성요소 | Image / Container / Dockerfile / Docker Hub |
| 장점 | 빠른 배포, 환경 일관성, 가벼운 리소스, 자동화 용이 |
| 주요 용도 | 웹 서버, 데이터 분석, DevOps, 클라우드 배포 |
