목차
1. Docker Network
1-1 Docker Network 구성
1-2 Docker Network : 패킷 흐름
1-3 Docker Network : network 명령
1-4 Docker Network 활용
1. Docker Network
1-1 Docker Network 구성
● Docker Network 구성
docker0 | 도커에서 기본 제공되는 브릿지 네트워크 인터페이스이다. 172.17.0.1이 기본 할당되며 컨테이너에 ip주소를 자동으로 할당한다. |
veth##### | 컨테이너의 eth0와 쌍으로 제공되며 eth0와 docker0 통신 시 이를 거쳐 지나간다. eth0와 docker0의 직접 통신이 안되는 것도 아니지만 알 수 없는 이유로 꼭 veth를 거친다. |
eth0 | 컨테이너의 인터페이스로, 도커의 브릿지 네트워크로부터 ip를 자동 할당받는다. 직접 지정도 가능하다. |
- 대체로 B 클래스 주소를 사용한다.
● 인터페이스 생성 확인
- 도커 설치 시 docker0 인터페이스가 생성되어있다.
- 컨테이너 생성 시마다 인터페이스가 하나씩 추가된다.
- 생성된 컨테이너의 인터페이스는 자동으로 할당된다.
1-2 Docker Network : 패킷 흐름
컨테이너에서 발생한 패킷이 외부로 전송되는 과정은 다음과 같다.
① Container:eth0 → veth#####
② veth##### → docker0:enp1s0
③ enp1s0 → 외부
컨테이너 생성 후 외부로 ping을 한 번 보낸다.
호스트에서 패킷을 캡쳐한다.
- 보통은 한 번의 요청과 응답이 있으나, 세 번씩 요청과 응답이 일어난 것을 확인할 수 있다.
1-3 Docker Network : network 명령
● 도커에서 제공하는 네트워크
bridge | 기본 네트워크로, 컨테이너 실행 시 자동으로 선택된다. vmware의 NAT 네트워크 생성과 같다. |
host | 호스트의 네트워크를 컨테이너가 직접 이용한다. |
none | 컨테이너가 네트워크를 사용하지 않도록 설정한다. |
사용자 정의 | 사용자가 직접 ip주소를 지정해 생성한다. |
● network 하위 명령
docker network 하위명령 [option] network_name
※ 하위 명령
ls | 네트워크 목록을 표시한다. |
create | 네트워크를 생성한다. |
inspect | 상세한 정보를 확인한다. |
connect/ disconnect |
컨테이너를 네트워크에 연결/연결해제 한다. 연결 시 자동으로 인터페이스가 할당된다. |
rm | 네트워크를 삭제한다. |
- connect 작업 시 기존 네트워크 연결은 그대로 유지되므로 네트워크 변경 시 기존 네트워크 disconnect 작업을 함께 수행한다.
※ ls 옵션
docker network ls [option]
--no-trunc | 자세한 정보를 출력한다. |
-q, --quiet | 네트워크 ID만 출력 |
-f, --filter | *필터 키를 이용해 출력을 필터링한다. |
*필터 키:
driver | 드라이버 지정 |
id | 네트워크 ID |
label | 네트워크에 설정된 라벨(주석) |
name | 네트워크 명 |
scope | 네트워크 스코프 |
type | 네트워크 타입 |
- 기본적으로 bridge, host, none 네트워크가 있다.
※ create 옵션
되도록 네트워크를 직접 생성하여 사용하는 것을 권장한다. 때문에 네트워크 생성 후 컨테이너를 생성하는 것이 일반적이다.
docker network create [option] network_name
-d, --driver | 브릿지, 오버레이 지정 |
--ip-range | 컨테이너에 할당되는 ip 범위 지정 |
--subnet | 서브넷 지정 |
--ipv6 | ipv6 사용 여부 |
--label | 라벨(주석) 지정 |
web-network 네트워크를 생성한다.
- 설정한 서브넷 주소로 인터페이스가 생성되었다.
- web-network 네트워크의 드라이버와 서브넷 주소를 확인할 수 있다.
- web-network 네트워크로 컨테이너 생성 시 해당 네트워크로 생성된 정보를 확인할 수 있다.
※ connect/disconnect
컨테이너를 네트워크에 연결하거나 해제한다. 네트워크가 추가되는 형태로, 연결된 상태에서 다른 네트워크에 연결 가능하다.
docker network connect/disconnect network_name container_name
- bridge 네트워크 연결 시 bridge 네트워크 정보가 추가된 것을 확인할 수 있다.
- 같은 컨테이너에 두 네트워크 지정 시 두 네트워크 대역을 연결할 수 있다.
※ rm
docker network rm network_name
네트워크를 삭제한다.
사전 작업으로 네트워크에 연결된 모든 컨테이너의 연결을 종료해야 한다.
1-4 Docker Network 활용
● 프로세스 충돌
호스트가 이미 사용중인 포트를 쓰는 프로세스가 있을 시 충돌이 일어난다.
- apache와 nginx는 모두 80번 포트를 이용하므로 apache 웹 서버가 돌아가는 호스트에서 nginx 실행 시 실행되지 않는다.
- host 네트워크 이용 시 호스트의 주소를 그대로 쓰므로 게이트웨이 주소와 ip주소는 표시되지 않는다.
내부의 컨테이너들은 포트포워딩을 통해 외부에 서비스를 제공할 수 있다.
- 80번 포트가 겹치는 서비스에 포트포워딩을 하여 동시에 서비스할 수 있다.
- 컨테이너의 기본 네트워크는 bridge이므로 서비스를 위한 컨테이너 구현 시 포워딩 될 포트를 반드시 지정한다.
● 임의의 네트워크 생성
기존 bridge 사용 시 컨테이너간 통신은 ip로만 가능하다.
임의의 네트워크를 사용하는 경우 컨테이너간 통신에 이름도 사용이 가능하다.
- mynet 네트워크 생성 후 해당 네트워크로 컨테이너 생성 시 이름으로 ping이 된다.
● 로드밸런싱
동일한 네트워크 alias명을 가진 컨테이너 생성이 가능하며 이 경우 로드밸런싱 기능을 제공한다.
- alias명 nos에게 ping을 보낼 시 myos1과 myos2에게 번갈아 접근한다.
'일일 정리' 카테고리의 다른 글
Docker image (0) | 2025.05.28 |
---|---|
Data와 Volume (1) | 2025.05.26 |
Container & Process (0) | 2025.05.22 |
Docker container command (2) | 2025.05.21 |
Docker Command, Docker Image & HUB (2) | 2025.05.19 |