일일 정리

Docker Network

mysecurity 2025. 5. 23. 13:52

목차

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