Docker Network


Docker Network

docker의 컨테이너에 외부 접속을 하기 위해서는 포트포워딩이 필요 (-p 옵션)

포트 번호를 적어줄 수 있는데, 안적어주면 3만번대의 랜덤한 번호를 준다. 

할당된 포트번호는 "docker container ps"로 확인 가능

 

네트워크 드라이브 타입

1. Bridge

컨테이너를 실행하면 docker 서버와 bridge로 연결된다.

docker서버는 172.17.0.1 이고 컨테이너는 순차적으로 172.17.0.2 , 172.17.0.3 ... 으로 할당됨.

컨테이너가 인터넷을 하기위해 사용

더보기
[vagrant@dcentos ~]$ docker run -d --name apache httpd
627c351a569f556fa2c62c595530608c4fab0fe2dfaf88f2810a6f6ab8933c69

[vagrant@dcentos ~]$ docker run -d --name centos8 -it centos:8
3bfd5d3497daf6d948c7da9b32f4d1c794d94eb9d96179d6541449d6e8e5af5a

[vagrant@dcentos ~]$ docker ps
CONTAINER ID   IMAGE      COMMAND              CREATED         STATUS         PORTS     NAMES
3bfd5d3497da   centos:8   "/bin/bash"          4 seconds ago   Up 3 seconds             centos8
627c351a569f   httpd      "httpd-foreground"   2 minutes ago   Up 2 minutes   80/tcp    apache

[vagrant@dcentos ~]$ docker inspect apache |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",

[root@3bfd5d3497da /]# ip addr
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
93: eth0@if94: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

[root@3bfd5d3497da /]# ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.3

[vagrant@dcentos ~]$ ip addr
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 61352sec preferred_lft 61352sec
    inet6 fe80::5054:ff:fe4d:77d3/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fe:a6:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.25.10/24 brd 192.168.25.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fefe:a674/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:6e:26:b3:78 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:6eff:fe26:b378/64 scope link
       valid_lft forever preferred_lft forever

컨테이너 격리

시나리오

나는 httpd와 mysql centos:8을 실행하고

mysql은 bridge와의 연결을 해제하고 httpd랑만 통신 가능하게 하고 싶다.

더보기
# 브릿지 연결 해제
[vagrant@dcentos ~]$ docker network disconnect bridge mydb
[vagrant@dcentos ~]$ docker inspect mydb |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "",

# 브릿지 생성
[vagrant@dcentos ~]$ docker network create --driver bridge mybridge
77da9e5cd839b4e4db2b37995f67babf6bf4c32fdc910471a72ef9317ab154bc

# httpd와 mysql 브릿지 연결
[vagrant@dcentos ~]$ docker network connect mybridge apache
[vagrant@dcentos ~]$ docker network connect mybridge mydb

# 네트워크 확인
[vagrant@dcentos ~]$ docker inspect mydb |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAMConfig": {},
                    "IPAddress": "172.18.0.3",
                    
[vagrant@dcentos ~]$ docker inspect apache |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",
                    "IPAMConfig": {},
                    "IPAddress": "172.18.0.2",
                    
[vagrant@dcentos ~]$ docker inspect centos8 |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3",
                    
# ping을 통해 통신 확인
[vagrant@dcentos ~]$ docker exec -it centos8 /bin/bash

# mydb로는 안됨
[root@3bfd5d3497da /]# ping -c 1 172.18.0.3
PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data.

--- 172.18.0.3 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

# apache로는 됨
[root@3bfd5d3497da /]# ping -c 1 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.057 ms

--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.057/0.057/0.057/0.000 ms

 

2. Host

host는 기본으로 깔린것은 삭제도 안되고, 하나밖에 못가짐 (즉, 생성안됨)

서버와 같은 네트워크로 사용가능

더보기
# host 타입의 네트워크로 centos8 생성
[vagrant@dcentos ~]$ docker run -d -it --network host --name centos centos:8
7b6de2e27635e73cf51c65d8ffae656eb88be1a067f1b1ca467d300974a2774e

# ip 구성 확인
[vagrant@dcentos ~]$ docker inspect centos |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAMConfig": null,
                    "IPAddress": "",

# 접속
[vagrant@dcentos ~]$ docker exec -it centos /bin/bash

# ip 확인
[root@dcentos /]# ip addr
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute eth0
       valid_lft 58885sec preferred_lft 58885sec
    inet6 fe80::5054:ff:fe4d:77d3/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fe:a6:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.25.10/24 brd 192.168.25.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fefe:a674/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:6e:26:b3:78 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:6eff:fe26:b378/64 scope link
       valid_lft forever preferred_lft forever

# 컨테이너가 아니라 서버인것 같지만, 컨테이너에 접속 된것임
[root@dcentos /]# id vagrant
id: 'vagrant': no such user

# 네트워크와 관련된 파일들은 서버와 같은 파일로 사용됨
[root@dcentos /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          40G  5.7G   35G  15% /
tmpfs            64M     0   64M   0% /dev
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sda1        40G  5.7G   35G  15% /etc/hosts !!!!!!!!!!!!!!!!!!!!!!!!!!!!
tmpfs           1.9G     0  1.9G   0% /proc/asound
tmpfs           1.9G     0  1.9G   0% /proc/acpi
tmpfs           1.9G     0  1.9G   0% /proc/scsi
tmpfs           1.9G     0  1.9G   0% /sys/firmware
[root@dcentos /]# exit
exit
[vagrant@dcentos ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.7M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1        40G  5.7G   35G  15% /
tmpfs           379M     0  379M   0% /run/user/1000

3. null

host와 마찬가지로 하나만 가질 수 있으며, 생성 삭제 안됨

보안상으로 엄격한, 인터넷이 필요없는 환경의 컨테이너에서 네트워크 드라이버 없이 하는것

더보기
# null 타입으로 cent 생성
[vagrant@dcentos ~]$ docker run -d -it --network none --name cent centos:8
3558c827495e7a7a4640b025c710f6979778f50360a448ac59278ca94b3e5d88

# 접속
[vagrant@dcentos ~]$ docker exec -it cent /bin/bash

# ip 확인
[root@3558c827495e /]# ip addr
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
# 아무것도 없음
## 보안상으로 엄격한, 인터넷이 필요없는 환경의 컨테이너에서 사용

'Container > Docker' 카테고리의 다른 글

Docker Hub에 업로드하기  (0) 2024.03.06
Dockerfile 명령어, Multi-stage build  (0) 2024.03.05
Container image  (0) 2024.03.05
Docker 설정 및 기본 명령어  (0) 2024.03.04
Container 개요 및 Docker 설치  (0) 2024.03.04

+ Recent posts