도커는 컨테이너에 내부 IP를 순차적으로 할당
내부 IP는 컨테이너를 재시작할 때마다 변경될 수 있음
내부 IP는 도커가 설치된 호스트, 즉 내부망에서만 쓸 수 있는 IP이므로 외부와 연결될 필요가 있음
컨테이너를 시작할 때마다 호스트에 veth(Virtual Ethernet) 라는 네트워크 인터페이스를 생성
도커 컨테이너끼리의 소통을 어떻게 이루어질까?
이에 대한 해답은 docker network
를 통해서 얻을 수 있다.
docker network list
> NETWORK ID NAME DRIVER SCOPE
0f62c8168040 bridge bridge local
89f060622375 host host local
6f98b435e86b none null local
위와 같이 docker network 목록을 얻을 수 있다.
새로운 network 는 아래와 같이 추가 할 수 있다.
docker network create --driver bridge test-network
> NETWORK ID NAME DRIVER SCOPE
0f62c8168040 bridge bridge local
89f060622375 host host local
6f98b435e86b none null local
5f4b59bb3bd4 test-network bridge local
컨테이너를 특정 네트워크에 연결하려면 컨테이너를 다음과 같이 생성하면 된다.
docker run -itd --name cont1 --network test-network alpine
docker run -itd --name cont2 --network test-network alpine
상단과 같이 cont1, cont2 가 같은 네트워크인 test-network 에 포함되어 있을 경우,
ip 가 아닌 해당 컨테이너의 이름으로 서로에게 접근이 가능하다.
예를 들어서, cont1 에서 cont2 로 하단과 같이 ping 을 보내는 것이 가능하다
ping -c 2 cont2