들어가며 - "내 컴에선 되는데요?"
개발을 하다 보면 누구나 한 번쯤 듣게 되는 말이 있습니다.
💬 "제 컴퓨터에서는 잘 돌아가는데, 서버에 올리니까 안 돼요."
운영체제 버전이 다르거나, 라이브러리 버전이 살짝 다르거나, 환경 변수 하나가 빠졌거나 — 원인은 다양하지만 결과는 항상 같습니다. 시간이 녹아내리죠.
Docker는 바로 이 문제를 해결하기 위해 등장한 기술입니다. 애플리케이션과 그 실행 환경을 통째로 묶어서, 어디서 실행하든 똑같이 동작하게 만들어 주는 도구예요.
Ⅰ. Docker란?
Docker(도커) 는 애플리케이션을 컨테이너(Container) 라는 격리된 단위로 패키징해서 실행하는 오픈 소스 플랫폼입니다.
쉽게 비유하자면, Docker는 "운반용 컨테이너" 와 같습니다. 안에 무엇이 들어 있든(웹서버, 데이터베이스, 파이썬 앱 등) 컨테이너 규격만 맞으면 어떤 배·트럭·기차에도 실을 수 있는 것처럼, Docker 컨테이너에 담긴 애플리케이션은 어떤 OS·서버·클라우드에서도 동일하게 실행됩니다.
💡 한 줄 요약: "개발 환경과 실행 환경을 통째로 패키징해 어디서든 똑같이 돌아가게 하는 기술"
Ⅱ. 왜 Docker를 사용할까? (핵심 장점)
| 장점 | 설명 |
| 환경 일관성 | 개발·테스트·운영 환경이 모두 동일하게 동작 |
| 빠른 배포 | 이미지 하나로 어디든 즉시 실행 가능 |
| 가벼움 | 가상머신보다 훨씬 적은 리소스로 실행 |
| 격리성 | 컨테이너끼리 서로 영향을 주지 않음 |
| 확장성 | 트래픽 증가 시 컨테이너 복제로 즉시 확장 |
| 재현성 | 누구든 같은 결과를 얻을 수 있음 |
Ⅲ. 가상화(VM) vs 컨테이너 — 무엇이 다를까?
Docker를 이해하려면 기존 가상화(VM)와의 차이를 아는 것이 가장 빠릅니다.
구조 비교
[가상머신(VM)] [Docker 컨테이너]
┌─────────────────┐ ┌─────────────────┐
│ 애플리케이션 │ │ 애플리케이션 │
├─────────────────┤ ├─────────────────┤
│ 라이브러리 │ │ 라이브러리 │
├─────────────────┤ ├─────────────────┤
│ Guest OS │ ←── 무거움 │ (컨테이너 엔진) │
├─────────────────┤ ├─────────────────┤
│ 하이퍼바이저 │ │ Host OS 커널 │
├─────────────────┤ ├─────────────────┤
│ Host OS │ │ 하드웨어 │
├─────────────────┤ └─────────────────┘
│ 하드웨어 │
└─────────────────┘
핵심 차이
| 비교 항목 | 가상화 (VM) | 컨테이너 (Docker) |
| 격리 수준 | OS 단위 격리 (강력) | 프로세스 단위 격리 |
| OS 구조 | 가상머신마다 별도 Guest OS | Host OS 커널 공유 |
| 크기 | 수 GB | 수십 ~ 수백 MB |
| 부팅 속도 | 수 분 (느림) | 수 초 (매우 빠름) |
| 리소스 소모 | 큼 | 적음 |
| 이식성 | 낮음 | 매우 높음 |
| 대표 도구 | VMware, VirtualBox, Hyper-V | Docker, Podman |
💡 핵심: VM은 하드웨어 위에 OS를 통째로 가상화하고, Docker는 OS 위에서 프로세스를 격리합니다. 이 차이가 속도·크기·확장성의 모든 차이를 만들어요.
Ⅳ. Docker의 핵심 구성 요소
Docker를 이해하려면 다음 5가지 개념을 알아야 합니다.
1) 이미지 (Image)
- 컨테이너를 만들기 위한 템플릿 (실행 가능한 패키지)
- 애플리케이션 코드, 라이브러리, 환경 설정이 모두 포함됨
- 한 번 만들면 어디서나 동일하게 사용 가능
2) 컨테이너 (Container)
- 이미지를 실행한 인스턴스
- 하나의 이미지로 여러 컨테이너를 동시에 실행 가능
- 컨테이너끼리는 격리되어 서로 영향 없음
3) Dockerfile
- 이미지를 만드는 레시피 (텍스트 파일)
- 어떤 OS 위에, 어떤 라이브러리를 깔고, 어떤 명령을 실행할지 정의
4) Docker Engine
- Docker의 핵심 엔진으로 컨테이너를 생성·실행·관리
- Docker Daemon, REST API, CLI로 구성
5) Docker Hub (Registry)
- 이미지를 공유·배포하는 저장소 (GitHub의 이미지 버전)
- 공식 이미지(nginx, mysql, python 등)를 누구나 무료로 받아 사용 가능
- 사설 레지스트리(AWS ECR, Harbor 등)도 운영 가능
🔄 흐름 요약:
Dockerfile 작성 → docker build로 이미지 생성 → docker run으로 컨테이너 실행 → Docker Hub에 push로 공유
Ⅴ. 가장 간단한 Docker 사용 예시
말로만 설명하면 와닿지 않으니, 실제 명령어 흐름을 보여드릴게요.
# 1. Docker 정상 동작 확인 (Hello World)
docker run hello-world
# 2. nginx 웹서버를 백그라운드에서 실행
docker run -d -p 8080:80 --name myweb nginx
# 3. 브라우저에서 http://localhost:8080 접속 → nginx 화면 확인!
# 4. 실행 중인 컨테이너 목록 보기
docker ps
# 5. 컨테이너 중지 및 삭제
docker stop myweb
docker rm myweb
실행화면
#1. Docker 정상 동작 확인 ![]() #2. nginx 웹서버를 백그라운드에서 실행 ![]() #3. 브라우저에서 http://localhost:8080 접속 → nginx 화면 확인! ![]() # 4. 실행 중인 컨테이너 목록 보기 ![]() # 5. 컨테이너 중지 및 삭제 ![]() |
위 다섯 줄만으로 나만의 웹서버가 켜졌다 꺼집니다. 별도 설치 없이, 환경 설정 없이, 단 1분 만에요. 이게 Docker의 힘입니다.
Ⅵ. Docker와 Kubernetes(쿠버네티스), 무엇이 다를까?
자주 묶여서 등장하는 두 기술의 관계를 짧게 짚어드립니다.
| 구분 | Docker | Kubernetes |
| 역할 | 컨테이너 만들고 실행 | 컨테이너 관리·오케스트레이션 |
| 비유 | 컨테이너 박스 | 컨테이너를 다루는 항만 시스템 |
| 사용 시점 | 컨테이너 1개 ~ 수십 개 | 수십 ~ 수천 개 컨테이너 운영 시 |
| 주요 기능 | 빌드, 실행, 배포 | 자동 복구, 스케일링, 로드밸런싱 |
💡 둘은 경쟁이 아니라 보완 관계입니다. Docker로 컨테이너를 만들고, Kubernetes로 그 컨테이너들을 대규모로 운영하죠.
Ⅶ. 어떤 사람이 Docker를 배워야 할까?
| 직군 | 활용 사례 |
| 백엔드 개발자 | 로컬 개발 환경 통일, DB·Redis·Kafka 즉시 실행 |
| 프론트엔드 개발자 | 빌드 환경 통일, 다양한 Node.js 버전 테스트 |
| 데이터 엔지니어 | Spark, Airflow, Jupyter 환경 격리 |
| DevOps 엔지니어 | CI/CD 파이프라인, 무중단 배포 |
| 시스템 관리자 | 서비스 격리, 장애 영향 최소화 |
한 줄로 말하면, "개발하거나 서비스를 운영하는 거의 모든 사람" 에게 도움이 됩니다.
Ⅷ. 마무리
Docker는 단순한 도구가 아니라 현대 소프트웨어 개발의 표준이 되었습니다. 처음 접하면 개념이 낯설지만, 일단 익숙해지면 "이전에는 이걸 어떻게 안 쓰고 살았지?" 라는 생각이 들 정도로 편리한 기술이에요.
이 글에서 개념을 잡으셨다면, 다음 단계는 실제로 명령어를 직접 쳐 보는 것입니다.
🔗 함께 보면 좋은 글
'시스템(Linux)' 카테고리의 다른 글
| Linux 및 Unix 에서 많이 사용되는 압축과 압축해제에 대해 알아보겠습니다. (0) | 2023.09.20 |
|---|---|
| 리눅스에서 사용되는 텍스트 편집기 중 하나인 "vi"에 대해 알아보겠습니다. (0) | 2023.09.12 |
| yum 과 비슷한 역할을 하는 패키지 관리툴인 dnf에 대해 알아보겠습니다. (0) | 2023.09.08 |
| grep(특정 패턴 검색 및 매칭 출력) 에 대해 알아보겠습니다. (1) | 2023.09.05 |
| 리눅스 시스템에서 사용되는 NTP(chrony, ntpd)에 대해 알아보겠습니다. (0) | 2023.09.04 |




