Docker는 컨테이너 기반의 가상화 플랫폼으로, 개발부터 배포까지 일관된 환경을 제공합니다. 이 글에서는 Docker의 기본 개념, 아키텍처, VM과의 차이점, 주요 명령어, 스토리지와 네트워킹까지 전반적인 구조를 정리합니다.
Docker 개념과 아키텍처 정리: VM과 비교
목차
1. Docker란?
Docker는 컨테이너 기술을 기반으로 한 오픈소스 플랫폼입니다. 애플리케이션과 실행 환경을 하나의 패키지로 묶어 어떤 환경에서도 동일하게 동작하게 만들어 줍니다.
Docker의 주요 특징
- 개발 ↔ 운영 환경 차이 제거
- 빠른 배포 및 가벼운 리소스 사용
- 클라우드, 로컬 어디서든 실행 가능
- 하드웨어 독립적
2. Docker vs 가상머신(VM)
가상화 기술은 Docker 외에도 가상머신(VM) 이 널리 사용됩니다. 두 방식의 차이를 표로 정리하면 다음과 같습니다.
Docker는 빠르고 가볍지만 완전한 격리가 아니며, VM은 보안성과 독립성이 높지만 무겁고 느립니다.
비교항목 | Docker(컨테이너) | 가상머신 |
가상화 방식 | 운영체제(OS) 레벨 가상화 | 하드웨어 레벨 가상화 |
리소스 사용량 | 경량 (MB 단위) | 무거움 (GB 단위) |
부팅 속도 | 빠름 (초 단위) | 느림 (수 분) |
격리 수준 | 프로세스 단위 격리 (커널 공유) | OS 단위 격리 (독립된 커널) |
보안성 | 상대적으로 낮음 (커널 공유) | 강함 (완전한 격리) |
운영체제 개수 | 하나의 OS 커널을 공유 | 각 VM이 개별 OS 실행 |
사용 사례 | DevOps, 마이크로서비스 | 엔터프라이즈 서버 환경 |
3. Docker 아키텍처 구조
Docker는 클라이언트-서버 구조를 따르며, 주요 구성요소는 아래와 같습니다:
◆ Docker Daemon
- Docker 데몬은 백그라운드에서 실행되는 프로그램으로, 클라이언트의 요청을 받아 실제로 이미지 생성, 컨테이너 실행 등의 작업을 처리합니다.
◆ Docker Client
- 사용자가 docker run, docker build 같은 명령어를 입력하면, 이 명령은 클라이언트에서 Docker 데몬(Daemon)에게 전달됩니다.
- 예: docker run, docker build, docker pull
◆ Docker Host
- Docker 데몬이 실행되고 컨테이너들이 구동되는 물리적 또는 가상 머신입니다.
- 데몬과 컨테이너가 실제로 설치되고 동작하는 공간입니다.
◆ Docker Image
- Docker 이미지란, 컨테이너 실행에 필요한 모든 요소(코드, 설정, 라이브러리 등)가 담긴 읽기 전용 템플릿입니다.
- 여러 개의 컨테이너가 하나의 이미지를 기반으로 실행될 수 있습니다.
◆ Docker Container
- Docker 컨테이너는 이미지를 기반으로 생성된 실행 중인 인스턴스입니다.
- 애플리케이션이 실제로 동작하는 격리된 환경이며, 컨테이너마다 별도로 실행됩니다.
◆ Docker Registry
- Docker 레지스트리는 Docker 이미지를 저장하고 배포하는 중앙 저장소입니다.
- 가장 널리 사용되는 공용 저장소는 Docker Hub이며, 자체적으로 프라이빗 레지스트리도 운영할 수 있습니다.
4. Docker 주요 명령 시나리오
◆ Build : 이미지 빌드
Dockerfile을 바탕으로 이미지를 생성합니다.
docker build -t myapp:latest .
1.사용자가 Docker 클라이언트에서 docker build 명령어를 실행합니다.
2.클라이언트는 Docker 데몬에게 빌드 요청을 전송합니다.
3.Docker 데몬은 현재 디렉터리의 Dockerfile을 읽습니다.
4.Dockerfile의 명령어 순서대로 애플리케이션 이미지를 생성합니다.
5.생성된 이미지는 Docker 호스트의 로컬 이미지 저장소에 저장됩니다.
◆ Pull : 이미지 다운로드
Docker Hub 같은 레지스트리에서 이미지를 내려받습니다.
docker pull nginx:latest
1.사용자가 Docker 클라이언트에서 docker pull 명령어를 실행합니다.
2.클라이언트는 Docker 데몬에게 이미지 다운로드 요청을 전달합니다.
3.데몬은 지정된 Docker 레지스트리(예: Docker Hub)에 요청을 전송합니다.
4.Docker 레지스트리에서 해당 이미지를 찾아 전송합니다.
5.받은 이미지는 Docker 호스트의 로컬 저장소에 저장됩니다.
◆ Run : 컨테이너 실행
이미지를 기반으로 새로운 컨테이너를 실행합니다.
docker run -d -p 80:80 nginx
1.사용자가 docker run 명령어로 컨테이너 실행을 요청합니다.
2.클라이언트는 해당 요청을 Docker 데몬에 전달합니다.
3.데몬은 로컬 저장소에서 nginx 이미지를 확인합니다.
없다면, 자동으로 docker pull을 수행하여 이미지 다운로드
4.해당 이미지를 기반으로 새로운 컨테이너를 생성합니다.
5.컨테이너가 백그라운드 모드로 실행되며 포트가 지정대로 매핑됩니다.
◆ Push : 이미지 업로드
로컬에서 만든 이미지를 레지스트리에 업로드합니다.
docker push myapp:latest
1.사용자가 docker push 명령어를 실행합니다.
2.클라이언트는 Docker 데몬에게 이미지 업로드 요청을 전달합니다.
3.데몬은 로컬 저장소에서 지정한 이미지를 찾습니다.
4.Docker 레지스트리(예: Docker Hub)에 로그인 인증 후 업로드합니다.
5.업로드가 완료되면, 누구나 docker pull 명령으로 해당 이미지를 사용할 수 있습니다.
5. Docker Strorage 유형
Docker에서 실행 중인 컨테이너는 기본적으로 휘발성입니다. 즉, 컨테이너를 삭제하면 그 안의 데이터도 함께 사라집니다.
데이터를 영구적으로 저장하거나 공유하려면 저장소 설정이 필요합니다.
Docker는 다음과 같은 저장소 유형을 지원합니다.
◆ Volume(데이터 볼륨)
- Docker가 권장하는 기본적인 영구 저장 방식입니다.
- 호스트 시스템의 디스크에 저장되며, 컨테이너를 삭제해도 데이터가 유지됩니다.
#이름이 myvolume 인 Docker 볼륨을 생성
#/var/lib/docker/volumes/ 아래에 생성
docker volume create myvolume
#호스트의 myvolume → 컨테이너 내부 /data 경로로 마운트
docker run -v myvolume:/data myapp
1.컨테이너끼리 공유 가능
2.Docker CLI로 쉽게 관리
3.백업, 복원에 용이
◆ Bind Mount(디렉토리 마운트)
- 호스트의 특정 디렉토리를 컨테이너 안으로 직접 연결합니다.
- 주로 개발 환경에서 코드 실시간 반영을 위해 사용됩니다.
현재 디렉토리 아래의 src 폴더를 컨테이너 내부의 /app/src에 바인드 마운트 함
docker run -v $(pwd)/src:/app/src myapp
1.호스트 파일 변경 시 컨테이너 내부에서도 반영됨
2.경로를 직접 지정해야 함
◆ Volume Container(볼륨 컨테이너)
- 별도의 컨테이너에서 볼륨을 생성한 후, 여러 컨테이너가 이를 공유하여 사용하는 방식입니다.
- 현재는 주로 named volume 방식으로 대체됩니다.
- 과거방식, 백업 용도
◆ Storage Plugin(스토리지 플러그인)
- Amazon EBS, NFS, Ceph 같은 외부 저장소를 연결할 수 있습니다.
- 주로 클라우드 환경 또는 기업용 인프라에서 활용됩니다.
- 다양한 외부 스토리지 연동 가능, 플러그인 설치 필요
◆ 요약
저장방식 | 특징 | 사용 사례 |
Volume | 권장 방식, 컨테이너 삭제해도 유지 | 서비스 운영용 데이터 저장 |
Bind Mount | 호스트 폴더 연결, 실시간 반영 | 개발 중 소스코드 실시간 수정 |
Volume Container | 여러 컨테이너 간 데이터 공유 | 과거 방식, 백업 용도 |
Storage Plugin | 외부 스토리지 연동 | 클라우드, 대규모 인프라 |
◆ Volume vs Bind Mount
Volume | Bind Mount |
Docker가 직접 관리하는 저장 공간 | 로컬 디렉토리와 컨테이너 경로를 직접 연결 |
생성, 삭제, 위치 관리 등을 Docker가 수행 | 사용자가 로컬 경로를 지정하여 연결 |
이미지, 컨테이너처럼 Docker 내부에서 일관된 관리 가능 | Docker가 내용을 직접 관리하지 않음 |
프로덕션 환경이나 장기적인 데이터 저장에 적합 | 로컬 개발 환경에서 코드 실시간 반영 가능 |
docker volume create 등 명령어로 수동 생성 필요 | 로컬 디렉토리 변경 시 컨테이너에 실시간 반영 |
- | 컨테이너에서 변경된 내용도 로컬에 반영됨 |
6. Docker 네트워킹(Networking) 방식
Docker 컨테이너는 기본적으로 격리된 네트워크 환경에서 실행됩니다.
그러나 컨테이너 간 통신이 필요할 경우, Docker는 다양한 네트워크 드라이버를 제공합니다.
◆ Bridge (브리지) - 기본값
- 같은 Docker 호스트 내의 컨테이너끼리 통신 가능하게 하는 기본 네트워크입니다.
docker network create my-bridge
docker run --network my-bridge myapp
1.기본 네트워크로 자동 생성
2.컨테이너 이름으로 통신 가능
◆ Host(호스트)
- 컨테이너가 호스트의 네트워크 인터페이스를 직접 사용합니다.
- 별도 NAT나 가상 네트워크 계층이 없습니다
docker run --network host myapp
1.네트워크 성능이 우선일 때 사용
2.포트 충돌 위험 있음
◆ Overlay(오버레이)
- 여러 Docker 호스트(서버) 간 컨테이너 네트워크를 연결합니다.
- 주로 Docker Swarm 또는 클러스터 환경에서 사용됩니다.
- 서로 다른 서버 간 통신 가능, 서비스 분산 구조에서 활용
◆ None(없음)
- 컨테이너에 네트워크를 할당하지 않음.
- 완전히 외부와 단절된 상태로, 테스트나 격리 환경에서 사용됩니다.
◆ Macvlan
- 컨테이너에 실제 MAC 주소를 부여하여 물리 네트워크에 직접 연결합니다.
- 외부 장비처럼 동작하며, 고급 네트워크 설정이 필요합니다.
- 네트워크 스위치에서 독립 장치처럼 인식, 보안 장비나 DHCP 요청 시 유용
◆ Macvlan
유형 | 특징 | 사용 사례 |
Bridge | 기본값, 동일 호스트 내 통신 가능 | 일반 컨테이너 연결 |
Host | 호스트 네트워크 직접 사용 | 성능 우선, 로컬 테스트 |
Overlay | 여러 호스트 간 통신 | Swarm 클러스터 구성 |
None | 네트워크 비활성화 | 격리 환경, 보안 테스트 |
Macvlan | MAC 주소 부여, 물리 네트워크처럼 작동 | IoT, 고급 네트워크 시뮬레이션용 |
Docker의 개념과 아키텍처, 가상머신과의 차이점, 주요 명령어, 객체, 저장소 및 네트워크 구성 방식까지 핵심 내용을 시나리오 중심으로 정리해보았습니다.
Docker는 경량화된 컨테이너 기술을 기반으로 빠르고 일관된 배포 환경을 제공하며, DevOps와 클라우드 시대에 필수적인 도구로 자리 잡고 있습니다.
Docker를 이해하면 개발 환경 구축, 마이크로서비스 설계, CI/CD 자동화까지 더욱 유연하게 대응할 수 있습니다.
관련 글 링크
What is Docker?
Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.
docs.docker.com
Architecture of Docker - GeeksforGeeks
Docker utilizes a client-server architecture where the Docker client communicates with the Docker daemon to manage containers, images, networks, and storage, enabling users to build, run, and distribute applications efficiently.
www.geeksforgeeks.org
'1.시스템&인프라 > 가상화(WSL,VirtualBox,Docker)' 카테고리의 다른 글
[Docker]4.Docker 명령어 정리(예제 + 설명) (0) | 2025.03.27 |
---|---|
[Docker]3.Docker와 방화벽(UFW, firewalld) 설정 시 주의사항과 해결 방법 (0) | 2025.03.27 |
가상화 개요 – 하이퍼바이저 vs 컨테이너 차이 (0) | 2025.03.27 |
[VirtualBox]5.호스트 전용 네트워크에서 인터넷 연결 방법 (NAT설정) (0) | 2025.03.27 |
[VirtualBox]4.호스트 전용 네트워크에서 인터넷 연결 방법 (ICS 설정) (0) | 2025.03.27 |