Docker-compose.yml DB와 연결

melangyun·2020년 4월 20일
1
post-thumbnail

Introduction

지난 글에서는 카카오 로그인을 구현한 간단한 프로젝트에서 docker image로 띄우는 블로깅을 했었다.
회원 관리를 위한 database가 RDS주소로 연결되어 있어 별도의 설정 없이도 RDS로 연결이 되었지만, 조금 더 다양한 환경에서의 개발 연습을 위해 docker-compose 파일을 작성해 MariaDB Docekr image와 연결해 보려고 한다.
개발환경은 Node기반인 NestJS이며, DB는 MariaDB로 세팅하였다.
이 블로깅은 github repository 을 바탕으로 하고 있다.

docker-compose.yml

도커 컴포즈 파일은 도커 실행 옵션을 적어놓은 문서이다.

프로젝트 루트에 파일을 만들고, 내용을 작성하면된다.

version: '3.7'

도커 컴포즈의 작성 버전이다. 각 버전마다 지원하는 내용과 필요한 도커 필요 버전이 다르다.
자세한 내용은 여기에서 확인 할 수 있다.

완성된 docker-compose.yml

version: '3.7'
services: 
    app:
    # 실행 시킬 서버 코드, 다른 이름으로 지정해도 된다.
        build :
            # 빌드 명령을 실행할 디렉터리 경로
            context: .
            # 도커 이미지를 빌드하는데 사용할 도커 파일
            dockerfile: ./Dockerfile
        restart: always
        ports: 
            - 3000:3000
        depends_on:
        	# 의존 관계 설정
            - database
    
    database:
    	# 'database'서비스에서 참조할 이미지
        image: mariadb
        ports: 
            - 3306:3306
        restart: always
        environment: 
            # 환경 설정에 필요한 설정들. server코드와 싱크를 맞추어야 한다.
            MYSQL_ROOT_PASSWORD: 1112
            MYSQL_DATABASE : kakao
            MYSQL_USER: root
            MYSQL_PASSWORD: 1112

서비스가 하나 이상일때 depends_on으로 의존 관계를 지정 해 줄 수 있다.
여기에서는 database가 실행 된 후에 app서비스를 실행하겠다는 의미이다.
condition옵션으로 서비스 시작이나, 서비스 헬스체크 성공 후 실행하겠다는 옵션을 줄 수 있다.

docker-compose.yml 파일이 완성되었으니, .env파일에서 도커 컴포즈 파일의 디비 설정과 싱크를 맞추어 주고,docker-compose up명령어를 통해 실행시키면 정상적으로 실행되는 모습을 볼 수 있다.

DB호스트의 경우 docker-compose에서 지정한 데이터베이스의 이름으로 맞추면 실행된다.
나의 경우에는 database이다.

실행시키기

$ docker-compose up -d --build

up명령은 파일의 내용에 따라 이미지를 빌드하고 서비스를 실행하는 것이다.

이와 상반되는 것으로`down옵션이 있다. 컨테이너와 네트워크를 삭제하고 ,옵션에 따라 볼륨도 지운다.

build을 하면서 이용하려면 --build옵션을 붙이면 된다.(서비스 시작 전 이미지를 새로 만드는 효과가 있다.)
-d옵션은 서비스 실행 후 콘솔로 빠져나오는 것이다.

다음과 같이 이미 작성한 dockerFile을 참조하여 dockerfile이 실행되는 모습을 볼 수 있다.

잠시 기다리면 서버가 정상적으로 작동한다.

켜져있는 서비스를 끄려면 docker-compose가 있는 루트 폴더에서

$ docker-compose stop

를 하면 된다.

빌드 한 후에 서비스를 키려면

$ docker-compose start

를 입력하면 이미 생성되어있는 이미지로 도커 컴포즈 파일대로 도커가 띄워진다.

Conclusion

이번 포스팅에서는 단순히 docker-compose.yml을 작성하고, docker-compose를 이용하여 서버와 데이터베이스를 운용하는 포스팅을 하였다. 하지만, 지금 상황으로는 빌드를 다시 할 때 마다 데이터베이스가 유지되지않으며 초기화 되는 상황이다.
이러한 관점에서 보았을 때, 필요한 이미지를 빠르게 가져다 쓰는 도커의 철학이 DB의 영속성과 충돌되어 바람직하지 않다는 관점도 있다고 한다.
다음 포스팅에서는 DB의 데이터를 저장하는 volume옵션에 대해 공부할 것이다.
또, docker로 실행시킨 환경은, 수정하는 코드가 반영되지 않는 분리된 환경 이므로, 다시 빌드하지 않고 수정된 코드를 실시간으로 반영시키는 방법에 대해서도 공부해 보려고 한다.

참조

도커 컴포즈를 활용하여 완벽한 개발환경 구성하기
Docker (Copose)활용법 - 개발환경 구성하기
과연 도커 컨테이너를 통해 데이터 베이스를 운영하는 게 좋은 방법일까?
Docker를 이용한 외부 접속용 MariaDB만들기
도커 이미지와 컨테이너 삭제 방법

profile
개발을 즐겁게!

0개의 댓글