[Docker] Volume & Network

SungyunKim·2025년 4월 11일

develop

목록 보기
1/3

Volume

"출처 https://semaphore.io/blog/docker-volumes"

도커에서는 호스트 PC의 데이터에 접근하기 위해 Volume과 Bind mount 두 가지 방식을 사용함.

그 외 컨테이너 내부에서 생성한 데이터는 컨테이너 삭제 시 함께 삭제됨

Docker Volume

볼륨은 도커가 직접 관리하는 스토리지입니다. 도커 엔진이 /var/lib/docker/volumes/ 디렉토리에 데이터를 저장하며, 컨테이너와 독립적으로 데이터를 유지할 수 있습니다.

  • 도커 관리: 볼륨은 도커 CLI 및 API를 통해 생성, 삭제, 관리할 수 있습니다.
  • 운영체제 독립성: 호스트 OS에 의존하지 않아 백업과 마이그레이션이 용이합니다.
  • 안전한 공유: 여러 컨테이너 간에 데이터를 안전하게 공유할 수 있습니다.
  • 유연성: 볼륨 드라이버를 통해 원격 스토리지나 클라우드에 데이터를 저장하거나 암호화 기능을 추가할 수 있습니다.
# 볼륨 생성
docker volume create my_volume

# 볼륨 마운트
docker run -d -v my_volume:/app/data nginx

Bind mount

바인드 마운트는 호스트 시스템의 특정 디렉토리나 파일을 컨테이너 내부에 연결(mount)하는 방식입니다. 호스트 파일 시스템의 절대 경로를 사용해야 하며, 도커가 아닌 사용자가 직접 관리합니다.

  • 호스트 의존성: 호스트 OS 파일 시스템 구조에 의존적입니다.
  • 직접 접근 가능: 호스트와 컨테이너 간에 실시간으로 데이터를 동기화할 수 있습니다.
  • 보안 위험: 컨테이너 내 프로세스가 호스트 파일 시스템을 수정할 수 있어 보안 문제가 발생할 수 있습니다.
  • 개발 환경 적합: 로컬 개발 환경에서 소스 코드 변경 내용을 즉시 반영하기에 유리합니다.
# 바인드 마운트
docker run -d -v /path/on/host:/app/data nginx

비교

특징볼륨 (Volume)바인드 마운트 (Bind Mount)
관리 주체도커가 관리사용자가 직접 관리
저장 위치/var/lib/docker/volumes/호스트 파일 시스템의 지정된 경로
운영체제 의존성운영체제 독립적운영체제 및 파일 시스템 구조에 의존적
보안성상대적으로 안전보안 위험 존재 (호스트 파일 시스템 수정 가능)
사용 용도데이터 영속성 및 여러 컨테이너 간 데이터 공유로컬 개발 환경에서 코드 동기화 및 테스트
CLI 지원 여부도커 CLI로 생성, 삭제, 관리 가능도커 CLI로 직접적인 관리 불가

Network

"출처 https://blog.octo.com/how-does-it-work-docker-part-2-swarm-networking"

Local Network

로컬 네트워크는 같은 도커 호스트 내에서 실행 중인 컨테이너 간 통신을 가능하게 하는 기본적인 네트워크 유형입니다. 이는 주로 브리지(Bridge) 네트워크 드라이버를 사용합니다.

  • 격리된 통신: 기본적으로 외부에서는 접근할 수 없으며, 같은 네트워크에 연결된 컨테이너들만 통신 가능합니다.
  • 컨테이너 이름 기반 통신: IP 주소 대신 컨테이너 이름으로 통신할 수 있습니다.
  • 사용 사례: 단일 호스트 내에서 실행되는 애플리케이션의 여러 컴포넌트 간 통신.
# 사용자 정의 브리지 네트워크 생성
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 네트워크를 통해 서로 통신할 수 있습니다.

Bind Network

바인드 네트워크는 도커 컨테이너가 호스트의 네트워크 스택을 직접 사용하는 방식입니다. 이는 host 드라이버를 사용하여 설정됩니다.

  • 호스트와 동일한 네트워크 환경: 컨테이너가 호스트 머신의 IP 주소와 포트를 공유합니다.
  • 성능 최적화: 추가적인 가상화 계층이 없으므로 성능이 뛰어납니다.
  • 보안 제한: 컨테이너와 호스트 간 격리가 없기 때문에 보안성이 낮습니다.
  • 사용 사례: 고성능이 중요한 애플리케이션이나 테스트 환경.
# 호스트 네트워크를 사용하는 컨테이너 실행
docker run --net="host" nginx

위 명령어로 실행된 컨테이너는 호스트의 IP 주소와 포트를 그대로 사용합니다.

Overlay Network

오버레이 네트워크는 여러 도커 호스트에 걸쳐 있는 컨테이너들 간의 통신을 가능하게 하는 가상 네트워크입니다. 이는 Docker Swarm 또는 Kubernetes와 같은 오케스트레이션 툴과 함께 사용됩니다.

  • 멀티 호스트 지원: 여러 호스트에 분산된 컨테이너를 하나의 논리적 네트워크로 연결합니다.
  • VXLAN 기반 통신: VXLAN 기술을 사용해 캡슐화된 패킷을 전송합니다.
  • 확장성: 대규모 분산 시스템에서 유용합니다.
  • 사용 사례: 마이크로서비스 아키텍처, 클러스터링 환경.
# Docker Swarm 초기화
docker swarm init

# 오버레이 네트워크 생성
docker network create -d overlay my_overlay

# 오버레이 네트워크를 사용하는 서비스 생성
docker service create --name web --network my_overlay nginx

여러 노드에 걸쳐 있는 컨테이너들이 my_overlay를 통해 서로 통신할 수 있습니다.

비교

특징로컬 네트워크바인드 네트워크오버레이 네트워크
적용 범위단일 도커 호스트단일 도커 호스트여러 도커 호스트
격리 수준높은 격리격리 없음높은 격리
성능일반적매우 우수분산 환경에서 우수
사용 사례단일 서버 애플리케이션고성능 애플리케이션마이크로서비스 및 클러스터링
profile
MedicalAI Researcher

0개의 댓글