Categories
Tags
408 words in content
4 minutes for read
Docker Bridge Network를 활용한 내부통신 구성
인식한 상황
팀원 배포를 할 때, Docker를 사용한 배포에서 오류가 생겼다. 확인해 보니 arm64에서 build한 image는 amd64에서 사용할 수 없다는 문구를 보고 컴퓨터 구성 때 배운 chip의 형태가 달라서 그런 건 가라는 생각하게 되었다. 이 부분에 있어 buildx를 사용하면 다른 플랫폼의 image를 빌드 할 수 있는 점을 보고 해결했다.
하지만, MySQL도 Container로 구성하여 사용하다 보니 localhost로는 접근할 수 없었다. Log를 확인해 보니 Localhost로 접근하려니 connection 연결 자체가 되지 않고 있었다.
해결 과정
비용 절감을 생각하여 위 DB 연결 문제를 해결하기 위해 Docker Network와 내부 네트워크 기반 통신 방식을 활용하기로 했다.
각 API 서버, AI 서버, 그리고 MySQL의 IP를 고정하여 배포했다. 이때 API 서버와 AI 서버는 내부 IP로 통신하도록 하여 VM을 새롭게 구성하지 않고 비용을 절감하였다.
CLI
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=Emodiary11! \
-e MYSQL_DATABASE=emodiary \
-e TZ=Asia/Seoul \
-p 13306:3306 \ # DB 조회를 위한 Port 연결
--net emodiary-bridge \
--ip 172.20.0.2 \
mysql:8.0.22
docker run -d \
--name api-server \
-e TZ=Asia/Seoul \
-p 8080:8080 \
--net emodiary-bridge \
--ip 172.20.0.3 \
hyungjoonson/emodiary-api-server
docker run -d \
--name ai-server \
-e TZ=Asia/Seoul \
--net emodiary-bridge \
--ip 172.20.0.4 \
hyungjoonson/emodiary-ai-server
Architecture
결과
테스트하다 보니 MySQL의 포트를 연결하여 사용했다. 위 아키텍처 그림과 같이 내부 통신으로 구성하여 보안성까지 높일 수 있었다.