Infra
도커 네트워크 - 도커네트워크 생성 및 추가
SungHoJung
2025. 5. 1. 01:13
프로젝트에서 NCP 크레딧을 지원받아 사용하는데, NCP 상요범위에 DB 인스턴스가 포함되지 않아, 서버에 컨테이너로 DB를 띄웠다. 프로젝트에서 Redis도 사용하고 있어서 이 둘을 묶어서 docker-compose로 묶어 관리했는데, 스프링 컨테이너를 띄워서 통신을 하려고 하니, localhost로는 통신이 불가능했다.
도커 컴포즈 파일을 생성할 때, Redis와 DB를 브릿지 네트워크로 묶어주었는데, 해당 네트워크에 서버를 실행하는 컨테이너가 포함되어있지 않아 발생한 문제였다.
따라서 새로 네트워크를 만들고, 네트워크 안에 DB, Redis, 서버 컨테이너를 포함시켜 서로 통신이 가능하게 하려고 한다.
브릿지
도커 네트워크
도커 네트워크 생성 및 추가
# 도커 네트워크 생성
root@tf-ncp-bastion:~# docker network create zaply-network
964e5b032b7e85705844253609b72c4abfc1027b0ad8f4f4abbc819ca1b6d235
# 생성한 도커 네트워크(zaply-network)에 컨테이너들 추가
root@tf-ncp-bastion:~# docker network connect zaply-network zaply-redis
root@tf-ncp-bastion:~# docker network connect zaply-network zaply-db
root@tf-ncp-bastion:~# docker network connect zaply-network zaply
# 생성한 네트워크 메타데이터 확인
root@tf-ncp-bastion:~# docker network inspect zaply-network
확인해보면, 내가 도커 네트워크에 구성한 컨테이너들이 잘 들어있는 걸 볼 수 있다.
그러나 zaply 컨테이너는 들어있지 않은데, zaply 컨테이너(서버 컨테이너)는 지우고 다시 띄울 때마다 새로 도커 네트워크에 등록해줘야 해서, 빌드하면서 빌드 옵션에서 zaply-network를 추가해주려고 한다.(b 방법)
서버 컨테이너 실행 및 네트워크에 추가
a) 서버 컨테이너 환경변수 변경 및 이미지 재빌드
application.yml 파일에서
localhost:5432 -> zaply-db:5432
localhost:6379 -> zaply-redis:6379
docker pull leosunghojung/zaply:latest
root@tf-ncp-bastion:~# docker run -d \
--name zaply \
--network zaply-network \
-p 80:8080 \
leosunghojung/zaply:latest
application.yml 컨테이너를 가리키도록 엔드포인트를 수정하고, 이미지를 재빌드 한 후, 해당 서버 컨테이너를 재 실행하면 된다.
b) 실행 시 환경변수 주입
docker pull leosunghojung/zaply:latest
root@tf-ncp-bastion:~# docker run -d \
--name zaply \
--network zaply-network \
-p 80:8080 \
-e SPRING_DATASOURCE_URL=jdbc:postgresql://zaply-db:5432/zaplydb \
-e SPRING_DATASOURCE_USERNAME=zaply \
-e SPRING_DATASOURCE_PASSWORD=db_password \
-e SPRING_REDIS_HOST=zaply-redis \
-e SPRING_REDIS_PORT=6379 \
leosunghojung/zaply:latest
이렇게 하면 빌드시점에 appliation.yml 파일에 지정해놓은 localhost:5432, localhost:6379 환경 변수를 수정하지 않아도, 컨테이너 이름으로 서로를 식별할 수 있다.
이후 잘 뜨는 모습이다.