Загружаем каталог…
Загружаем каталог…
도커(Docker)를 사용하면서 가장 신기하면서도 헷갈리는 순간 중 하나는 바로 "컨테이너끼리, 혹은 컨테이너는 외부와 어떻게 통신할까?" 하는 의문입니다. 우리는 평소에 아무렇지 않게 docker run -p 80:80 nginx 같은 명령어를 치고 웹서버에 접속하지만, 호스트의 네트워크 카드와 독립된 컨테이너 내부 네트워크 사이에서는 리눅스의 강력한 가상화 기술들이 움직이고 있습니다. 이번 글에서는 도커 네트워크의 기본이자 핵심인 Bridge 네트워크 모드 와 그 밑단에서 작동하는 veth pair , Linux Bridge 의 원리를 파헤쳐 보겠습니다. 1. 도커 네트워크의 기본 : Bridge 모드란? 도커를 설치하고 아무런 옵션없이 컨테이너를 띄우면, 도커 데몬은 기본적으로 bridge 라는 이름의 네트워크 드라이버에 컨테이너를 연결합니다. 호스트 터미널에서 ip a 명령어를 입력하면 신기한 인터페이스가 하나 눈에 띕니다. 바로 docker0 입니다. docker0 (Linux Bridge) : 호스트 OS 내부에 만들어지는 가상 스위치(Switch)입니다. 보통 172.17.0.1 같은 사설 IP를 할당받습니다. 컨테이너의 IP : 새로 띄운 컨테이너는 이 docker0 대역 안에서 순차적으로 IP( 172.17.0.2 , 172.17.0.3 등)를 부여받습니다. 즉, 같은 브릿지 네트워크에 속한 컨테이너끼리는 별도의 포트 포워딩 없이도 이 내부 사설 IP를 통해 서로 통신할 수 있습니다. 2. 가상 네트워크의 랜선 : veth pair와 Namespace 그렇다면 컨테이너 내부의 eth0 와 호스트의 docker0 스위치는 도대체 어떻게 연결되는 걸까요? 여기서 등장하는 개념이 바로 veth pair(Virtual Ethernet Pair)입니다. 리눅스 네임스페이스(Namespace) 기술로 인해 컨테이너는 자신만의 완전히 독립된 네트워크 세상(네트워크 인터페이스, 라우팅 테이블 등)을 가집니다. 외부와 단절된 이 컨테이너를 호스트와 연결하려면 가상의 랜선 이 필요합니다. 양끝이 연결된 랜선 : veth pair는 항상 두 개가 한 쌍(A와 B)으로 생성되는 가상 네트워크 장치입니다. 한쪽에서 패킷을 보내면 다른 한쪽으로 그대로 전달됩니다. 랜선의 양 끝단 꽂기 : veth pair의 한쪽 조각은 컨테이너 내부로 쏙 집어넣어 이름을 eth0 로 바꿉니다. 다른 한쪽 조각은 호스트 OS에 남겨두고 docker0 브릿지 스위치에 포트처럼 꽂아버립니다. 이 구조 덕분에 컨테이너는 마치 실제 물리 스위치에 랜선을 꽂은 것처럼 호스트의 docker0 와 통신할 수 있게 됩니다. 3. 외부와 통신하는 법 : iptables와 NAT (Port Forwarding) 컨테이너 내부가 172.17.0.x 같은 내부 사설 IP를 쓴다면, 내 노트북이나 외부 사용자는 어떻게 컨테이너에 접근할 수 있을까요? 여기서 그 유명한 -p 옵션(포트 포워딩)이 활약합니다. $ docker run -d -p 8080:80 nginx 이 명령어를 치면 도커는 리눅스 커널의 iptables 를 조작하여 NAT(Network Address Translation) 규칙을 생성합니다. 외부 사용자가 호스트의 8080 포트로 접속을 시도합니다. 호스트의 iptables 규칙이 이 패킷을 가로채어 목적지를 컨테이너의 내부 IP와 포트( 172.17.0.2:80 )로 바꿔치기( MASQUERADE / DNAT )합니다. 반대로 컨테이너가 응답할 때는 다시 호스트의 IP와 포트로 변환되어 사용자에게 전달됩니다. 이 정교한 패킷 후킹(Hooking) 덕분에 컨테이너는 호스트의 방패 뒤에 안전하게 숨어 있으면서도 외부와 자유롭게 통신할 수 있습니다. 4. 그 외 주요 도커 네트워크 모드들 Bridge 외에도 도커는 상황에 따라 다양한 네트워크 모드를 제공합니다. | 네트워크 모드 | 특징 및 동작 방식 | 주요 용도 | 네트워크 모드 특징 및 동작 방식 주요 용도 Bridge (기본) docker0 브릿지와 veth pair를 거치는 기본 모드 (NAT 사용) 일반적인 단일 컨테이너 격리 환경 Host 호스트의 네트워크 네임스페이스를 그대로 공유 (격리 없음) 최대 성능이 필요하거나 포트 충돌이 없는 시스템 데몬 None 네트워크 인터페이스를 아예 제공하지 않음 (오직 lo 만 존재) 보안이 극도로 중요하거나 직접 커스텀 네트워크를 짤 때 Overlay 여러 대의 도커 호스트(Swarm 등)에 있는 컨테이너들을 하나로 묶음 멀티 호스트 분산 클러스터 환경 🎯 마무리 도커 네트워크는 결국 리눅스 브릿지(Linux Bridge)와 veth pair , 그리고 iptables(NAT)라는 리눅스 커널의 기초 네트워크 기술들을 도커라는 도구가 쓰기 편하게 포장해 놓은 것입니다. 이 구조를 완벽하게 이해하고 나면, 나중에 쿠버네티스의 CNI(Container Network Interface)나 오픈스택의 Neutron(가상 네트워크)을 공부할 때도 "아, 결국 밑단에서는 이 가상 랜선들과 브릿지들이 확장된거구나!"하고 훨씬 쉽게 이해할 수 있습니다.
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[Infra] 도커 네트워크(Docker Network) 완벽 가이드 : Bridge부터 veth pair까지. 도커(Docker)를 사용하면서 가장 신기하면서도 헷갈리는 순간 중 하나는 바로 "컨테이너끼리, 혹은 컨테이너는 외부와 어떻게 통신할까?" 하는 의문입니다. 우리는 평소에 아무렇지 않게 docker run -p 80:80 nginx 같은 명령어를 치고 웹서버에 접속하지만, 호스트의 네트워크 카드와 독립된 컨테이너 내부 네트워크 사이에서는 리눅스의 강력한 가상화 기술들이 움직이고 있습니다. 이번 글에서는 도커 네트워크의 기본이자 핵심인 Bridge 네트워크 모드 와 그 밑단에서 작동하는 veth pair , Linux Bridge 의 원리를 파헤쳐 보겠습니다. 1. 도커 네트워크의 기본 :…
Открыть источник