도커(docker)와 함께 이해하는 네트워크는 기본적인 CS용어(IP, DNS 등)의 일부 개념 설명은 생략합니다. 용어의 뜻을 알고 싶다면 CS 에 정리해 두었으니 참고하면 됩니다.
이상하거나 틀린 내용이 있다면 지적해주세요. 제발
도커(Docker)를 잘 다루려면 명령어만 알면 될까? 도커를 제대로 이해하려면, 네트워크(Network)에 대한 개념이 필수이다. 도커 네트워크의 기본 개념부터 실제 컨테이너 간 통신 설정까지 차근차근 정리해 보자
본격적으로 도커 네트워크를 알아보기 전, 인터넷의 두가지 세계를 들여다 보자.
위 그림과 같이 외부 서버와 개인의 공유기가 통신할 때 아무렇게나 들락날락 하는것이 아니다. 외부와 내부 모두 눈에 보이지 않는 각자의 구역과 역할이 정해져 있는데 이 경계를 "망"이라고 부른다.
공인망(Public Network): 인터넷에 직접 연결되는 네트워크로 외부에서 접근이 가능하다.
사설망(Private Network): 내부에서만 사용되는 네트워크로 외부에서는 직접 접근이 불가하다.
더 깊은 이해를 위해 터미널을 켜고 nalookup naver.com
을 해보자.
위와 같이 naver에 접속할 수 있는 ip가 4종류나 되는것을 알 수 있다. 저 중 하나를 복사해서 주소창에 입력을 하고 엔터를 누르면 무슨 일이 일어날까? 접속이 될까? 한번 해보도록 하자.
아마 사진과 같이 무한 로딩이 걸리면서 연결할 수 없다는 경고창을 마주했을 것이다.
Non-autoritative answer:
바로 밑을 보자. 네이버에 접속 할 수 있는 서버는 4개이다. 쉽게 말하면 네이버는 유저 트래픽을 분산하기 위해 4개의 공간을 둔 것이다. 1번 공간에 유저가 많으면 2번으로 안내하는 로드 벨런서가 그 역할을 수행한다. 하지만 유저가 직접 자신의 공간을 정하려고 하면 보안 상 문제가 될 수 있다. 특정 공간에 유저가 독(디도스)을 푼다면? 네이버는 공간 하나를 통째로 잃을수도 있다. 이렇게 통신에 제약을 두면서 보안성을 향상시키고 내부 자원 관리를 하는게 사설망이다.
사설 네트워크에 활용하는 IP 대역 범위는 10.0.0.0 ~. 10.255.255.255, 172.16.0.0 ~ 172.31.255.255, 192.168.0.0 ~ 192.168.255.255 이다.
사설망에서 사용하는 IP 주소는 정해진 범위 안에서만 쓴다.
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
*서브넷 마스크란, 쉽게 얘기해서 .뒤에 몇자리까지 표기 가능한지 알려주는 것이다. 더 자세하게 알고싶다면 이 포스트에 잘 정리되어 있다.
네트워크 인터페이스란 네트워크 연결의 통로 (ex: eth0, lo, docker0 등) 이다. 포트(Port)는 한 IP 주소 안에서 여러 서비스를 구분하는 번호이다.
프로토콜 | 포트 번호 |
---|---|
HTTP | 80 |
HTTPS | 443 |
MySQL | 3306 |
개발자가 임의로 지정하는 것이 아닌 위와 같이 국룰 번호가 매겨져 있다. 예를 들어 80번 포트로 들어오면 컴퓨터가 HTTP 프로토콜이라는것을 식별할 수 있다.
여기서 잠깐, 아까 위에서 보안성을 높이기 위해 사설망을 쓴다고 했다. 하지만 이렇게 국룰 포트 번호가 있다면 아무런 소용이 없는거 아니냐는 생각을 할 수 있다. 국룰 포트 번호를 쓴다고 해서 보안이 취약해질까? 포트 번호는 잘 알려진 포트, 등록된 포트, 동적 포트로 나뉘는데 각 프로세스에 고유한 포트 번호를 할당한다. 이 범위가 0~65,536개까지 인데 해커들은 딸깍 한번이면 다 스캔할 수 있다. 즉, 국룰 포트를 쓰나 안쓰나 보안상의 큰 차이는 없다는 것을 알 수 있다.
- NAT(Network Address Translation)란, 사설망과 공인망 간 IP 주소를 변환하는 기능이다.
- 포트 포워딩이란, 외부 요청을 내부 IP/포트로 전달하는 방법을 의미한다.
IP 주소 절약: 사설 IP 여러 개를 하나의 공인 IP로 공유 사용 가능
보안 강화: 내부 네트워크가 외부에 직접 노출되지 않음
P2P·VoIP 등 일부 프로토콜에서 연결 문제 발생 가능
로그 추적 복잡성: NAT 변환으로 인해 원IP 식별이 어려워짐
원격 접근: 외부에서 내부 특정 장치나 서비스에 직접 연결 가능
서비스 운영 편의: 서버·CCTV·게임 서버 등 고정 포트 기반 서비스에 유용
보안 취약점: 열린 포트가 해킹 표면이 되어 공격 위험 증가
관리 부담: 사용 후 포트를 닫지 않으면 계속 열려 있어 악용될 수 있음
💡 인바운드: 외부 → 내부 요청
💡 아웃바운드: 내부 → 외부 요청
이제 정말 도커와 함께 알아보자
docker network inspect XXX # 특정 네트워크 상세 정보
docker network create ... # 네트워크 생성
docker network connect ... # 컨테이너를 네트워크에 연결
Docker는 컨테이너끼리 자동 DNS를 제공한다.
docker network inspect 해보면 DNS 설정 확인 가능
컨테이너 이름으로 서로 통신 가능 (ex: ping web-container)
도커 네트워크에 대한 전반적인 내용을 정리해 봤다. 아직 완벽한 이해를 하진 못한거 같아 나중에 더 공부해서 내용을 보충하도록 할 예정이다.