CodeGym /행동 /Docker SELF /컨테이너 간의 연결

컨테이너 간의 연결

Docker SELF
레벨 17 , 레슨 2
사용 가능

3.1 bridge 네트워크 기본

bridge 네트워크는 Docker에서 기본 네트워크 드라이버로, 컨테이너가 서로 상호작용할 수 있는 격리된 네트워크를 만드는 데 사용돼. 이 네트워크는 IP 주소와 호스트 이름을 통해 컨테이너 간 통신을 가능하게 해주고, 다중 컨테이너 애플리케이션의 다양한 구성 요소 간 상호작용을 조직하는 편리한 방법을 제공해.

bridge 네트워크는 호스트 수준에서 외부 네트워크로부터 격리된 개인 내부 네트워크를 생성해. 이 네트워크에 연결된 컨테이너는 서로 상호작용할 수 있지만, 포트 전달을 설정하지 않으면 외부에서 직접 접근할 수 없어.

bridge 네트워크 자동 생성

기본적으로 Docker는 설치 시 bridge 네트워크를 생성하고, 특정 네트워크를 지정하지 않고 시작된 컨테이너는 자동으로 이 네트워크에 연결돼.

bridge 네트워크에서 컨테이너를 생성하고 사용하는 예제

1. bridge 네트워크에서 컨테이너 실행:

이 예에서는 Nginx를 실행하는 container1과 Busybox를 실행하는 container2 두 개의 컨테이너를 실행하고, 둘 다 기본 bridge 네트워크에 연결해.

Terminal

docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000

2. 컨테이너의 IP 주소 확인:

컨테이너의 IP 주소를 확인하려면 docker inspect 명령을 사용해.

이 명령은 컨테이너의 IP 주소를 출력하며, 이를 사용해 컨테이너 간 통신을 할 수 있어.

Terminal

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 명령이 성공적으로 실행될 거야.

Terminal

docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>

설명: bridge 네트워크는 컨테이너 간 상호작용이 필요하지만 외부 네트워크로부터 격리된 로컬 애플리케이션에 간단한 솔루션을 제공해. IP 주소를 통한 ping은 네트워크 연결을 확인하는 기본적인 방법이지만, 더 복잡한 애플리케이션의 경우 DNS 설정이나 추가 네트워크 드라이버 구성이 필요할 수도 있어.

3.2 호스트 이름 사용하기

컨테이너 간 연결을 위한 호스트 이름 사용

IP 주소를 사용하는 것 외에도, Docker는 컨테이너 이름을 사용하여 연결하는 것도 가능하게 해. 이 방식은 설정을 더 간단하게 만들어 주는데, 컨테이너 이름은 고정되어 있는 반면 IP 주소는 컨테이너를 재시작할 때 변경될 수 있거든.

호스트 이름으로 연결 예제

1. bridge 네트워크를 지정하여 컨테이너 실행하기:

Terminal

docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
    

2. 호스트 이름으로 연결 확인:

appserver 컨테이너 내부에서 ping 명령어를 사용하여 webserver를 핑해봐:

Terminal

docker exec appserver ping -c 4 webserver 
    

사용자 정의 bridge 네트워크 만들기

기본 bridge 네트워크를 사용하는 대신, 컨테이너 간 상호작용을 더 잘 제어하기 위해 사용자 정의 bridge 네트워크를 생성할 수 있어.

사용자 정의 네트워크 생성 예제

1. 사용자 정의 네트워크 생성:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. 사용자 정의 네트워크에서 컨테이너 실행:

Terminal

docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000 
    

3. 호스트 이름으로 연결 확인:

Terminal

docker exec appserver ping -c 4 webserver 
    

3.3 여러 호스트 예제

실제 사용 예제

예제 1: 웹 서버와 데이터베이스

웹 서버와 데이터베이스를 위한 docker-compose.yml 파일을 생성하세요:

Yaml

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를 실행하세요:

Terminal


docker compose up -d 

컨테이너 간의 연결을 확인하세요:

Terminal


docker compose exec web ping -c 4 db 

예제 2: 마이크로서비스 아키텍처

마이크로서비스 애플리케이션을 위한 docker-compose.yml 파일을 생성하세요:

Yaml

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를 실행하세요:

Terminal

        
docker compose up -d 

컨테이너 간의 연결을 확인하세요:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION