소개
Docker 는 애플리케이션을 구축, 배포 및 관리하는 방식을 혁신했습니다. 이 여정의 일환으로, Docker 컨테이너 간의 네트워크 트래픽을 이해하고 관리하는 것은 애플리케이션 인프라의 안정성, 확장성 및 보안을 보장하는 데 필수적입니다. 이 튜토리얼에서는 Docker 네트워킹의 필수 개념을 안내하고, 컨테이너를 연결하는 실질적인 단계를 제공하며, 컨테이너 간의 네트워크 트래픽을 효과적으로 관리하는 전략을 탐구할 것입니다.
Docker 네트워킹 이해
Docker 는 개발자가 애플리케이션과 종속성을 격리된 컨테이너로 패키징할 수 있도록 하는 컨테이너화 플랫폼입니다. 이러한 컨테이너는 다양한 환경에서 쉽게 배포, 확장 및 관리할 수 있습니다. Docker 의 주요 측면 중 하나는 컨테이너와 외부 세계 간의 통신을 가능하게 하는 네트워킹 기능입니다.
Docker 네트워킹 기본 사항
Docker 는 컨테이너가 서로 및 호스트 시스템과 통신할 수 있도록 여러 네트워킹 드라이버를 제공합니다. 기본 네트워킹 드라이버는 bridge이며, 호스트 시스템에 가상 브리지를 생성하고 컨테이너에 IP 주소를 할당합니다. 동일한 브리지 네트워크에 연결된 컨테이너는 IP 주소 또는 컨테이너 이름을 사용하여 서로 통신할 수 있습니다.
graph LR
Host -- Bridge Network --> Container1
Host -- Bridge Network --> Container2
Container1 -- Communicate --> Container2
다른 네트워킹 드라이버로는 host, overlay, macvlan이 있으며, 각각 고유한 사용 사례와 구성이 있습니다.
Docker 네트워크 명령어
다음 명령어를 사용하여 Docker 네트워크를 관리할 수 있습니다.
| 명령어 | 설명 |
|---|---|
docker network create |
새 네트워크 생성 |
docker network ls |
모든 네트워크 목록 |
docker network inspect |
네트워크 검사 |
docker network connect |
컨테이너를 네트워크에 연결 |
docker network disconnect |
컨테이너를 네트워크에서 분리 |
예를 들어, 새 브리지 네트워크를 생성하고 컨테이너를 연결하려면 다음과 같이 합니다.
## 새 브리지 네트워크 생성
docker network create my-network
## 컨테이너를 네트워크에 연결
docker run -d --name my-container --network my-network nginx
Docker 네트워킹의 기본 사항을 이해하는 것은 컨테이너 간의 네트워크 트래픽을 관리하고 Docker 기반 애플리케이션 내에서 안전한 통신을 보장하는 데 필수적입니다.
Docker 컨테이너 연결
Docker 네트워킹의 기본 사항을 이해한 후, Docker 컨테이너를 연결하는 방법을 살펴보겠습니다.
동일 네트워크에서 컨테이너 연결
Docker 컨테이너를 연결하는 가장 간단한 방법은 동일한 네트워크에 배치하는 것입니다. 컨테이너가 동일한 네트워크에 있으면 컨테이너 이름 또는 IP 주소를 사용하여 서로 통신할 수 있습니다.
graph LR
Container1 -- Communicate --> Container2
Container1 -- Communicate --> Container3
Container2 -- Communicate --> Container3
동일한 네트워크에 컨테이너를 연결하려면 새 컨테이너를 시작할 때 --network 플래그를 사용할 수 있습니다.
## 새 브리지 네트워크 생성
docker network create my-network
## 컨테이너 시작 및 네트워크 연결
docker run -d --name container1 --network my-network nginx
## 동일한 네트워크에 다른 컨테이너 시작
docker run -d --name container2 --network my-network nginx
이제 두 컨테이너는 컨테이너 이름 (예: container1, container2) 또는 IP 주소를 사용하여 서로 통신할 수 있습니다.
다른 네트워크 간 컨테이너 연결
일부 경우, 다른 네트워크 간 컨테이너를 연결해야 할 수 있습니다. 이는 --link 플래그를 사용하거나 네트워크 오버레이를 생성하여 달성할 수 있습니다.
--link 플래그 사용:
## 두 개의 네트워크 생성
docker network create network1
docker network create network2
## network1에 컨테이너 시작
docker run -d --name container1 --network network1 nginx
## network2에 컨테이너 시작 및 container1에 연결
docker run -d --name container2 --network network2 --link container1 nginx
이제 container2는 container1 호스트명을 사용하여 container1에 액세스할 수 있습니다.
네트워크 오버레이를 사용하여 네트워크 간 컨테이너 연결:
## 오버레이 네트워크 생성
docker network create --driver overlay my-overlay-network
## 오버레이 네트워크에 컨테이너 시작
docker run -d --name container1 --network my-overlay-network nginx
## 동일한 오버레이 네트워크에 다른 컨테이너 시작
docker run -d --name container2 --network my-overlay-network nginx
동일한 오버레이 네트워크에 연결된 컨테이너는 서로 다른 Docker 호스트에 있더라도 직접 통신할 수 있습니다.
동일한 네트워크 또는 서로 다른 네트워크 간의 Docker 컨테이너 연결 방법을 이해하는 것은 네트워크 트래픽을 관리하고 컨테이너화된 애플리케이션 간의 통신을 가능하게 하는 데 필수적입니다.
컨테이너 간 네트워크 트래픽 관리
Docker 컨테이너 연결 방법을 이해했으니, 이제 컨테이너 간 네트워크 트래픽을 관리하는 방법을 살펴보겠습니다.
포트 노출
Docker 컨테이너 내에서 실행 중인 서비스에 외부 액세스를 허용하려면 컨테이너의 포트를 호스트 시스템에 노출해야 합니다. 컨테이너를 시작할 때 -p 또는 --publish 플래그를 사용하여 이 작업을 수행할 수 있습니다.
## 컨테이너의 포트 80을 호스트의 포트 8080에 노출
docker run -d --name my-web-app -p 8080:80 nginx
이제 호스트 시스템에서 http://localhost:8080을 방문하여 컨테이너 내에서 실행 중인 Nginx 웹 서버에 액세스할 수 있습니다.
로드 밸런싱
동일한 컨테이너화된 애플리케이션의 여러 인스턴스가 있는 경우 로드 밸런싱을 사용하여 네트워크 트래픽을 컨테이너 간에 분산할 수 있습니다. 이는 호스트 시스템에서 실행되는 Nginx 또는 HAProxy 와 같은 로드 밸런서 서비스를 사용하여 달성할 수 있습니다.
graph LR
Host -- Load Balancer --> Container1
Host -- Load Balancer --> Container2
Host -- Load Balancer --> Container3
네트워크 정책
Docker 는 컨테이너 간 네트워크 트래픽을 제어할 수 있는 네트워크 정책을 지원합니다. 네트워크 정책을 사용하여 특정 컨테이너 또는 컨테이너 그룹 간의 통신을 제한하거나 허용할 수 있습니다.
예를 들어, 특정 컨테이너만 데이터베이스 컨테이너에 액세스할 수 있도록 네트워크 정책을 생성하려면 다음과 같습니다.
## 네트워크 정책 생성
docker network create --driver=bridge --subnet=172.18.0.0/16 my-network
docker network policy create --ingress --allow-from-container=web-app my-network database
이 예제에서 web-app 컨테이너는 database 컨테이너에 액세스할 수 있지만 my-network 네트워크의 다른 컨테이너는 액세스할 수 없습니다.
서비스 검색
서로 통신해야 하는 여러 컨테이너가 있는 경우 서비스 검색을 사용하여 프로세스를 단순화할 수 있습니다. 서비스 검색을 통해 컨테이너는 IP 주소나 컨테이너 이름에 의존하는 대신 이름으로 다른 서비스를 찾고 연결할 수 있습니다.
서비스 검색을 구현하는 한 가지 방법은 Consul 또는 Zookeeper 와 같은 서비스 레지스트리를 사용하는 것입니다. 이는 Docker 환경과 통합될 수 있습니다.
Docker 컨테이너 간의 네트워크 트래픽을 관리하는 것은 컨테이너화된 애플리케이션 내에서 안전하고 효율적인 통신을 보장하는 데 중요합니다. 포트 노출, 로드 밸런싱, 네트워크 정책 및 서비스 검색과 같은 개념을 이해함으로써 Docker 기반 인프라에서 네트워크 트래픽을 효과적으로 제어하고 최적화할 수 있습니다.
요약
이 포괄적인 튜토리얼에서는 Docker 컨테이너 간의 네트워크 트래픽 관리 기술을 익히는 방법을 배웁니다. Docker 네트워킹 기본 사항을 이해하고 컨테이너를 원활하게 연결하며 효과적인 트래픽 관리 기법을 구현함으로써 Docker 기반 애플리케이션의 성능과 안정성을 최적화할 수 있습니다. Docker 사용 경험이 풍부하든 컨테이너화 여정을 시작하는 초심자이든, 이 가이드는 Docker 네트워킹을 다음 단계로 끌어올리는 데 필요한 지식과 기술을 제공합니다.



