본문 바로가기

IT 엔지니어/CLOUD

Docker Network 심화

[Network]

docker network ls

[FILTERING]

docker network ls 
--filter driver=bridge
--filter scope=local

[Detail]
docker network ls --no-trunc

NETWORK ID                                                         NAME         DRIVER    SCOPE
86a7d65c511b15434f7d64de7dbda022f364a5ec374ebd603fff18882e424754   bridge       bridge    local
00f9d8aed7e1312c6b9f5ee221a521d977ba0d31491f81f0366a0a15ea82a03c   host         host      local
dafe19f5b76dc89f53074488095cf7da8577d81640c1112686b09b9bb2dffcaa   mynet        bridge    local
3e5dd8984a4acce741d96192590dc16581d41dd2787879673a0b0b0dc17111f8   none         null      local
19b6c9fb38a75bf6145c8527e0deb9095c73245d78635cadc78516f32f662e69   root_wpnet   bridge    local

[ Network ID 간단 출력 -q ]

docker network ls -q 

6a7d65c511bw
00f9d8aed7e1
dafe19f5b76d
3e5dd8984a4a
19b6c9fb38a7

docker network ls -q --filter id=861
docker run -it --add-host docker1:192.168.10.11 centos:8

임시 변경 후
ip addr add 192.168.11.11/24 dev eth0

원래 외부에서 도커 호스트 IP로만 접속 가능
임시로 해당 IP 주소로 웹 접속 가능
--------------------------------
docker run -d --dns 8.8.8.8 

 

도커 컨테이너 접속 시 DNS 변경 확인

 

❗ --add-host나 -p, --dns 등의 Docker 옵션은 컨테이너 내부 동작에만 영향을 미치고, 도커 호스트(리눅스 시스템)의 네트워크 인터페이스에는 아무 IP도 추가하지 않는다.


🔎 결론

docker run -d \\
  --dns 8.8.8.8 \\
  --add-host docker1:192.168.11.11 \\
  --name httpd \\
  -p 8181:80 \\
  -v myweb:/var/local/apache2/htdocs \\
  httpd

/etc/hosts 파일에 한 줄을 추가하는 거야:

이렇게 컨테이너를 실행했어도:

❌ 192.168.11.11은 ifconfig 미출력

  • 192.168.11.11은 도커 네트워크 외부 IP 아님
  • 단순히 컨테이너 안에서 docker1이라는 이름을 192.168.11.11로 인식하게끔 도와주는 용도 (/etc/hosts에 추가됨)

✅ 확인 방법

docker exec -it httpd bash

cat /etc/hosts

 

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::	ip6-localnet
ff00::	ip6-mcastprefix
ff02::1	ip6-allnodes

ff02::2	ip6-allrouters

192.168.11.11	docker1

172.17.0.2	33228d62ad13

즉, 컨테이너 안에서는 ping docker1 하면 192.168.11.11로 간다 → 내부 DNS처럼 작동


🔧 ifconfig에서 192.168.11.11이 뜨게 하려면?

도커 호스트가 해당 IP를 실제로 갖고 있어야 가능

👉 방법 1: 도커 호스트에 서브 IP로 추가

sudo ip addr add 192.168.11.11/24 dev ens 160

→ 이러면 ifconfig나 ip a에 192.168.11.11이 뜨게 돼

→ 외부에서 http://192.168.11.11:8181 접속도 가능함


요약 정리

옵션 설명 ifconfig에 뜨는가?

--add-host docker1:192.168.11.11 컨테이너 내부 DNS 설정 (/etc/hosts)
--dns 8.8.8.8 컨테이너의 DNS 서버 설정
-p 8181:80 호스트 8181 → 컨테이너 80 포트 연결
ip addr add ... 호스트 네트워크 인터페이스에 IP 추가

필요하면 도커 네트워크를 커스터마이징해서 bridge 말고 macvlan으로 진짜 IP를 붙이게 만드는 방법도 있음

 

 

 

DOCKER NETWORK

컨테이너 간의 통신 
컨테이너와 외부 네트워크 연결제어

🚦 기본 네트워크 드라이버 종류

드라이버 설명 특징

bridge (기본) 가상 브리지 네트워크 기본 도커 네트워크, 컨테이너끼리 통신 가능
host 호스트 네트워크와 공유 성능 빠름, 포트 충돌 주의
none 네트워크 없음 네트워크 격리 필요할 때
macvlan 물리 네트워크에 직접 연결 컨테이너에 IP 할당 가능 (실제 네트워크처럼)
overlay 다중 호스트 간 통신용 (Swarm) 클러스터 환경에서 사용
docker network create -d bridge [mynet]

Vmware - Network Editor - Vmnet 추가와 동일 원리
[docker1 ~]# ifconfig

br-19b6c9fb38a7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255

br-d66ab32a78df: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 172.19.255.255

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
       

docker network ls

NETWORK ID     NAME         DRIVER    SCOPE
86a7d65c511b   bridge       bridge    local
00f9d8aed7e1   host         host      local
d66ab32a78df   mynet        bridge    local
3e5dd8984a4a   none         null      local
19b6c9fb38a7   root_wpnet   bridge    local

컨테이너 사용 시 이미지 및 컨테이너 삭제 불가

네트워크 이용 시에도 해당 네트워크 삭제 불가

1️⃣ bridge 네트워크 (기본값)

기본 bridge라는 네트워크 있음.

docker run -d --name web1 nginx
docker run -d --name web2 nginx

미지정 시 브릿지 네트워크

docker run -d --network mynet centos

지정 시 해당 브릿지 네트워크 할

  • 같은 bridge에 있을 경우, web1, web2 이름으로 서로 통신 가능
  • 격리된 내부 IP를 씀 (172.17.0.x 대역 등)
docker network inspect bridge

  • 내부 IP 확인 가능

2️⃣ host 네트워크

docker run --network host -d nginx

  • 컨테이너가 도커 호스트와 동일한 네트워크 사용
  • p 포트 매핑 필요 없음 (이미 공유됨)
  • 주의: 여러 컨테이너가 동일 포트를 쓰면 충돌 가능

3️⃣ none 네트워크

docker run --network none -it ubuntu bash

  • 완전한 네트워크 격리
  • 보안 테스트, 네트워크 없는 테스트 등에 유용

4️⃣ macvlan 네트워크 (중요!)

컨테이너에 독립된 IP를 부여해서 실제 네트워크에 붙게 함

docker network create -d macvlan \\
  --subnet=192.168.100.0/24 \\
  --gateway=192.168.100.1 \\
  -o parent=eth0 \\
  macvlan_net

→ 그런 다음 컨테이너 실행:

docker run --rm -it --network macvlan_net --name test1 alpine

  • 이제 test1 컨테이너는 192.168.100.x IP를 가지게 되고
  • 실제 네트워크에서도 ping이 가능함

📌 단점: macvlan은 호스트와 컨테이너 간 직접 통신이 안 됨 → 별도 설정 필요


5️⃣ overlay 네트워크 (Swarm Mode)

  • 여러 호스트에서 도커 컨테이너끼리 통신하도록 해주는 네트워크
  • Swarm 클러스터 환경에서 주로 사용됨

'IT 엔지니어 > CLOUD' 카테고리의 다른 글

Docker Resource Limit  (0) 2025.05.13
Docker -1  (0) 2025.05.13
Docker file  (0) 2025.05.11
Docker Network  (0) 2025.05.11
Docker network  (0) 2025.05.10