3. 네트워킹 : 컨테이너 교차 통신
네트워크를 사용하여 다수의 컨테이너를 연결하는 방법
컨테이너가 서로 통신하게 하는 방법
컨테이너에서 실행 중인 어플리케이션을 로컬 호스트 머신에 연결하는 방법을 알아보자
case1 : WWW 통신 컨테이너
World wide web 과 통신 하기 위한 방법
API 연결을 하는 방법엔 GET HTTP 요청이 있는데
여기선 컨테이너에서 실행되는 어플리케이션에서 WWW로 보내자
HTTP 요청을 다른 웹 사이트나 웹 API로 전송하는 방법을 알아보자.
-> 특별한 코드 없이 연결 가능함.
case2: 컨테이너에서 로컬 호스트 머신으로의 통신
호스트 머신에서 실행되는 DB 같은것과 통신하는 방법
->'mongodb://localhost:27017/swfavorites',
이런식으로 localhost로 되어있는 도메인을 내 호스트 머신으로 연결하기위해
'mongodb://host.docker.internal:27017/swfavorites',
로 변경함 그럼 알아서 도커가 특수 도메인으로 인식해서 도커 컨테이너 내부에서 알 수있는 호스트 머신의 IP주소로 변환된다.
case3 : 컨테이너 간의 통신
1컨테이너 : SQL DB
2컨테이너 : MongoDB
등등 중간 컨테이너에 있는 app이 다른 컨테이너에 잇는 DB와 통신하기 원할떄
컨테이너에는 한 가지 기술에만 집중하게 해서
컨테이너끼리 통신하는게 가장 좋다.
도커 네트워크?
컨테이너간의 통신을 허용하는 것
docker run 명령에 --network 옵션만 추가하면 하나의 동일한 네트워크에 모든 컨테이너를 밀어넣을수있다.
4. Docker로 다중 컨테이너 app 구축하기
MongoDB
NodeJS+REST API
React
3가지 컨테이너를 실행시켜 서로 네트워크 통신 시켜보기
React는 어떤 서버에서 실행되지 않고 브라우저에서 실행된다.
-> React 코드는 컨테이너 내부에서 실행되지 않고 브라우저에서 실행된다.
그래서 3가지 모두 --network 옵션으로 서로 통신하는 것이 아닌
frontend 부분은
$ docker run --name goals-frontend --rm -p 3000:3000 -it goals-react
이와 같이 포트에 개시해서 연결하고 백엔드 코드의 API를 받아와 상호작용하기에
도커환경에서 실행되는 것이 아니다.
backend 부분을
$ docker run --name goals-backend --rm -d -p 80:80 --network goals-net goals-node
로 실행하여 컨테이너 포트 80을 로컬 호스트머신의 포트80에 개시하여
React와 통신하는 것이다.
$ docker run --name mongodb --rm -d --network goals-net mongo
goals-net 으로 DB와 Backend 연결을 하고
브라우저에서 실행되는 React를 --network로 연결하는 것이 아닌
백엔드 API를 받아와 코드에서 직접 연결 시키는 것이다.
docker run --name mongodb -v data:/data/db --rm -d --network goals-net -e MONGO_INITDB_ROOT_USERNAME=minwoo -e MONGO_INITDB_ROOT_PASSWORD=secert mongo
출처 : https://www.udemy.com/course/docker-kubernetes-2022/
Docker & Kubernetes : 실전 가이드
'DevOps > Docker' 카테고리의 다른 글
Docker Image 상세 구조 (1) | 2024.09.15 |
---|---|
Docker Compose (2) | 2024.02.06 |
Docker 이미지와 컨테이너 내부의 데이터 관리 방법 (1) | 2024.02.06 |
Docker 이미지 & 컨테이너 (0) | 2024.02.06 |
컨테이너 만들어 보기 (1) | 2024.01.14 |