도커 가상 네트워크
가상 네트워크
네트워크란 서로 연결된 데이터나 자원을 주고 받는 통신망입니다. 가장 대표적인 네트워크는 인터넷 입니다. 같은 인터넷망에 접속한 사용자라면 누구나 서로 통신을 주고 받는 것이 가능합니다. 네트워크는 실제로 케이블로 연결된 하나의 물리적 망이지만 도커와 같이 서버를 가상화 하는 프로그램에서는 서버의 가상 네트워크라는 개념이 들어갑니다.
네트워크는 물리적 H/W 구성이 필요합니다. 간다하게만 생각해봐도 하나의 여러 통신망의 서버를 연결 하기 위해선 스위치, 라우터, NIC, NAT장비 등등 여러가지 물리적 구성이 필요합니다. 하지만 도커는 한대의 물리적 서버의 여러개의 논리적 서버처럼 구성한 가상화 솔루션 입니다.
https://dkkim2318.tistory.com/139
Docker 와 가상화
Docker 개발을 진행하며 같은 장소, 같은 환경에서 작업을 할 수 있다면 최적의 환경일 것입니다. 그렇지만 막상 개발 프로젝트에서 본인의 개발환경이 바뀌는 상황, 내가 만든 어플리케이션을 다
dkkim2318.tistory.com
도커와 같은 가상화 서버에서 여러가지 컨테이너들의 통신을 위해선 네트워크는 필요하짐나 도커에서는 이를 실제 물리적 H/W가 들어간 것은 아니지만 마치 실제 물리적 네트워크 처럼 가상화된 네트워크를 사용합니다. (이러한 소프트웨어를 통해 정의 된 네트워크를 SDN이라고 함)
도커의 가상 네트워크
도커에서는 여러개의 컨테이너를 띄우는 것이 가능합니다. 여러개의 컨네이너를 띄우는 과정에서 도커에서는 먼저 가상의 네트워크 브릿지를 생성합니다. 여기서 브릿지는 여러 개의 컨테이너 들이 서로 통신할 수 있도록 인터페이스의 역할을 해줍니다. 그리고 순차적으로 컨테이너를 띄울 때 마다 컨테이너에 가상의 IP(같은 대역대) 를 할당합니다. 단계별로 정리하면 아래와 같습니다.
- 가상의 네트워크 브릿지 생성
- 컨네이너가 생성될 때 마다 가상의 IP 할당
- 컨테이너간 통신 전달
가상 네트워크는 별도의 설정이 없을 경우 docker0 이라늩 네트워크 브릿지가 디폴트로 생성되며 컨테이너 별 IP는 자동으로 할당 됩니다.
도커 네트워크 명령어
위어세 언급 하였 듯이 도커는 별도의 설정이 없으면 디폴트 값으로 가상 네트워크가 구성 됩니다. 그렇지만, 네트워크의 리스트를 조회하거나 네트워크 브릿지를 별도로 생성하고 구성하는 것도 가능합니다. 도커에서 네트워크를 구성하는 명령어에 대해 알아보겠습니다
네트워크 조회
docker network ls
도커의 현재 네트워크 리스트를 조회합니다.
네트워크 상세 정보 확인
docker network inspect [네트워크 명]
네트워크의 상세정보를 확인합니다.
명령어를 수행했을 때 위와 같은 네트워크의 정보를 json형태로 출력합니다. 각 주요항목에 대한 설명은 아래와 같습니다.
"Name" | 네트워크 이름 | "bridge" |
"Id" | 네트워크 고유 ID (내부 식별자) | "d1e0a..." |
"Driver" | 네트워크 유형 (bridge, overlay, host 등) | "bridge" |
"Scope" | 네트워크 범위 (local, global) | "local" |
"IPAM" | IP 주소 관리 정보 | 서브넷, 게이트웨이 등 |
"Subnet" | 네트워크의 IP 주소 범위 | "172.18.0.0/16" |
"Gateway" | 게이트웨이 주소 | "172.18.0.1" |
"Containers" | 해당 네트워크에 연결된 컨테이너 목록 | 각 컨테이너 ID와 IP 주소 포함 |
"Internal" | 외부와 통신 가능한지 여부 (true면 내부 전용) | false |
"Attachable" | 컨테이너가 직접 네트워크에 붙을 수 있는지 | true |
"Ingress" | Ingress 네트워크인지 여부 (Swarm에서 사용) | false |
"Labels" | 사용자 정의 메타데이터 | 없거나 {} |
네트워크 생성
docker network create [네트워크명]
도커 네트워크를 생성합니다.
네트워크 삭제
docker network rm [네트워크명]
선택한 네트워크를 삭제합니다