3.1 bridge 네트워크
기본
bridge 네트워크
는 Docker에서 기본 네트워크 드라이버로, 컨테이너가 서로 상호작용할 수 있는 격리된 네트워크를 만드는 데 사용돼. 이 네트워크는 IP 주소와 호스트 이름을 통해 컨테이너 간 통신을 가능하게 해주고, 다중 컨테이너 애플리케이션의 다양한 구성 요소 간 상호작용을 조직하는 편리한 방법을 제공해.
bridge 네트워크
는 호스트 수준에서 외부 네트워크로부터 격리된 개인 내부 네트워크를 생성해. 이 네트워크에 연결된 컨테이너는 서로 상호작용할 수 있지만, 포트 전달을 설정하지 않으면 외부에서 직접 접근할 수 없어.
bridge 네트워크
자동 생성
기본적으로 Docker는 설치 시 bridge 네트워크
를 생성하고, 특정 네트워크를 지정하지 않고 시작된 컨테이너는 자동으로 이 네트워크에 연결돼.
bridge 네트워크
에서 컨테이너를 생성하고 사용하는 예제
1. bridge 네트워크
에서 컨테이너 실행:
이 예에서는 Nginx를 실행하는 container1과 Busybox를 실행하는 container2 두 개의 컨테이너를 실행하고, 둘 다 기본 bridge 네트워크
에 연결해.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. 컨테이너의 IP 주소 확인:
컨테이너의 IP 주소를 확인하려면 docker inspect 명령을 사용해.
이 명령은 컨테이너의 IP 주소를 출력하며, 이를 사용해 컨테이너 간 통신을 할 수 있어.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. IP 주소를 통한 컨테이너 간 통신:
container2
에서 container1
을 ping하여 ping 명령
을 사용해 컨테이너 간 연결을 확인해봐.
컨테이너가 bridge 네트워크
에 제대로 연결되어 있다면, ping 명령
이 성공적으로 실행될 거야.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
설명: bridge 네트워크
는 컨테이너 간 상호작용이 필요하지만 외부 네트워크로부터 격리된 로컬 애플리케이션에 간단한 솔루션을 제공해. IP 주소를 통한 ping은 네트워크 연결을 확인하는 기본적인 방법이지만, 더 복잡한 애플리케이션의 경우 DNS 설정이나 추가 네트워크 드라이버 구성이 필요할 수도 있어.
3.2 호스트 이름 사용하기
컨테이너 간 연결을 위한 호스트 이름 사용
IP 주소를 사용하는 것 외에도, Docker는 컨테이너 이름을 사용하여 연결하는 것도 가능하게 해. 이 방식은 설정을 더 간단하게 만들어 주는데, 컨테이너 이름은 고정되어 있는 반면 IP 주소는 컨테이너를 재시작할 때 변경될 수 있거든.
호스트 이름으로 연결 예제
1. bridge
네트워크를 지정하여 컨테이너 실행하기:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. 호스트 이름으로 연결 확인:
appserver
컨테이너 내부에서 ping 명령어
를 사용하여 webserver
를 핑해봐:
docker exec appserver ping -c 4 webserver
사용자 정의 bridge 네트워크
만들기
기본 bridge 네트워크
를 사용하는 대신, 컨테이너 간 상호작용을 더 잘 제어하기 위해 사용자 정의 bridge 네트워크
를 생성할 수 있어.
사용자 정의 네트워크 생성 예제
1. 사용자 정의 네트워크 생성:
docker network create --driver bridge my_bridge_network
2. 사용자 정의 네트워크에서 컨테이너 실행:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. 호스트 이름으로 연결 확인:
docker exec appserver ping -c 4 webserver
3.3 여러 호스트 예제
실제 사용 예제
예제 1: 웹 서버와 데이터베이스
웹 서버와 데이터베이스를 위한 docker-compose.yml
파일을 생성하세요:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Docker Compose를 실행하세요:
docker compose up -d
컨테이너 간의 연결을 확인하세요:
docker compose exec web ping -c 4 db
예제 2: 마이크로서비스 아키텍처
마이크로서비스 애플리케이션을 위한 docker-compose.yml
파일을 생성하세요:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Docker Compose
를 실행하세요:
docker compose up -d
컨테이너 간의 연결을 확인하세요:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION