방명록
- [Network | Docker] 네트워크2024년 07월 03일 23시 12분 11초에 업로드 된 글입니다.작성자: 이주여이
컨테이너의 eth0 인터페이스는 호스트의 veth … 인터페이스(도커 컨테이너 시작 시 생성)와 연결되며 veth 인터페이스는 docker0 브리지와 바인딩되기 때문에 외부 통신이 가능하다.
이해하기 위해 직접 확인해보자.
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b97d76ab0c2d mysql:5.7 "docker-entrypoint.s…" 3 hours ago Up 3 hours 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mysql 3d3ebab72926 rockylinux/rockylinux "/usr/sbin/init" 19 hours ago Up 12 hours 0.0.0.0:8081->80/tcp, :::8081->80/tcp rockylinux
현재 실행 중인 컨테이너를 출력한다. 전체 컨테이너를 출력하려면 -a 옵션을 붙여주면 된다. 나는 rockylinux로 들어갈 것이다.
[root@localhost ~]# docker exec -it rockylinux /bin/bash
exec
- 현재 실행 중인 컨테이너에 새로운 명령을 부여한다.-i
- 터미널 입력을 받을 수 있다.-t
- 가상 터미널을 할당한다.rockylinux
- 컨테이너 생성 시 지정한 컨테이너 이름/bin/bash
- 컨테이너 내에서 실행할 명령어로 지금은 bash shell을 실행한다.
이후 해당 컨테이너에 bash shell로 접속 후 네트워크 인터페이스 정보를 확인한다.
[root@3d3ebab72926 /]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.4 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet) RX packets 1496 bytes 15634237 (14.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 953 bytes 71539 (69.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
컨테이너 내부에서 ifconfig를 통해 출력된 결과와 그림을 같이 비교하면 1. 도커 컨테이너의 네트워크 인터페이스에는 eth0과 lo 네트워크 인터페이스가 존재한다. 그리고 2. 컨테이너의 eth0 인터페이스는 호스트의 veth … 인터페이스(도커 컨테이너 시작 시 생성)와 연결되어 있으며 3. veth 인터페이스는 docker0 브리지와 바인딩되기 때문에 외부 통신이 가능한 것이다.
veth는 컨테이너 1개 당 하나씩 생성되는 네트워크 인터페이스인데 위에서 설명하기를 veth 인터페이스는 docker0 브리지와 바인딩된다고 설명했다.
[root@localhost ~]# ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:8eff:fefe:2f30 prefixlen 64 scopeid 0x20<link> ether 02:42:8e:fe:2f:30 txqueuelen 0 (Ethernet) RX packets 5951 bytes 1743562 (1.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8329 bytes 96413755 (91.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 1 bytes 576 (576.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1 bytes 576 (576.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth3109825: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::78e6:85ff:fe27:4d11 prefixlen 64 scopeid 0x20<link> ether 7a:e6:85:27:4d:11 txqueuelen 0 (Ethernet) RX packets 953 bytes 71539 (69.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1497 bytes 15634307 (14.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethb9d211c: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::24a2:9ff:fedd:cbb8 prefixlen 64 scopeid 0x20<link> ether 26:a2:09:dd:cb:b8 txqueuelen 0 (Ethernet) RX packets 481 bytes 260087 (253.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 599 bytes 64745 (63.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig를 통해 네트워크 인터페이스를 확인하면 컨테이너 개수 만큼 veth 인터페이스가 생성되어 있는 것을 확인할 수 있다. docker0 브리지 또한 존재한다.
이제 브리지 네트워크를 구성 & 관리할 수 있는 brctl 명령어를 통해 veth 인터페이스와 docker0 브리지가 연결되어있는지 확인한다.
[root@localhost ~]# brctl show docker0 bridge name bridge id STP enabled interfaces docker0 8000.02428efe2f30 no veth3109825 vethb9d211
'Network > Docker' 카테고리의 다른 글
[Network | Docker] Dockerfile (0) 2024.07.05 [Network | Docker] 이미지 (0) 2024.07.04 [Network | Docker] 데이터베이스 외부 원격 접속 (0) 2024.07.03 [Network | Docker] 볼륨 (0) 2024.07.02 [Network | Docker] 컨테이너 애플리케이션 구축 (0) 2024.06.30 다음글이 없습니다.이전글이 없습니다.댓글