1. Docker 란?

- Docker: 애플리케이션을 컨테이너라는 표준화된 유닛으로 패키징하여 어디서든 동일하게 실행할 수 있도록 돕는 오픈소스 가상화 플랫폼
[도커의 사용 목적]
- 환경의 표준화: 개발, 테스트, 운영 환경을 일치시켜 환경 차이로 인한 오류를 방지한다.
- 배포의 신속성: 코드뿐만 아니라 라이브러리, 설정파일 등을 이미지로 만들어 빠르게 배포하고 확장할 수 있다.
- 자원 효율성: 필요한 시스템 자원만 사용하여 가볍고 빠르게 구동함.
2. 가상머신(VM) vs 도커(Docker)

| 가상머신 (VM) | 도커 (Docker) | |
| 구조 | 호스트 OS 위에 게스트 OS를 각각 설치 | 호스트 OS의 커널을 공유 |
| 자원 사용 | 게스트 OS 실행을 위한 오버헤드 발생 (무거움) | 매우 가볍고 적은 메모리 사용 |
| 부팅 속도 | OS 부팅 필요 (분 단위) | 프로세스 실행 수준 (초 단위) |
| 효율성 | 자원 할당이 고정되어 효율성이 상대적으로 낮음 | 하나의 서버에 수십, 수백 개 실행 가능 |
3. 도커의 주요 컴포넌트

| 컴포넌트 | 설명 |
| Image | 컨테이너를 생성하기 위한 소스코드, 라이브러리, 설정 등을 포함한 읽기 전용(Read-only) 템플릿 |
| Container | 이미지를 실행한 실제 인스턴스. 격리된 환경에서 프로세스가 실행되며 추가적인 쓰기 레이어가 얹어진다. |
| Registry | 도커 이미지를 저장하고 공유하는 저장소 (예: Docker Hub) |
| Volume | 컨테이너는 삭제 시 데이터가 사라지는데, 이를 영구적으로 저장하기 위해 호스트 시스템의 디렉토리와 연결하는 저장소 |
| Network | 컨테이너 간 또는 외부와의 통신을 연결해 주는 가상 네트워크 환경을 제공 |
4. 도커의 아키텍쳐 (Client - Server)
도커의 구조는 크게 클라이언트(Client), 호스트(Host), 레지스트리(Registry) 세 부분으로 나뉜다.
1. 도커 클라이언트 (Docker Client)
사용자가 도커와 상호작용하는 주요 경로이다. 사용자가 터미널에 docker run, docker build와 같은 명령어를 입력하면, 클라이언트가 이 명령을 도커 데몬(Docker Daemon)에게 전달한다. 클라이언트는 하나 이상의 데몬과 통신할 수 있습니다.
* 데몬(Daemon): 사용자가 직접 제어하지 않고, 시스템의 백그라운드에서 돌면서 여러 가지 작업을 처리하는 프로세스
2. 도커 호스트 (Docker Host)
도커가 설치된 물리적 또는 가상 환경을 의미하며, 실제 컨테이너와 이미지를 관리하는 핵심 엔진이 돌아가는 곳
- 도커 데몬 (Docker Daemon, dockerd): 클라이언트의 API 요청을 듣고 이미지, 컨테이너, 네트워크, 볼륨과 같은 도커 객체들을 관리하는 백그라운드 프로세스
- 도커 객체 (Docker Objects): 이미지, 컨테이너 등을 포함한 도커 관리 대상들
3. 도커 레지스트리 (Docker Registry)
도커 이미지를 저장하고 배포하는 저장소이다.
- Docker Hub: 도커가 기본적으로 사용하는 공용(Public) 레지스트리
- Private Registry: 기업 내부에서 보안을 위해 자체적으로 구축하여 사용하는 저장소
5. 도커의 동작 흐름 (Docker Workflow)
`docker run` 명령어의 동작 흐름 예시를 보면 다음과 같다.
- 명령 전달: 사용자가 docker run hello-world 명령을 입력 (Client).
- 데몬 확인: 도커 데몬이 로컬에 해당 이미지가 있는지 확인 (Host).
- 이미지 다운로드: 로컬에 없다면 레지스트리에서 해당 이미지를 찾아 내려받음. (Registry → Host).
- 컨테이너 생성: 내려받은 이미지를 기반으로 새로운 컨테이너를 생성
- 실행: 컨테이너 내부의 프로그램을 실행하고 결과를 사용자에게 보여줌.
6. 도커의 기반 기술
도커 데몬이 리눅스 시스템에서 컨테이너를 격리하기 위해 사용하는 핵심 기술이다.
- Namespaces: 각 컨테이너가 독립적인 시스템 자원(프로세스 ID, 네트워크, 사용자 등)을 가진 것처럼 느끼게 하는 격리 기술
- Control Groups (cgroups): 컨테이너가 사용할 수 있는 하드웨어 자원(CPU, 메모리 등)의 한도를 제한하는 기술
- Union File Systems (UnionFS): 여러 개의 레이어를 하나의 파일 시스템으로 합쳐서 보여주는 기술로, 도커 이미지의 계층 구조를 가능하게 한다.
'프로젝트 > Docker' 카테고리의 다른 글
| [Docker] Dockerfile 작성하기 (0) | 2026.02.05 |
|---|---|
| [Docker] 도커 컨테이너 통신 (포트포워딩) (0) | 2026.02.03 |
| [Docker] 도커 컨테이너 구조, 도커 명령어 (0) | 2026.02.03 |