5.1 주요 사용자 네트워크 종류
Docker의 사용자 네트워크는 컨테이너 간의 네트워크 상호작용을 설정하고 관리할 수 있는 유연한 옵션을 제공해. 이를 통해 컨테이너를 분리하고, 상호작용을 구성하며, 복잡한 네트워크 토폴로지를 만들 수 있어. 이번 강의에서는 Docker에서 사용자 네트워크를 생성하고 설정하는 방법과 사용 사례를 살펴볼 거야.
주요 사용자 네트워크 종류
Docker는 여러 가지 사용자 네트워크 유형을 지원하며, 각 유형은 고유한 특징을 가지고 있으며 다양한 사용 시나리오에 맞춰 설계됐어:
-
Bridge (브리지 네트워크)
: 동일한 호스트에서 컨테이너 간의 격리와 네트워크 연결을 제공해. 이 네트워크 유형은 호스트 외부와의 상호작용이 필요 없는 로컬 애플리케이션에 기본적으로 사용돼. -
Overlay (오버레이 네트워크)
: Docker Swarm이나 Kubernetes 클러스터에서 서로 다른 호스트에서 실행 중인 컨테이너 간의 연결을 위해 설계됐어. 분산 애플리케이션에 대해 높은 확장성과 보안을 제공해. -
Macvlan
: 컨테이너가 호스트의 물리적 네트워크 인터페이스를 직접 사용할 수 있게 해. 이건 높은 네트워크 성능이 필요한 애플리케이션이나 특정 MAC 주소에 연결해야 하는 경우에 유용해. Macvlan 네트워크의 컨테이너는 물리적 네트워크의 다른 장치들과 개별 노드처럼 상호작용할 수 있어. -
Host (호스트 네트워크)
: 컨테이너가 호스트의 네트워크 스택을 사용해, 네트워크 가상화로 인한 오버헤드를 없애지만 격리는 줄어들어. 이 네트워크 유형은 최대의 네트워크 성능이 필요한 애플리케이션에 적합해.
5.2 브릿지(bridge) 네트워크 생성 및 사용
브릿지 네트워크(bridge)는 가장 일반적인 유형의 사용자 네트워크이고, 하나의 호스트에서 컨테이너를 격리하는 데 사용돼. 같은 bridge 네트워크에 연결된 컨테이너끼리는 IP 주소와 호스트 이름을 통해 서로 상호작용할 수 있어.
사용자 bridge 네트워크
생성하기
사용자 bridge 네트워크
를 생성하려면 docker network create
명령어를 사용해:
docker network create --driver bridge my_bridge_network
사용자 네트워크에서 컨테이너 실행
생성한 네트워크에 연결된 컨테이너를 실행해:
docker run -d --name container1 --network my_bridge_network nginx
docker run -d --name container2 --network my_bridge_network busybox sleep 1000
컨테이너 간 네트워크 연결 확인
ping
명령어를 사용해서 컨테이너 간 연결 확인 가능해:
docker exec container2 ping -c 4 container1
컨테이너가 my_bridge_network
네트워크에 올바르게 연결되었다면, ping
명령어가 성공적으로 동작할 거야.
5.3 Docker Compose
에서 사용자 네트워크
Docker Compose
에서 사용자 네트워크 사용 예시
Docker Compose는 멀티 컨테이너 애플리케이션을 위한 네트워크 생성과 관리를 간소화해줘. docker-compose.yml
파일에서 사용자 네트워크를 정의할 수 있어.
docker-compose.yml
파일 예시:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
app:
image: myapp:latest
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Docker Compose 실행하기:
docker compose up -d
이 예시에서 두 서비스(web
와 app
)는 사용자 네트워크 my_bridge_network
에 연결돼 있어.
5.4 macvlan
네트워크 설정 및 사용
macvlan
네트워크는 컨테이너가 호스트의 물리적 네트워크 인터페이스를 직접 사용할 수 있게 해줘. 이건 네트워크 성능에 높은 요구 사항이 있는 애플리케이션에 유용해. 이런 네트워크의 컨테이너는 지정된 서브넷 안에서 독립적인 IP 주소를 받아서, 호스트가 속한 네트워크에서도 보여질 수 있어.
macvlan
네트워크 생성하기
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan_network
이 명령에서:
--subnet
: 컨테이너가 속할 서브넷을 정의해.--gateway
: 컨테이너를 위한 게이트웨이를 설정해.-o parent
: 네트워크가 연결될 호스트의 네트워크 인터페이스를 지정해.
macvlan
네트워크에서 컨테이너 실행하기
docker run -d --name container1 --network my_macvlan_network nginx
docker run -d --name container2 --network my_macvlan_network busybox sleep 1000
이 예제에서 두 컨테이너는 my_macvlan_network
네트워크에 연결되고, 물리적 인터페이스 eth0
를 통해 외부 네트워크에 접근할 수 있어.
5.5 Docker Compose
에서의 사용 예제
macvlan
네트워크를 Docker Compose
에서도 사용할 수 있어. 예를 들면:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_macvlan_network
networks:
my_macvlan_network:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
Docker Compose
실행:
docker compose up -d
이 예제에서는 네트워크 my_macvlan_network
가 web
서비스가 192.168.1.0/24
서브넷에 있는 장치들과, 호스트를 포함해, 통신할 수 있도록 해줘.
실용적인 추천:
- 접근 설정: 라우터 또는 네트워크 관리자에게 설정한
macvlan
서브넷 사용을 허가받았는지 확인해. - 분리: 보안이 중요하다면 VLAN을 사용해서 네트워크를 분리하고, 컨테이너들이 접근 가능한 자원을 제한하는 게 좋아.
- 테스트: 설정 후
ping
또는curl
명령어로 컨테이너와 외부 네트워크 간의 연결을 테스트해봐.
5.6 마이크로서비스를 위한 네트워크 사용 예제
프론트엔드, 백엔드, 데이터베이스가 각각 다른 네트워크에 격리되어 있지만 네트워크 교차를 통해 상호작용을 제공하는 예제를 살펴볼게.
파일 docker-compose.yml
version: '3.8'
services:
frontend:
image: myfrontend:latest
networks:
- front-tier
- back-tier
backend:
image: mybackend:latest
networks:
- back-tier
- db-tier
database:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- db-tier
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
db-tier:
driver: bridge
Docker Compose
실행:
docker compose up -d
이 예제에서:
-
frontend
서비스는front-tier
와back-tier
네트워크에 연결되어 있어 외부 클라이언트와 백엔드 모두와 상호작용할 수 있어. -
backend
서비스는back-tier
와db-tier
네트워크에 연결되어 있어 프론트엔드와 데이터베이스 모두와 상호작용할 수 있어. -
database
서비스는db-tier
네트워크에만 연결되어 있어서 외부 접근으로부터 데이터베이스를 격리할 수 있어.
실용적인 팁:
- 격리 사용: 네트워크를 분리하면 서비스가 데이터베이스나 다른 중요한 리소스에 접근하는 것을 제한할 수 있어.
- 연결 확인:
ping
또는curl
명령어를 사용해서 서비스들이 공통 네트워크를 통해 상호작용할 수 있는지 확인해봐. - 최적화: 프로젝트가 클러스터나 여러 호스트에서 작업할 경우,
overlay
네트워크를 사용하는 게 좋아.
이 예제는 네트워크 격리를 생성하면서도 애플리케이션의 다양한 계층들 간 상호작용을 보장하는 방법을 보여줘.
GO TO FULL VERSION