Docker 간 통신을 구현하는 방법

PHPz
풀어 주다: 2023-04-18 14:41:32
원래의
2855명이 탐색했습니다.

현대 소프트웨어 개발에서 Docker는 개발자가 다양한 환경에서 개발, 테스트 및 배포할 수 있도록 하는 매우 인기 있는 가상화 기술이 되었습니다. Docker의 중요한 특징은 서로 다른 호스트에서 실행될 수 있다는 것입니다. 따라서 다중 호스트 환경에서 Docker 간의 통신을 구현하는 방법이 화제가 되었습니다.

이 기사에서는 다음을 포함하여 다양한 Docker 호스트 간의 통신을 구현하는 방법을 소개합니다.

  1. Docker 네트워크의 개념 및 특성
  2. 동일한 호스트에서 Docker 컨테이너를 실행하기 위한 통신 방법
  3. 다른 호스트에서 Docker 실행
  4. Docker Compose를 사용하여 여러 컨테이너의 통신을 관리하세요.

1. Docker 네트워크의 개념과 특징

Docker에서 네트워크는 다양한 컨테이너에 통신 기능을 제공하는 독립적인 하위 시스템입니다. Docker 네트워크의 중요한 기능은 서로 다른 네트워크의 서로 다른 컨테이너를 격리하는 것이며 컨테이너 간의 통신은 네트워크를 통해 이루어져야 합니다. 일반적인 Docker 네트워크 유형은 다음과 같습니다.

  1. 브리지 모드: 기본 모드, 모든 컨테이너가 동일한 가상 네트워크에 연결됩니다.
  2. 호스트 모드: 컨테이너를 호스트의 물리적 네트워크에 직접 연결하고, 컨테이너는 호스트의 IP 주소를 통해 통신할 수 있습니다.
  3. 오버레이 모드: 여러 Docker 호스트 간에 격리된 가상 네트워크를 생성하는 데 사용되며, 이를 통해 호스트 간 컨테이너 통신이 가능합니다.

Docker에서는 맞춤형 네트워크를 통해 서로 다른 컨테이너 간의 통신도 가능합니다.

2. 동일한 호스트에서 실행되는 Docker 컨테이너의 통신 방법

동일한 호스트에서 실행되는 Docker 컨테이너 간의 통신은 가장 쉽게 달성할 수 있습니다. 기본적으로 Docker 브리지 네트워크는 IP 주소를 통해 모든 컨테이너 간의 통신을 허용합니다. 따라서 동일한 호스트에 있는 서로 다른 컨테이너 간의 통신은 해당 컨테이너의 IP 주소만 사용하면 됩니다.

Docker에서는 다음 명령을 사용하여 실행 중인 컨테이너의 IP 주소를 볼 수 있습니다.

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
로그인 후 복사

동일한 호스트에 있는 Docker 컨테이너 간 통신을 위한 샘플 코드는 다음과 같습니다.

import requests

response = requests.get('http://<container_ip>:<port>/<api_endpoint>')
로그인 후 복사
로그인 후 복사

3. 다른 컨테이너에서 Docker 컨테이너를 실행합니다. 호스트 통신 방법

다른 Docker 컨테이너가 다른 호스트에서 실행되면 더 이상 동일한 네트워크에 속하지 않기 때문에 컨테이너의 IP 주소를 통해 통신할 수 없습니다. 따라서 이들 간의 통신을 위해서는 다른 수단을 사용해야 합니다.

Docker에서는 다음 두 가지 방법으로 여러 호스트의 컨테이너 통신을 수행할 수 있습니다.

  1. 포트 매핑을 사용하여 애플리케이션의 포트를 호스트의 포트에 매핑하면 다른 호스트의 컨테이너가 호스트의 IP 주소와 포트를 애플리케이션에 전달할 수 있습니다. 컨테이너에 액세스합니다.
  2. 오버레이 네트워크를 사용하여 서로 다른 호스트의 컨테이너를 동일한 가상 네트워크에 연결하면 컨테이너의 IP 주소를 통해 직접 통신할 수 있습니다.

포트 매핑을 사용하기 위한 샘플 코드는 다음과 같습니다.

import requests

response = requests.get('http://<host_ip>:<mapped_port>/<api_endpoint>')
로그인 후 복사

오버레이 네트워크를 사용하여 다른 호스트의 컨테이너를 연결하는 경우 다음 단계를 수행해야 합니다.

  1. 모든 Docker 호스트에서 Swarm 모드 활성화: docker swarm init ;docker swarm init
  2. 在一个Docker主机上创建Overlay网络:docker network create -d overlay <network_name>
  3. 在Overlay网络中启动容器:docker service create --name <service_name> --network <network_name> <image_name>
  4. Docker 호스트에서 오버레이 네트워크 생성: docker network create -d overlay <network_name>;

오버레이 네트워크에서 컨테이너 시작: docker 서비스 생성 - -name <service_name> --network <network_name> <image_name></image_name></network_name></service_name>.

Overlay 네트워크에서 서로 통신하기 위한 샘플 코드는 다음과 같습니다.

import requests

response = requests.get('http://<container_ip>:<port>/<api_endpoint>')
로그인 후 복사
로그인 후 복사
4. Docker Compose를 사용하여 여러 컨테이너의 통신을 관리합니다.

Docker Compose는 여러 Docker 컨테이너를 관리하는 도구입니다. YAML 파일 여러 컨테이너의 시작 방법 및 매개변수를 정의합니다. Docker Compose에서는 컨테이너 간 통신 방법을 YAML 파일로 구성할 수 있습니다.

다음은 Docker Compose를 사용하여 여러 컨테이너 간의 통신을 관리하기 위한 샘플 YAML 코드입니다.

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: 'mydb'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: 'root'
      MYSQL_ROOT_PASSWORD: 'root'
    volumes:
      - ./db:/var/lib/mysql
    ports:
      - '3306:3306'
    networks:
      - my-network

  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    networks:
      - my-network
    depends_on:
      - db

networks:
  my-network:
로그인 후 복사
위 예에서는 "my-network"라는 네트워크를 정의하여 db 컨테이너와 웹 컨테이너가 동일한 가상 네트워크에 연결됩니다. , 포트 매핑을 사용하여 MySQL의 3306 포트를 호스트의 3306 포트에 매핑합니다.

요약🎜🎜이 글의 소개를 통해 여러분은 서로 다른 Docker 호스트 간의 통신 방법을 마스터하셨을 것입니다. 동일한 호스트의 컨테이너 통신의 경우 컨테이너의 IP 주소만 사용해야 하며, 다른 호스트의 컨테이너 통신의 경우 포트 매핑 및 오버레이 네트워크를 사용할 수 있습니다. 또한 Docker Compose를 사용하면 여러 컨테이너 간의 통신을 더 쉽게 관리할 수 있습니다. 🎜

위 내용은 Docker 간 통신을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿