도커를 이용해 스프링 부트로 구현한 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
도커 네트워크 브릿지 튜토리얼
'백엔드 개발 > Docker' 카테고리의 다른 글
[ssl] aws에 docker와 letsencrypt(certbot) 이용해서 ssl 인증 적용하기 (1) | 2019.03.05 |
---|---|
[docker swarm] worker node를 새로 생성했을 열어줘야하는 포트 (0) | 2018.12.22 |
[docker machine] docker machine으로 lightsail instance 제어하기( aka 삽질기) (0) | 2018.12.14 |
[aws lightsail] AWS 라이트세일에 도커 이용해서 운영 서버 구성 (0) | 2018.12.05 |
[docker & spring boot] jar file을 docker container를 이용해서 배포 (0) | 2018.11.27 |