1. docker0
- Docker가 설치되면 host에 기본으로 생성되는 네트워크 인터페이스 카드이다.
- 컨테이너의 네트워크 카드를 지정하지 않으면 docker0의 기본적으로 172.16.0.0/16 네트워크를 사용하게 된다.
- docker0의 기본 gateway는 172.17.0.1로 설정되어 있다.
- 도커는 컨테이너에 내부 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을 사용하여 원하는 네트워크를 지정하여 생성할 수 있다.
inspect 명령어를 사용하여 생성한 w1의 상세 정보를 살펴보면 192.168.0.1의 ip가 할당된 것을 볼 수 있다.
ip는 컨테이너에 지정한 네트워크에서 순차적으로 할당된다.
위와 같이 --ip 옵션을 사용하여 지정한 네트워크에서 원하는 ip를 설정하여 컨테이너를 실행할 수 있다.
inspect 명령어를 사용하여 생성한 w2의 상세 정보를 살펴보면 192.168.0.101의 ip가 할당된 것을 볼 수 있다.
ifconfig로 호스트 pc의 네트워크 인터페이스 카드 정보를 확인하면 위처럼 veth로 시작하는 네트워크 인터페이스 카드가 컨테이너 개수 만큼 생성된 것을 볼 수 있다.
[컨테이너에 할당된 네트워크 연결 및 끊기]
docker network connect
docker network disconnect
네트워크 연결을 끊게 되면 ifconfig에서 나타나던 veth도 없어지게 된다
connect 명령어로 다시 네트워크를 연결할 수 있으며 --ip 옵션을 사용하면 ip를 지정하여 연결할 수 있다.
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이 동작한다.
cat /etc/hosts를 확인해보면 c1이 지정되어 있는 것을 볼 수 있다.
--link 옵션을 여러개 사용하여 여러 컨테이너를 hosts에 등록할 수 있으며 c1:docker1과 같이 지정하면 c1 컨테이너에 대해 docker 1으로 hostname을 지정하게 된다.
ping을 테스트하면 docker1, docker2, c1, c2 모두 인식하여 ping이 동작하는 것을 볼 수 있다.
'Docker' 카테고리의 다른 글
Dockerfile 작성(Web, FTP, DNS 구축) (0) | 2021.07.08 |
---|---|
Docker 컨테이너에 자원 할당 및 관리 (0) | 2021.07.08 |
Docker 이미지 생성 및 Save&Load 와 Export&Import (0) | 2021.07.07 |
Docker Volume 공유 사용하기 (0) | 2021.07.07 |
Docker 명령어 실습 (3) (0) | 2021.07.07 |