본문 바로가기

백엔드 개발/Docker

[docker] 도커 컨테이너 사이의 네트워킹

반응형

도커를 이용해 스프링 부트로 구현한 was를 배포해봤다.

이제 배포한 백엔드 로직을 도커 컨테이너를 이용해 띄워놓은 MariaDB와 Redis와 상호작용할 수 있도록 서로 연결해야한다.

내가 사용할 수 있는 선택지는 세가지 있었다.


1) 도커 컨테이너의 열어놓은 포트와 ip주소를 이용해 연결한다.

기존에 이용하고 있던 방법 개발하는 중에는 컨테이너의 열어놓은 포트와 ip주소를 입력해서 개발하였다.

application.yml에 datasource url에 192.xx.xxx.xx:3306 이런 식으로 입력해서 db에 접근했었다.

배포 환경에서도 동일하게 적용할 수 있지만 고정된 ip값을 사용한다는 것에서 기각했다.


2)link 옵션을 사용한다.

기존에 가장 많이 사용하던 link 옵션이 있다. docker run 명령어를 실행할 때 --link <컨테이너 이름> 이런식으로 입력하는 것이다.

그리고 application.yml의 datasource url 옵션에도 컨테이너 이름을 입력하면 연결이 된다.

그러나 이 옵션을 곧 사라질지도 모른다고 한다. 그래서 공식적으로 추천하는 방식이 아니다. 그래서 기각데스


3) 공식적으로 권장하는 사용자 정의 네트워크를 만들어서 컨테이너끼리 연결해준다.

link 옵션과 그리 다르지는 않다. 다만 docker network create 명령어를 이용해 네트워크를 만들고 연결할 컨테이너에

docker connect <네트워크 이름> <컨테이너 이름>을 입력해서 서로 연결하면 컨테이너 이름을 이용해서 서로 통신할 수 있다.

---
spring:
  profiles: production
  datasource:
    platform: mariadb
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://withkid-rdb:3306/with-kid
    username: root
    password: 1234
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
  redis:
    host: withkid-redis
    port: 6379
  h2:
    console:
      enabled: true
logging:
  level:
    root: info
server:
  port: 8081
---


실제 내 프로젝트의 설정파일이다.

실제 구동 환경의 profile을 정의한 부분인데.

빨간 색 글자를 보면 url이 아니라 컨테이너명을 입력했다.


컨테이너들을 실행하고 network의 정보를 확인한 모습이다.

컨테이너들이 상호 연결되어 있다.


이번 작업을 하는데 아래 글들을 참고해서 많은 도움이 되었다.


http://bluese05.tistory.com/15

도커 네트워크 구조 - ㅍㅍㄱㄷ


http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter06/02

가장 빨리 만나는 도커 link 옵션 부분


https://docs.docker.com/network/network-tutorial-standalone/#use-the-default-bridge-network

도커 네트워크 브릿지 튜토리얼


반응형