Docker 네트워크

y_cat·2023년 2월 5일
0

Devops

목록 보기
2/3

구조

veth : 가상 이더넷
docker0 : 여러 Docker 컨테이너들의 eth와 호스트 eth를 연결지어 주는 브릿지 네트워크


컨테이너 포트 노출

$ docker run -p [Host IP:HOST]:[CONTAINER PORT] [container]

# nginx 컨테이너의 80번 포트를 호스트 모든 IP의 80번 포트와 연결하여 실행
$ docker run -d -p 80:80 nginx

# nginx 컨테이너의 80번 포트를 호스트 127.0.0.1 IP의 80번 포트와 연결하여 실행
$ docker run -d -p 127.0.0.1:80:80 nginx

# nginx 컨테이너의 80번 포트를 호스트의 사용 가능한 포트와 연결하여 실행
$ docker run -d -p 80 nginx

expose VS publish

expose: 문서화 용도

$ docker run -d --expose 80 nginx

publish: 실제 포트를 바인딩

$ docker run -d -p 80 nginx

network driver

container network model에 따라 Native Driver/Remote Driver로 나뉜다.

  • Native Driver: Bridge, Host, None, Overlay
  • Remote Driver: 서드파티 플러그인

동작 방식에 따른 분류

단일/다중 호스트에 동작하느냐에 따름

Single Host Networking: bridge, host, none

  • bridge
    • default인 docker0와 직접 네트워크 드라이버를 선택해서 새롭게 생성할 수 있는 user defined로 나뉨
  • host
  • none

Multi Host Networking: overlay

  • overlay
    • 컨테이너를 여러 클러스터에서 동작시키는 오케스트레이션 시스템에서 많이 쓰임 (docker swarm)

none

$ docker run -it --net none ubuntu:focal
root@34ef872980b1:/#

해당 컨테이너가 네트워크 드라이버가 필요없을 때 또는 커스텀 네트워크 설정하고 싶을 때 사용한다.


host

docker가 기본으로 제공해주는 veth를 사용하지 않고 직접 호스트 네트워크에 붙여서 쓰고 싶을 때 사용

$ docker run -d --network=host grafana/grafana

bridge(user defined)

# aaa라는 브릿지 네트워크 드라이버 생성
$ docker network create --driver=bridge aaa

# net-alias 옵션은 브릿지에서만 사용할 수 있으며, 네트워크 내에서 컨테이너 IP를 쉽게 찾을 수 있도록 내부 도메인을 부여하는 것
$ docker run -d --network=aaa --net-alias=hello nginx
$ docker run -d --network=aaa --net-alias=grafana grafana/grafana

출처

profile
토이 프로젝트와 기술들 정리하는 블로그

0개의 댓글