🐳 Docker 정리 (개념 + 실행 구조)
✅ 도커 실행 구조
[APP + 런타임 + 종속 라이브러리] ← 컨테이너 (Container)
↓
[도커 엔진 / Docker Daemon]
↓
[호스트 OS의 커널]
↓
[하드웨어]
컨테이너는 가상 머신과 달리 호스트 OS 커널을 공유함→ 즉, 커널은 하나고 그 위에 여러 컨테이너가 격리된 환경에서 실행됨
✅ 핵심 구성 요소
구성 요소 | 설명 |
이미지 (Image) | 컨테이너 생성의 기반. 코드, 종속성, 설정 포함. 불변 |
컨테이너 (Container) | 이미지를 실행한 상태. 격리된 공간에서 동작 |
Dockerfile | 이미지를 만들기 위한 레시피. Layer 기반 빌드 |
Docker Daemon | 컨테이너/이미지 실행 관리하는 백그라운드 프로세스 |
Docker CLI | 개발자가 쓰는 명령어 도구 (ex. docker run ) |
레지스트리 | 이미지 저장소 (공식: Docker Hub, 사설도 가능) |
✅ 컨테이너의 특징
- 호스트 커널 공유 (리눅스 커널 기반)
- 경량화된 가상화 (OS 전체를 포함하지 않음)
- 격리성 보장 (네트워크, 프로세스, 파일시스템은 독립)
- 빠른 실행 속도 (VM보다 수 초 ~ 수 십 배 빠름)
- 이식성 보장 (어느 환경이든 똑같이 실행됨)
✅ 도커로 배포하는 전체 흐름 (윈도우 → 리눅스)
- 윈도우에서 개발 (
SpringBoot
,Node.js
,Python
, 등)
Dockerfile
작성
docker build -t myapp:1.0 .
→ 이미지 생성
docker push myapp:1.0
→ Docker Hub 업로드
- 리눅스 서버에서
docker pull myapp:1.0
docker run -d -p 8080:80 myapp:1.0
→ 실행
또는 이미지 .tar로 빌드해서 리눅스로 직접 옮길 수도 있음
✅ 도커 vs VM
항목 | Docker | VM |
부팅 속도 | 수 초 | 수 분 |
무게 | 경량 | 무거움 (전체 OS 포함) |
커널 | 공유 | 개별 OS 커널 사용 |
이식성 | 높음 | 낮음 |
사용 목적 | 마이크로서비스, 빠른 배포 | 격리된 전체 OS 환경 필요 시 |

1. 이미지 다운로드
docker pull ubuntu
2. 컨테이너 실행 + bash 진입
docker run -it ubuntu bash

1. 컨테이너 실행
docker run -it --rm tomcat:9.0
2. 실행 중인 컨테이너 확인
docker ps
3. . 컨테이너 내부에 bash로 접속
docker exec -it 컨테이너ID bash
Share article