관리 메뉴

ballqs 님의 블로그

[Docker] Docker Network 본문

코딩 공부/Docker

[Docker] Docker Network

ballqs 2024. 9. 27. 17:01

Docker Network란?

Docker Network는 Docker Container끼리 서로 통신할 수 있게 도와주는 네트워크

 

핵심 개념

  • 네트워크 샌드박스: 각 컨테이너는 독립된 샌드박스 안에 존재하며, 외부의 직접적인 접근을 차단합니다. 이는 컨테이너를 안전하게 보호하는 역할을 합니다.
  • 엔드포인트: 샌드박스와 외부 네트워크를 연결하는 지점입니다. 컨테이너는 엔드포인트를 통해 다른 컨테이너나 외부 네트워크와 통신할 수 있습니다.
  • 네트워크: 여러 개의 엔드포인트를 연결하여 통신 경로를 형성합니다. 하나의 컨테이너는 여러 개의 네트워크에 연결될 수도 있습니다.

주요 특징

  • 격리: 각 컨테이너는 다른 컨테이너로부터 격리되어 있어, 한 컨테이너에서 발생하는 문제가 다른 컨테이너에 영향을 미치는 것을 방지합니다.
  • 유연성: 필요에 따라 다양한 네트워크를 구성할 수 있습니다. 예를 들어, 특정 서비스만 접근할 수 있는 사설 네트워크를 만들거나, 외부 네트워크와 연결된 공용 네트워크를 만들 수 있습니다.
  • 확장성: 컨테이너를 추가하거나 제거할 때 네트워크 구성을 쉽게 변경할 수 있습니다.

 

사용 예제

# back, front 네트워크 생성
docker network create --driver=bridge back
docker network create --driver=bridge front

# 각 서비스를 생성 및 실행
docker run --name=webapi -itd --net=front ubuntu:14.04
docker run --name=catalog -itd --net=back ubuntu:14.04
docker run --name=database -itd --net=back ubuntu:14.04

# catalog 서비스는 기본 back 네트워크 뿐만 아니라 front 네트워크에도 연결
docker network connect front catalog

# webapi 의 라우팅 테이블
docker exec webapi route

# catalog 의 라우팅 테이블
docker exec catalog route

# database 의 라우팅 테이블
docker exec database route

docker network inspect front # webapi / catalog
docker network inspect back # catalog / database


docker exec -it webapi bash
# 머신 안에서
ping -c 1 catalog # 가능
ping -c 1 database # 연결 불가능
exit

# 
docker exec -it catalog bash
# 머신 안에서
ping -c 1 webapi
ping -c 1 database

# 리소스 정리
docker network disconnect front catalog

docker stop webapi catalog database

docker rm webapi catalog database

docker network rm back

docker network rm front

 

 

Docker Network 종류

 

1. 브리지 네트워크

  • 기본 네트워크: Docker를 처음 사용할 때 가장 많이 접하는 네트워크입니다.
  • 독립된 네트워크: 각 컨테이너는 브리지 네트워크 안에 독립된 네트워크를 가지고 있어, 다른 컨테이너와 직접적으로 연결되지 않습니다.
  • IP 할당: Docker가 각 컨테이너에 고유한 IP 주소를 할당하며, 컨테이너는 이 IP 주소를 통해 서로 통신할 수 있습니다.
  • 포트 매핑: 필요에 따라 호스트의 특정 포트를 컨테이너의 포트에 연결하여 외부에서 컨테이너에 접근할 수 있도록 설정할 수 있습니다.

2. 공용 네트워크

  • 호스트 네트워크: 컨테이너가 호스트 시스템의 네트워크를 직접 사용하는 방식입니다.
  • 제한적인 사용: Docker에서는 "공용 네트워크"라는 명칭 대신 호스트 네트워크를 사용하며, 일반적으로는 브리지 네트워크를 더 많이 사용합니다.
  • 직접 접근: 컨테이너가 호스트 시스템의 네트워크를 직접 사용하기 때문에, 호스트 시스템에서 실행되는 다른 프로그램과 직접 통신할 수 있습니다.

3. 사설 네트워크

  • 맞춤형 네트워크: 사용자가 직접 네트워크를 생성하고, 원하는 컨테이너만 연결할 수 있는 네트워크입니다.
  • 격리: 다른 네트워크와 완전히 격리된 환경을 만들 수 있어, 보안이 중요한 서비스를 위한 네트워크를 구성할 때 유용합니다.
  • 유연성: 다양한 컨테이너를 하나의 네트워크에 연결하여 복잡한 애플리케이션을 구축할 수 있습니다.

'코딩 공부 > Docker' 카테고리의 다른 글

[Docker] 명령어  (0) 2024.09.27
[Docker] Docker Compose  (0) 2024.09.27
[Docker] Dockerfile 작성  (0) 2024.09.27