Default Networks


  • Docker 를 설치하면 자동으로 3개의 Network 를 생성함
    • Bridge
    • none(null)
    • host
  • Container 를 다른 Network 와 연결하려면 아래와 같이 Network 를 지정해야함
    • docker run Ubuntu --network=none
    • docker run Ubuntu --network=host

Bridge Network

  • Container 에서 사용하는 Default Network 로 Docker 가 Host 에 생성한 Private Internal Network
  • 모든 Container 는 기본적으로 이 Network 에 연결되며 보통 172.17 로 시작하는 내부 IP 가 할당됨
    • 이 내부 IP 를 사용해 Container 끼리 엑세스할 수 있음

none Network

  • Container 가 아무런 Network 에도 속하지 않음
    • 즉, 외부 Network 나 다른 Container 에 엑세스할 수 없음

host Network

  • Container 를 Host Network 에 연결하는 방식
  • 포트 매핑 없이 Host 의 포트로 외부 접속이 가능함

User-Defined Networks


  • Docker 는 기본적으로 하나의 내부 Bridge Network 만 생성
  • docker network create --driver bridge --subnet 182.18.0.0/16 custom-isolated-network
    • 위 명령어로 User-Defined Network 생성 가능
  • docker network ls 명령어로 모든 Network 목록을 표시 가능

Inspect Network


  • docker inspect {CONTAINER ID} 명령어를 통해 Network 설정과 IP 주소 확인 가능

Embedded DNS


  • Docker Host 에 있는 모든 Container 는 이름으로 서로 엑세스할 수 있음
  • Docker 에는 Container 들이 이름으로 서로 엑세스할 수 있게 도와주는 DNS 서버가 내장되어 있음
    • 내장 DNS 서버는 항상 127.0.0.11 주소로 작동함
  • Docker 는 Network Namespace 를 사용해 각 Container 에 별개의 Namespace 를 생성함
  • 그리고 Virtual Ethernet Pair 을 사용해 Container 를 연결

실습


M1 macOS 에서 Linux 가상머신 생성하기

# lima 설치
 meatsby ~ brew install lima
Warning: lima 2.0.2 is already installed and up-to-date.
To reinstall 2.0.2, run:
  brew reinstall lima
 
# limactl start 로 linux-vm 생성
 meatsby ~ limactl start
? Creating an instance "default"  [Use arrows to move, type to filter]
> Proceed with the current configuration
  Open an editor to review or modify the current configuration
  Choose another template (docker, podman, archlinux, fedora, ...)
  Exit
 
# 처음 vm 생성 후 lima 관련 설정파일이 생성된다
 meatsby ~ ls ~/.lima
_config default
 
# vm 에 접속 후 root 로 변경
 meatsby ~ lima
 meatsby@lima-default:~$ sudo -i

Linux 기반으로 돌아가는 Docker 를 자세히 이해하기 위해 Linux 환경을 구성해보자. macOS 에서 Linux 가상머신을 실행하는 방법 중 CNCF Incubating Project 인 Lima 를 활용할 수 있다.

docker0 와 veth

# docker 설치
root@lima-default:~# curl -fsSL https://get.docker.com | sudo sh
 
# bridge-utils 설치
root@lima-default:~# apt install bridge-utils
 
root@lima-default:~# whatis brctl
brctl (8)            - ethernet bridge administration
 
# 확인해보면 docker 가 생성한 docker0 bridge 가 보인다
root@lima-default:~# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.52a2724b9bb3	no
 
# Container 3개 만들고
root@lima-default:~# docker run -it -d ubuntu:25.10
1e17162852539c94d59688ec70b0db207bb193e6b31efa854e5c6ff7b1742829
root@lima-default:~# docker run -it -d ubuntu:25.10
d63ceb0602e458aee988e0e95ecb5974e327a3f13c8ef875b7fee86bbfa512ed
root@lima-default:~# docker run -it -d ubuntu:25.10
cd8ec41d1eceb7fc56380c49a444f6ec5ab96dc619a91044008de57d4cb3a670
 
# docker0 를 확인해보면 veth 3개가 연결된 것을 확인할 수 있다
root@lima-default:~# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.52a2724b9bb3	no		veth139bafa
							veth911300c
							vethf7ff838

일반 프로세스가 컨테이너화됐다는 건 namespace 와 cgroup 이 적용됐다는 이야기고, 그 말은 독립된 linux 머신처럼 다뤄진다는 이야기가 된다.

References