요청과 네트워크 통신
요청(Request)은 컨테이너에서 실행되는 어플리케이션이 다른 웹사이트나 웹 API와 상호작용을 하기위한 수단입니다. 이 요청은 HTTP를 통해 이루어질 수 있으며, 어플리케이션은 웹 API에 데이터를 보내거나 데이터를 가져오기 위해 이러한 요청을 사용합니다.
예를 들면 NodeJS, Python, 또는 PHP와 같은 다양한 언어로 작성된 애플리케이션이 다른 웹사이트나 웹 API와 통신 할 수 있습니다. 애플리케이션은 HTTP 요청을 통해 데이터를 요청하고, 해당 웹 API에서 응답을 받아오는 것이 가능합니다.
이렇게 컨테이너 내부의 애플리케이션은 외부의 웹 사이트나 웹 API와의 통신을 통해 데이터를 교환하고 상호작용 할 수 있습니다.
컨테이너에서 로컬 호스트 머신으로의 통신
데이터베이스와의 상호작용: 예를 들어, 데이터베이스 서비스(MongoDB, MySQL 등)가 호스트 머신에서 실행 중이고, 컨테이너화된 애플리케이션은 이 데이터베이스와 통신해야 할 때 사용됩니다. 컨테이너 내부의 애플리케이션은 호스트 머신의 데이터베이스에 연결하여 데이터를 가져오거나 저장합니다.
작업하는 컨테이너가 로컬 호스트 머신과 통신해야 하는 경우, 'host.docker.internal' 특수 도메인을 사용하여 호스트 머신을 가리킬 수 있습니다. 이 특수 도메인은 Docker 컨테이너 내부에서 호스트 머신의 IP 주소로 변환되므로 편리하게 사용할 수 있습니다.
이를 통해 컨테이너 내부의 애플리케이션은 로컬로 실행 중인 서비스나 데이터베이스와 통신할 수 있습니다. 이것은 개발 및 디버깅 목적으로 유용하며, 도커 컴포즈를 사용하여 다중 컨테이너 애플리케이션을 구축할 때 특히 중요합니다.
컨테이너 간 통신
기존의 컨테이너는 독립적이기 떄문에 컨테이너끼리의 통신은 불가능합니다. 하지만 ip를 조회하거나 네트워크를 이용하면 통신이 가능합니다.
컨테이너는 각각 한가지 주요 작업만 수행하는 것이 강력히 권장되기 때문에, 데이터베이스를 요구하는 컨테이너와 어플리케이션 실행 컨테이너를 각각 두어 통신을 해야합니다.
두개의 컨테이너를 통신하기위해 데이터베이스를 요구하는 컨테이너의 ip를 알아야합니다. 하지만 ip를 매번 하드 코딩하기는 쉬운방법은 아닙니다. 그래서 사용하는것이 도커의 내장 기능인 Docker Network입니다.
Docker Network
모든 컨테이너를 하나의 동일한 네트워크에 밀어넣을 수 있습니다.즉, 모든 컨테이너가 서로 통신할 수 있는 네트워크가 생성됩니다.
docker run --network [네트워크_이름]
docker run 명령에 --network 옵션을 추가하면 이러한 컨테이너들을 하나의 동일한 네트워크에 손쉽게 배치할 수 있습니다.
네트워크 생성
docker network create [네트워크_이름]
컨테이너를 시작하기 전에 컨테이너를 연결할 도커 네트워크를 생성해야 합니다.
코드에서 ip주소 설정
기존에는 코드에서 IP주소를 하드코딩했지만, 도커 네트워크를 이용한다면 두개의 컨테이너가 동일한 네트워크의 일부분인 경우 ip주소에 다른 컨테이너 이름을 작성할 수 있습니다. 이렇게 하면 IP 주소를 직접 설정하지 않아도 됩니다.
'Docker' 카테고리의 다른 글
도커 볼륨 읽기 전용 설정, Dockerfile 환경 변수 및 빌드 타임 인수 (2) | 2023.10.31 |
---|---|
도커 데이터 관리 및 볼륨/바인드 마운트 (2) | 2023.10.31 |
도커 이미지 공유하기 (2) | 2023.10.26 |
도커 이미지 & 컨테이너 관리 (0) | 2023.10.25 |