Docker Volume·Network 빌더 활용
Docker 환경에서 데이터 영속성과 컨테이너 간 통신을 다루는 두 축이 바로 volume과 network입니다. 컨테이너는 기본적으로 stateless이기 때문에 데이터베이스·업로드 파일·로그처럼 사라지면 곤란한 데이터는 named volume이나 bind mount로 분리해야 합니다. 또한 여러 컨테이너가 서로를 호스트 이름으로 부르려면 동일한 사용자 정의 bridge 네트워크에 합류해 있어야 자동 DNS 해석이 동작합니다. 이 도구는 이 두 가지를 폼으로 빠르게 정의하고 docker volume create / docker network create CLI 명령과 docker-compose.yml의 volumes·networks 섹션을 동시에 출력해 줍니다.
Volume 탭에서는 이름·드라이버(local, nfs, tmpfs 등)·driver_opts(type, device, o)를 입력합니다. 외부에서 이미 만들어 둔 볼륨을 컴포즈에서 그대로 사용하려면 "external: true"를 체크하면 됩니다. NFS 마운트는 driver_opts에 type=nfs, o=addr=192.168.0.10,rw, device=:/path/to/dir 같은 키-값을 추가하면 자동으로 반영됩니다.
Network 설계 팁
네트워크 탭에서는 driver(bridge / overlay / host / macvlan)와 IP 범위(subnet, gateway), internal(외부 접근 차단) 여부를 지정합니다. 단일 호스트 멀티 컨테이너는 bridge, 스웜 클러스터는 overlay가 표준입니다. 같은 네트워크에 있는 컨테이너끼리는 서비스 이름(또는 컨테이너 이름)으로 서로를 호출할 수 있고, --internal 플래그는 외부 인터넷에서의 접근을 차단해 데이터베이스 전용 백엔드 네트워크를 만들 때 유용합니다.
자주 묻는 질문 (FAQ)
Q. bind mount와 named volume 중 무엇을 써야 하나요?
A. 호스트 파일을 직접 들여다보고 싶다면 bind mount, 프로덕션처럼 Docker가 관리하는 안전한 저장소가 필요하면 named volume을 권장합니다. named volume은 백업·이전이 훨씬 단순합니다.
Q. 컨테이너가 다른 컨테이너를 이름으로 호출할 수 없습니다.
A. default bridge에서는 자동 DNS가 동작하지 않습니다. user-defined network(예: docker network create my-net)를 만들어 두 컨테이너 모두 --network my-net으로 띄우면 컨테이너 이름이 곧 호스트 이름이 됩니다.
Q. compose에서 이미 만들어 둔 외부 볼륨/네트워크를 참조하려면?
A. volumes 또는 networks 항목 아래에 external: true 를 추가하면 됩니다. 본 도구는 체크박스로 자동 추가합니다.