1. 도커의 3대 프로세스 요약
- Build (빌드): 사용자가 클라이언트에서 docker build를 수행하면, 도커 데몬이 Dockerfile을 분석하여 읽기 전용 이미지를 생성
- Pull (다운로드) & Push (배포): docker pull 명령 시 데몬은 레지스트리(Docker Hub 등)에서 이미지를 찾아 호스트로 가져오며, docker push 시에는 검증된 로컬 이미지를 레지스트리로 업로드(Ship)
- Run (실행): docker run 명령을 내리면 데몬은 호스트에 저장된 정적 이미지를 바탕으로 독립된 컨테이너 인스턴스를 생성하고 실행
2. 사용자 관점 vs 시스템 관점 상세 비교
도커는 사용자에게는 복잡한 설정을 생략해 주는 '추상화된 도구(What)'이지만, 내부 시스템에는 호스트 자원을 효율적으로 가두고 쪼개어 쓰는 '지능형 프로세스 관리자(How)'로 작동
💡 1단계: 환경 정의 및 빌드 (Build)
- 사용자 관점 (What): 애플리케이션 실행에 필요한 패키지, 소스 코드 등을 담은 Dockerfile(레시피)을 작성하고 docker build를 실행하여 나만의 맞춤형 설정을 마친 정적 이미지를 생성
- 시스템 관점 (How): 도커 데몬(dockerd)이 Dockerfile을 파싱합니다. 각 명령 행마다 이전 레이어의 변경 사항만 기록하는 스택 구조의 읽기 전용(Read-only) 이미지 레이어를 차례대로 쌓아 올림
💡 2단계: 이미지 관리 및 배포 (Ship / Pull)
- 사용자 관점 (What):
- docker pull을 통해 직접 빌드하지 않아도 검증된 공식 이미지(MySQL, Nginx 등)를 다운로드하며, docker push로 공유하여 전 세계 어디서든 100% 동일한 실행 환경을 재현
- 시스템 관점 (How):
- 스토리지 드라이버(overlay2 등)가 레이어 구조의 파일 시스템을 실제 물리 디스크에 효율적으로 매핑하고 관리
- 이미 다운로드된 동일 레이어가 있다면 다운로드와 용량을 생략하는 Copy-on-Write(CoW) 방식을 활용
💡 3단계: 실행 및 격리·자원 관리 (Run & Manage)
- 사용자 관점 (What): docker run 명령에 포트 포워딩(p), 볼륨 마운트(v) 등의 옵션을 주어 서비스를 가동합니다. 이후 docker ps(목록 확인), docker stop(정지), docker rm(삭제)으로 간단하게 컨테이너 상태를 제어
- 시스템 관점 (How): 저수준 런타임(runc)이 호스트 OS의 리눅스 커널에 격리된 가상 환경을 요청
- Namespaces (논리적 격리): 컨테이너마다 독립된 프로세스 번호(PID), 사설 IP와 가상 네트워크 인터페이스(veth), 독립된 파일 시스템 루트(Mount)를 부여하여 서로 볼 수 없게 격리
- Cgroups (물리적 제한): 특정 컨테이너가 호스트의 CPU, 메모리, 디스크 I/O를 독점하지 못하도록 하드웨어 자원 한계선을 통제
- Writable Layer (쓰기 가능 레이어): 정적 이미지 레이어 위에 얇은 컨테이너 레이어(쓰기 가능 층)를 얹어, 여러 컨테이너가 원본 이미지를 공유하면서도 각자의 수정 내역을 기록. 컨테이너 삭제 시 이 레이어만 날아감
💡 4단계: 네트워킹 및 스토리지 연동 (System Integration)
- 사용자 관점 (What): 외부 브라우저에서 localhost:8080으로 접속하여 컨테이너 내부 서비스가 잘 뜨는지 확인하고, 컨테이너를 지워도 데이터가 유지되도록 도커 볼륨을 연결
- 시스템 관점 (How):
- 호스트의 물리 인터페이스와 컨테이너의 가상 인터페이스를 브리지로 연결하여 포트 포워딩 트래픽 경로를 확보
- 휘발성인 컨테이너 레이어를 벗어나 호스트의 특정 디렉토리나 도커 볼륨 영역에 데이터를 직접 기록하여 데이터 영속성을 실현
3. 핵심 차이점 요약 (치트시트)
구분 사용자 관점 (User View) 시스템 관점 (System View)
| 핵심 키워드 | What (무엇을 제어하는가?) | How (내부에서 어떻게 실행되는가?) |
| 주요 관심사 | 개발 편의성, 빠른 배포 속도, 환경 일관성 | 강력한 보안(격리), 자원 효율성, 시스템 안정성 |
| 인식 단위 | 애플리케이션 서비스, 앱 단위, CLI 명령어 | 독립된 프로세스, 계층형 레이어, 커널 자원 |
| 현실 비유 | 스마트폰 앱 스토어에서 앱을 설치하고 실행하기 | OS 커널 수준의 프로세스 스케줄링 및 하드웨어 자원 할당 |
4. 정리
사용자는 Build ➔ Pull ➔ Run이라는 지극히 단순한 명령어 조합으로 가벼운 가상화를 누리지만, 그 이면(시스템)에서는 네임스페이스 격리, cgroups 자원 제한, 레이어 병합, 가상 네트워크 라우팅이라는 정교한 커맨드가 동시에 가동되어 완벽한 독립 가상 환경을 만들어내는 메커니즘입니다.
'데이터 엔지니어링 > Docker' 카테고리의 다른 글
| 5. Docker Compose 이해 (1) | 2026.05.28 |
|---|---|
| 4. Dockerfile 작성 및 이미지 최적화 (0) | 2026.05.28 |
| 3. Docker의 핵심 3단계 워크플로우(Lifecycle) (0) | 2026.05.27 |
| 1. Docker 개요와 이미지, 컨테이너의 이해 그리고 설치 (0) | 2026.05.27 |