Skip to content

Lab-pository/hello-docker-compose-network

Repository files navigation

Hello docker-compose network

문제상황?

제대로된 문제 상황인지에 대한지는 잘 모르겠지만 일단 적어본다.

프로젝트를 배포하면서 하나의 서버에서 각기 다른 도커 컴포즈 파일을 사용해서 Spring Boot 서버와 Redis를 올려서 사용하게 되었다.

이 경우에, Spring Boot 서버에서 Redis로 Connection 체크 시 성공은 하지만, 정작 Redis 부분을 사용하는 코드에서 오류가 발생하게 되었다.

각기 다른 도커 컴포즈 파일을 사용하게 되면 디폴트로 각각의 네트워크가 생성된다는 것은 알았지만, 서로 통신하게 되지 못할 줄 몰랐다.

이것이 과연 도커 컴포즈에서 자동으로 생성한 docker network 때문이라면, 서버가 올라가기 전 Connection 체크할 때 오류가 발생해야 하는 것 아닌가??

어떻게 해결했는가?

먼저 docker compose 내부 파일에서 말고, docker network를 하나 생성해주었다. 그 다음 각 docker compose 파일에서 외부 docker network를 사용하도록 하고, Spring Boot 서버에서 localhost 가 아닌 redis 를 통해서 통신을 할 수 있도록 호스트 주소를 변경해주었다.

상황 재현하기

아래의 저장소를 만들고 테스트를 테스트 해보자.

https://github.com/Lab-pository/hello-docker-compose-network

Step 1 로컬 데이터베이스를 사용하듯, 설정해주기

  • DB_URL: jdbc:mysql://localhost:3306/docker_test

1 먼저 docker/mysql/docker-compose-mysql.yml 을 실행한다.

2

이후 docker/web/docker-compose-web.yml 을 실행한다.

3

다음과 같이 실행이 되지 않는 것을 확인할 수 있다.

Step 2 같은 도커 네트워크를 사용하는 것 처럼 설정해주기

따로 도커 컴포즈 파일을 실행시켜, 서로 다른 도커 네트워크를 사용하지만 같은 도커 네트워크를 사용하는 것처럼 설정해보자.

  • DB_URL: jdbc:mysql://database:3306/docker_test

4

실행이 되지 않는다.

Step 3 공용 도커 네트워크를 생성해서 이를 사용하도록 하기

먼저 공용으로 같이 사용할 Docker Network를 생성해준다.

docker network create test-docker-network

그리고 각각의 docker-compose.yml 파일에 다음과 같이 추가해준다.

version: "3.8"
services:
  ...:
    ...
  networks:
    - test-docker-network
networks:
  test-docker-network:
    external: true

어떤 네트워크를 사용할 것이고, 외부 네트워크를 사용하겠다는 설정을 추가해준다.

5

6

이후, 각각을 실행시켜준다. 여기서 docker-network 가 생성되지 않음을 알 수 있다.

7

정상적으로 실행됨을 알 수 있다.

회고

도커 네트워크에 대한 이해가 높았다면 더 쉽게 해결할 수 있지 않았을까? 라는 생각을 하게 되었다. 실제 업무에서 도커를 사용하는 경우에는 네트워크 구성이 어떻게 되는지도 궁금해지게 되었다.

참고 자료

About

Multiple docker compose with network Lab

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published