
도커에서는 호스트 PC의 데이터에 접근하기 위해 Volume과 Bind mount 두 가지 방식을 사용함.
그 외 컨테이너 내부에서 생성한 데이터는 컨테이너 삭제 시 함께 삭제됨
볼륨은 도커가 직접 관리하는 스토리지입니다. 도커 엔진이 /var/lib/docker/volumes/ 디렉토리에 데이터를 저장하며, 컨테이너와 독립적으로 데이터를 유지할 수 있습니다.
# 볼륨 생성
docker volume create my_volume
# 볼륨 마운트
docker run -d -v my_volume:/app/data nginx
바인드 마운트는 호스트 시스템의 특정 디렉토리나 파일을 컨테이너 내부에 연결(mount)하는 방식입니다. 호스트 파일 시스템의 절대 경로를 사용해야 하며, 도커가 아닌 사용자가 직접 관리합니다.
# 바인드 마운트
docker run -d -v /path/on/host:/app/data nginx
| 특징 | 볼륨 (Volume) | 바인드 마운트 (Bind Mount) |
|---|---|---|
| 관리 주체 | 도커가 관리 | 사용자가 직접 관리 |
| 저장 위치 | /var/lib/docker/volumes/ | 호스트 파일 시스템의 지정된 경로 |
| 운영체제 의존성 | 운영체제 독립적 | 운영체제 및 파일 시스템 구조에 의존적 |
| 보안성 | 상대적으로 안전 | 보안 위험 존재 (호스트 파일 시스템 수정 가능) |
| 사용 용도 | 데이터 영속성 및 여러 컨테이너 간 데이터 공유 | 로컬 개발 환경에서 코드 동기화 및 테스트 |
| CLI 지원 여부 | 도커 CLI로 생성, 삭제, 관리 가능 | 도커 CLI로 직접적인 관리 불가 |

로컬 네트워크는 같은 도커 호스트 내에서 실행 중인 컨테이너 간 통신을 가능하게 하는 기본적인 네트워크 유형입니다. 이는 주로 브리지(Bridge) 네트워크 드라이버를 사용합니다.
# 사용자 정의 브리지 네트워크 생성
docker network create my_bridge
# 컨테이너 실행 시 네트워크 연결
docker run -d --name app1 --network my_bridge nginx
docker run -d --name app2 --network my_bridge redis
위의 경우, app1과 app2는 my_bridge 네트워크를 통해 서로 통신할 수 있습니다.
바인드 네트워크는 도커 컨테이너가 호스트의 네트워크 스택을 직접 사용하는 방식입니다. 이는 host 드라이버를 사용하여 설정됩니다.
# 호스트 네트워크를 사용하는 컨테이너 실행
docker run --net="host" nginx
위 명령어로 실행된 컨테이너는 호스트의 IP 주소와 포트를 그대로 사용합니다.
오버레이 네트워크는 여러 도커 호스트에 걸쳐 있는 컨테이너들 간의 통신을 가능하게 하는 가상 네트워크입니다. 이는 Docker Swarm 또는 Kubernetes와 같은 오케스트레이션 툴과 함께 사용됩니다.
# Docker Swarm 초기화
docker swarm init
# 오버레이 네트워크 생성
docker network create -d overlay my_overlay
# 오버레이 네트워크를 사용하는 서비스 생성
docker service create --name web --network my_overlay nginx
여러 노드에 걸쳐 있는 컨테이너들이 my_overlay를 통해 서로 통신할 수 있습니다.
| 특징 | 로컬 네트워크 | 바인드 네트워크 | 오버레이 네트워크 |
|---|---|---|---|
| 적용 범위 | 단일 도커 호스트 | 단일 도커 호스트 | 여러 도커 호스트 |
| 격리 수준 | 높은 격리 | 격리 없음 | 높은 격리 |
| 성능 | 일반적 | 매우 우수 | 분산 환경에서 우수 |
| 사용 사례 | 단일 서버 애플리케이션 | 고성능 애플리케이션 | 마이크로서비스 및 클러스터링 |