클라우드 + DevOps/Docker

Docker 네트워크 실습 :: 서버 라우터 연결

gamjadori 2024. 2. 19. 16:03
728x90

<Docker 네트워크 토폴로지>

  • 프론트엔드: 192.168.58.0/24
  • 백엔드: 192.168.57.0/24

1. 네트워크 생성

ubuntu@host1:~$ docker network create --driver bridge --subnet 192.168.58.0/24 --ip-range 192.168.58.0/24 --gateway 192.168.58.1 front-net
93e52c12f35a98719f5e62d1363681f8519244e5014b974169b8b87a51e205be
ubuntu@host1:~$ docker network create --driver bridge --subnet 192.168.57.0/24 --ip-range 192.168.57.0/24 --gateway 192.168.57.1 back-net
b9f7835da811d5f7e6d9c6a53c15233ad0d530558d0279998858b2a07e6dca27

<확인>

ubuntu@host1:~$ docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
**b9f7835da811   back-net    bridge    local**
711070d16ea3   bridge      bridge    local
**93e52c12f35a   front-net   bridge    local**
a10c647d79d1   host        host      local
5d20ddd4847a   mynet       bridge    local
2881784d86b9   mynet2      bridge    local
2785de26c8d7   none        null      local

 

2. 레이어 확인

ubuntu@host1:~$ docker network inspect front-net
ubuntu@host1:~$ docker network inspect back-net

 

3. 컨테이너 생성

ubuntu@host1:~$ docker container run --name=my-web -itd --net=front-net ubuntu:14.04
c09d2968612d66befdbcd00ff98b0e7f234057c0b525480400c14ecdcc1ea44a
ubuntu@host1:~$ docker container run --name=my-was -itd --net=back-net ubuntu:14.04
19a751877c3099ca76b5381adbd090af8e4f42de80d0b8dfc9b50b048a756f2e
ubuntu@host1:~$ docker container run --name=my-db -itd --net=back-net ubuntu:14.04
b800f6978568e62df49967a0f2ed1a01899daa947c2b54b0d3166b2e24b4b84b

<확인>

ubuntu@host1:~$  docker container ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
c09d2968612d   ubuntu:14.04   "/bin/bash"   2 minutes ago   Up 2 minutes             my-web
b800f6978568   ubuntu:14.04   "/bin/bash"   3 minutes ago   Up 3 minutes             my-db
19a751877c30   ubuntu:14.04   "/bin/bash"   3 minutes ago   Up 3 minutes             my-was

 

4. 라우터 설정

  • docker container exec 컨테이너 이름 route
  • my-web
ubuntu@host1:~$ docker container exec my-web route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.58.1    0.0.0.0         UG    0      0        0 eth0
192.168.58.0    *               255.255.255.0   U     0      0        0 eth0
  • my-db
ubuntu@host1:~$ docker container exec my-db route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.57.1    0.0.0.0         UG    0      0        0 eth0
192.168.57.0    *               255.255.255.0   U     0      0        0 eth0

 

<설정 확인>

  • IP 확인: docker container exec (컨테이너 이름) ip a

<my-web> 프론트엔드

  • 192.168.58.2/24
ubuntu@host1:~$ docker container exec my-web ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:3a:02 brd ff:ff:ff:ff:ff:ff
    **inet 192.168.58.2/24** brd 192.168.58.255 scope global eth0
       valid_lft forever preferred_lft forever

<my-db> 백엔드

  • 192.168.57.3/24
ubuntu@host1:~$ docker container exec my-db ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:39:03 brd ff:ff:ff:ff:ff:ff
    **inet 192.168.57.3/24** brd 192.168.57.255 scope global eth0
       valid_lft forever preferred_lft forever

<my-was> 백엔드

  • 192.168.57.2/24
ubuntu@host1:~$ docker container exec my-was ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:39:02 brd ff:ff:ff:ff:ff:ff
    **inet 192.168.57.2/24** brd 192.168.57.255 scope global eth0
       valid_lft forever preferred_lft forever

 

<ping 확인>

  • docker container exec (ping 출발지 이름) ping -c 3 (ping 받을 컨테이너 / ip 주소)
  • -c 3: 패킷을 세 번 보내라

<my-web > my-was 통신>

ubuntu@host1:~$ docker container exec my-web ping -c 3 192.168.57.2
PING 192.168.57.2 (192.168.57.2) 56(84) bytes of data.

--- 192.168.57.2 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2055ms
  • 우리의 목표는 ping 통신이 되는거지만, 아직 라우터 연결을 하지 않아 백엔드에서 프론트 간의 ping이 안 됨
  • my-was > my-db (같은 백엔드 서버)
ubuntu@host1:~$ docker container exec my-was ping -c 3 my-db
PING my-db (192.168.57.3) 56(84) bytes of data.
64 bytes from my-db.back-net (192.168.57.3): icmp_seq=1 ttl=64 time=0.053 ms
64 bytes from my-db.back-net (192.168.57.3): icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from my-db.back-net (192.168.57.3): icmp_seq=3 ttl=64 time=0.121 ms

--- my-db ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2082ms
rtt min/avg/max/mdev = 0.043/0.072/0.121/0.035 ms
ubuntu@host1:~$ docker container exec my-was ping -c 3 192.168.57.3
PING 192.168.57.3 (192.168.57.3) 56(84) bytes of data.
64 bytes from 192.168.57.3: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 192.168.57.3: icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from 192.168.57.3: icmp_seq=3 ttl=64 time=0.774 ms

--- 192.168.57.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2052ms
rtt min/avg/max/mdev = 0.048/0.291/0.774/0.341 ms
  • 같은 백엔드 서버 간은 ping이 됨

 

5. 확인 후 라우터 연결

  • 프론트엔드 my-web 라우터 연결
ubuntu@host1:~$ docker network connect back-net my-web
ubuntu@host1:~$ docker container exec my-web route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.57.1    0.0.0.0         UG    0      0        0 eth1
192.168.57.0    *               255.255.255.0   U     0      0        0 eth1
192.168.58.0    *               255.255.255.0   U     0      0        0 eth0

<ping 연결 확인>

  • my-web > my-was
ubuntu@host1:~$ docker container exec my-web ping -c 3 192.168.57.2
PING 192.168.57.2 (192.168.57.2) 56(84) bytes of data.
64 bytes from 192.168.57.2: icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from 192.168.57.2: icmp_seq=2 ttl=64 time=0.123 ms
64 bytes from 192.168.57.2: icmp_seq=3 ttl=64 time=0.102 ms

--- 192.168.57.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2037ms
rtt min/avg/max/mdev = 0.076/0.100/0.123/0.020 ms

  • my-web > my-db
ubuntu@host1:~$ docker container exec my-web ping -c 3 my-db
PING my-db (192.168.57.3) 56(84) bytes of data.
64 bytes from my-db.back-net (192.168.57.3): icmp_seq=1 ttl=64 time=0.059 ms
64 bytes from my-db.back-net (192.168.57.3): icmp_seq=2 ttl=64 time=0.037 ms
64 bytes from my-db.back-net (192.168.57.3): icmp_seq=3 ttl=64 time=0.076 ms

--- my-db ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2046ms
rtt min/avg/max/mdev = 0.037/0.057/0.076/0.017 ms
ubuntu@host1:~