[Docker] network 개념 및 예시

제이브로·2024년 2월 22일
0

Docker

목록 보기
35/48
post-thumbnail

1. Docker network

docker0 네트워크는 bridge 네트워크인지 확인

  • network 확인 커맨드
  • 저는 brctl 명령어가 작동되지 않아 추가 설치했습니다.
$ sudo apt-get install bridge-utils
$ brctl show

Docker network

1.1 docker0

  • virtual ethernet bridge : 172.17.0.0/16
  • L2 통신기반
  • container 생성 시 veth 인터페이스 생성(sandbox)
  • 모든 컨테이너는 외부 통신을 docker0 통해 진행
  • container running 시 172.17.X.YIP 주소할당

1.2 컨테이너 포트를 위부로 노출 가능?

port-forwarding

  • container port를 외부로 노출시켜 외부 연결 허용
  • iptables rule을 통한 포트 노출
  • -p hostPort:containerPort
  • -p containerPort 처럼 :을 입력하지 않을 경우에는, hostport에 랜덤포트가 열린다.
  • -P만 적을 경우, 랜덤 포트가 작성된다
  • ex) docker run --name web -d -p 80:80 nginx:1.14
  • iptables 확인 : iptables -t nat -L -n -v

2. Example

순차적으로 할당되는 ip 확인

  • docker0 bridge network
  • busybox는 각기 다른 터미널에서 실행시켜야 합니다. (혹은 -d 명령어 추가)
$ ip addr
$ brctl show

// ip addr 172.17.0.2
$ docker run --name c1 -it busybox
$ docker inspect c1

// ip addr 172.17.0.3
$ docker run --name c2 -it busybox
$ docker inspect c2

// ip addr 172.17.0.4
$ docker run -d -p 80:80 --name web1 nginx

// ip addr 172.17.0.5
$ docker run --name c3 -it busybox
// 외부 네트워크와 통신 확인
# ping 8.8.8.8

2. sandbox

docker inspect c1를 하면 NetworkSettings에서 SandboxID가 보인다.

  • Sandboxc1이라는 컨테이너의 네트워크 환경을 만들어준거다.
  • EndpointIDveth0의 네트워크 인터페이스가 만들어진거다.
  • c1네트워크는 172.17.0.1docker0의 네트워크를 통해 나간다.
  • 172.17.0.1 시스템은 외부로 나갈때 자신의 iphost ip로 바꿔서 내보내는 IP Masquerade 서비스 즉, NAT 서비스를 지원하게 된다.

IP Masquerade란?

주소변환만 하는것이 아닌 포트번호까지 포트포워딩시켜주는 기능

3. iptables

docker0anywhere로 나가면 호스트의 ip로 바꿔서 송출해주겠다.

$ iptables -t nat -L -v

iptables

4. References

  1. ttabae youtube
profile
기록하지 않으면 기록되지 않는다.

0개의 댓글