Docker

Docker 네트워크 설정 및 link 기능

Joon0464 2021. 7. 8. 15:34

1. docker0

  • Docker가 설치되면 host에 기본으로 생성되는 네트워크 인터페이스 카드이다.
  • 컨테이너의 네트워크 카드를 지정하지 않으면 docker0의 기본적으로 172.16.0.0/16 네트워크를 사용하게 된다.
  • docker0의 기본 gateway는 172.17.0.1로 설정되어 있다.

host pc에서 ifconfig로 정보를 살펴본 모습이다.
도커 Bridge의 네트워크 구조

  • 도커는 컨테이너에 내부 IP를 순차적으로 할당한다.
  • 내부 IP는 컨테이너 재시작시 변경될 수 있다.
  • 내부 IP는 컨테이너간의 통신만 가능한 내부망 네트워크로 외부망과의 연결이 필요하다.
  • 컨테이너를 생성하면 호스트 PC에 veth(Virtual Ethernet)의 네트워크 인터페이스를 생성한다.
  • 컨테이너가 외부와 통신이 필요할 때 각 컨테이너에 부여된 veth 네트워크 인터페이스를 통하여 통신한다.
  • docker0 Bridge는 veth 인터페이스와 바인딩되어 호스트의 eth0 인터페이스와 이어주는 역할이다.

 

2. docker network 명령어

[docker network 확인]

docker network ls

docker netwok ls : 생성되어 있는 네트워크 목록을 출력한다.

docker는 bridge, host, none 총 3가지의 네트워크를 생성할 수 있다. 기본적으로 3가지 종류의 네트워크 카드가 각 1개씩 생성되어 있는 모습이다.

  • Bridge: 컨테이너는 동일한 네트워크에 존재한다. 별도로 지정하지 않으면 기본값으로 Bridge카드가 선택된다.
  • Host: host의 네트워크를 공유한다.
  • none: 어떠한 네트워크도 할당하지 않는다.

 

[docker network 상세 정보 확인]

docker network inspcet

docker network inspect: 특정 네트워크 카드의 상세한 정보를 볼 수 있다. 네트워크 아이디를 직접 지정하거나 'bridge'와 같이 네트워크로 지정할 수 있다.

 

[Bridge 네트워크 생성]

docker network create

docker network create: 네트워크를 사용자 설정에 맞게 생성한다.

--subnet 옵션으로 네트워크 대역 지정 가능

--ip-range 옵션으로 할당 가능한 IP 범위 지정 가능

--gateway 옵션으로 게이트웨이 지정 가능

netcard는 네트워크 카드 이름을 netcard로 지정한 것임

--driver 옵션으로 네트워크 종류를 선택가능(bridge,host,none 등)

 

[컨테이너를 네트워크 카드 지정하여 실행]

위와 같이 --net을 사용하여 원하는 네트워크를 지정하여 생성할 수 있다.

docker inspect w1

inspect 명령어를 사용하여 생성한 w1의 상세 정보를 살펴보면 192.168.0.1의 ip가 할당된 것을 볼 수 있다.

ip는 컨테이너에 지정한 네트워크에서 순차적으로 할당된다.

위와 같이 --ip 옵션을 사용하여 지정한 네트워크에서 원하는 ip를 설정하여 컨테이너를 실행할 수 있다.

docker inspect w2

inspect 명령어를 사용하여 생성한 w2의 상세 정보를 살펴보면 192.168.0.101의 ip가 할당된 것을 볼 수 있다.

ifconfig

ifconfig로 호스트 pc의 네트워크 인터페이스 카드 정보를 확인하면 위처럼 veth로 시작하는 네트워크 인터페이스 카드가 컨테이너 개수 만큼 생성된 것을 볼 수 있다.

 

[컨테이너에 할당된 네트워크 연결 및 끊기]

docker network connect
docker network disconnect

네트워크 연결을 끊게 되면 ifconfig에서 나타나던 veth도 없어지게 된다

connect 명령어로 다시 네트워크를 연결할 수 있으며 --ip 옵션을 사용하면 ip를 지정하여 연결할 수 있다.

docker inspect로 192.168.0.102가 할당된 것 확인

3. Docker link 기능 사용

docker run -itd --name c1 centos:7 -> --link 옵션은 연결될 대상이 우선 필요하기 때문에 c1 컨테이너를 한 개 생성한다.

docker run -itd --name c2 --link c1 centos:7 -> --link 옵션으로 c1을 지정하고 c2 컨테이너를 생성한다.

docker ps - a로 컨테이너 동작을 확인한다.

docker attach c2로 c2 컨테이너에 접속한다.

ping -c 1 c1 명령어로 c1에 핑을 1번 테스트하면 --link로 c1을 지정했기 때문에 정상적으로 ping이 동작한다.

/etc/hosts 파일 확인

cat /etc/hosts를 확인해보면 c1이 지정되어 있는 것을 볼 수 있다.

--link 옵션을 여러개 사용하여 여러 컨테이너를 hosts에 등록할 수 있으며 c1:docker1과 같이 지정하면 c1 컨테이너에 대해 docker 1으로 hostname을 지정하게 된다.

ping을 테스트하면 docker1, docker2, c1, c2 모두 인식하여 ping이 동작하는 것을 볼 수 있다.