도커 네트워크 이해

Seasoning·2021년 9월 11일
1

도커 컨테이너

목록 보기
1/2

Host와 도커 컨테이너 통신하기

IP의 고갈을 막기 위해서 디바이스에서 사설IP를 사용하고 공인IP 한 개를 설정하여 여러 사설 IP들이 라우터를 통해 인터넷망과 통신을 한다. 이를 NAT라고 한다.
이와 유사하게 디바이스 하나에 여러 컨테이너를 구동하는 경우, host의 포트와 각 컨테이너의 포트를 매핑하여 통신이 되도록한다.

HOST port 80 --> webserver1 port 80
HOST port 8080 --> webserver2 port 80
HOST port 8081 --> webserver3 port 80

 sudo docker container run -d -p 80:80 --name webserver1 httpd
 sudo docker container run -d -p 8080:80 --name webserver2 httpd
 sudo docker container run -d -p 8081:80 --name webserver3 httpd

Host IP와 각각의 port로 web에서 접속 시도를 하면 실행이 된다.



도커 컨테이너와 통신할 수 있도록 도와주는 docker0


사설 ip와 공인ip를 매핑시켜 인터넷 통신을 할 수 있도록 도와주는 라우터가 있듯이 도커를 생성하면 가상 bridge인 docker0가 생성이 되어 직접적으로 host가 테이너에 접속하는게 아니라 브릿지를 통해 접속을 한다.
게이트웨이의 역할을 하기 때문에 게이트웨이의 ip인 끝짜리 1을 사용한다.


컨테이너를 생성하면 위와 같이 네트워크가 생성되는데 이는 각각의 컨테이너가 가진 NIC 즉 랜카드 같은 거다. docker0는 이 각각의 네트워크와 host를 연결하여 통신할 수 있도록 도와준다.

네트워크 구성 방식

1) Bridge


별도 설정 없으면 기본적으로 생성되는 방식. 같은 Bridge 네트워크에 연결된 컨테이너들은 같은 네트워크 대역에 존재. 서로 통신이 가능해진다. 별도로 브릿니 네트워크 생성해서 컨테이너 띄우면 네트워크 대역이 달라서 통신이 불가능해진다.

각각의 IP를 확인

sudo docker container inspect --format="{{ .NetworkSettings.IPAddress }}" webserver1 webserver2 webserver3


게이크웨이에 할당 된 1번 후에 각각 순서대로 번호가 매겨져 생성이 된다.

2) Host


컨테이너가 host의 ip를 그대로 이용하는 경우. 리눅스의 경우에만 사용 가능.

sudo docker container run -it --network host --name ubuntu-host ubuntu:18.04


host 방식으로 컨테이너를 만들면 프롬프트가 root로 변경이 된다.
이 상태에서는 ifconfig 명령어가 없어서 tool 설치를 해야 한다.

/# apt-get update
/# apt-get install net-tools


새로 생성한 컨테이너의 ip가 host의 ip와 동일하다.
즉 일반적인 브릿지처럼 호스트 위에 컨테이너가 동작하는게 아니라 호스트에 컨테이너가 프로그램처럼 동작하고 있다.

3) none

아무 네트워크를 컨테이너와 연결하지 않은 상태. 외부로 부터 격리

sudo docker container run -it --network none --name ubuntu-none ubuntu:18.04
/# apt-get update


컨테이너 생성 후 apt-get을 실행하면 외부와 통신이 막혀 있기 때문에 실행이 되지 않는다.

도커 네트워크 명령어

1) ls - 네트워크 목록 조회

sudo docker network ls
sudo docker network ls --filter driver=bridge


위에서 생성한 컨테이너 중 bridge 항목만 조회

2) create - 네트워크 생성

sudo docker network create --driver=bridge new-bridge

3) connect - 컨테이너 연결

sudo docker network connect new-bridge webserver1
sudo docker container inspect webserver1


최초 컨테이너 생성 당시 있던 bridge와 함께 새로 연결한 new-bridge가 연결되었다.
각각의 네트워크별로 ip대역이 다르게 잡혔기 때문에 하나의 컨테이너를 두가지 ip대역에서 공유가 가능하다.

sudo docker container run -d -p 8082:80 --name=webserver4 --net=new-bridge httpd
sudo docker container inspect webserver4


컨테어니 생성당시 --net 옵션으로 네트워크를 지정하면 지정한 네트워크로만 연결되어 생성된다.

4) disconnect - 네트워크 해제

sudo docker network disconnect new-bridge webserver1
sudo docker container inspect webserver1

4) inspect - 네트워크 상세 조회

sudo docker network inspect new-bridge

5) 네트워크 삭제

sudo docker network rm new-bridge
profile
적절하게 소금을 칠 줄 아는 엔지니어되기

0개의 댓글