본문 바로가기
Docker

[Docker] Docker-compose를 활용한 nginx + spring boot + mariadb 연결하기

by 미소여우 2022. 4. 20.
728x90
개념도 중요하지만, 우선 실전 위주로 팍팍 써봤다.

Docker-compose란

compose라는 단어 뜻이 "구성하다"처럼 한 번에 컨테이너를 만들어 주고, 이를 연동해주기 아주 용이하게 해준다. 이렇게 보면 해외 개발자들은 명칭을 아주 직관적으로 잘 만드는 것 같다. 왜 연동하기 용이하냐면, docker-compose에서 작성한 컨테이너들은 하나의 네트워크로 인식시켜주기 때문이다. 그렇게 하면, 아래의 예제처럼 spring boot, mariadb, nginx 등 이미지들이 따로 분리하면서 연결할 수 있으니 관리 차원에서 아주 편해지는 것이다.

NGINX + SpringBoot + MariaDB 컨테이너 생성

먼저 docker-compose.yml 파일을 만들어 주어 아래와 같이 작성해 보자.

# 파일 규격 버전
version: "3"
# 이 항목 밑에 실행하려는 컨테이너 들을 정의
services:
  web:
    image: nginx
    ports: 
      - 80:80
    volumes: 
      - ./nginx/conf.d:/etc/nginx/conf.d

  server:
    image: atk-server
    build: ./docker/server
    container_name: atk-ubuntu
    stdin_open: true
    tty: true
    entrypoint: /bin/bash
  
  # 서비스 명
  database:
    # 사용할 이미지
    image: mariadb
    # 컨테이너 실행 시 재시작
    restart: always
    # 컨테이너 이름 설정
    container_name: atk-mysql
    # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
    ports:
      - "3307:3306"
    # -e 옵션
    environment: 
      # MongoDB 계정 및 패스워드 설정 옵션
      - MYSQL_DATABASE=atk
      - MYSQL_ROOT_PASSWORD=atk123!

    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      # -v 옵션 (다렉토리 마운트 설정)
      - ~/data/mysql-db:/var/lib/mysql
  
  spring:
    image: atk-spring
    build: 
      context: ./
      dockerfile: ./docker/spring/Dockerfile 
    container_name: atk-spring
    ports:
      - 8080:8080
    depends_on:
      - database
    environment:
      SPRING_DATASOURCE_URL: jdbc:mariadb://database:3306/atk?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: atk123!
  • services: 밑에 있는 내용들이 하나의 서비스들이 되고, 곧 컨테이너가 될 것이다. 해당 서비스명이 곧 도커 네트워크에서 식별자 역할을 하게 된다. 서비스명은 원하는데로 입력하자.
  • image: 대상 이미지, Dockerfile을 빌드하는 경우에는 빌드되는 이미지명이 된다.
  • build: Dockerfile을 빌드하는데 사용한다. 필자의 경우 Dockerfile들을 docker라는 디렉토리에 server, spring 디렉토리를 만들어 그 안에 Dockerfile들을 만들었기에 경로를 지정해주었다. 만약에 하나만 있으면 .만 해주면 된다.
  • container_name: 컨테이너 명
  • depends_on: 의존되는 서비스를 지정한다. 스프링 부트 같은 경우 디비가 없으면 정상 실행이 불가하니, 디비가 켜진 다음에 컨테이너가 생성되게끔 해주어야 한다.
  • environment: 환경변수 등을 추가. 추후에 보안을 위해 외부에서 갖고오는 방법을 찾아두어야겠다.
  • volumes: 컨테이너의 내용을 마운트 해준다. db 같은 경우 마운트를 안 해주고 컨테이너를 삭제하면 다 날라가기에, 실제 컴퓨터의 저장소에 기록하기용으로 많이 쓴다. 또는 nginx처럼 환경 설정을 지정하기 위해 사용한다.

이렇게 한 후 아래의 명령어를 입력하면 컨테이너들이 만들어 진다.

docker-compose up -d

-d는 백그라운드의 의미이다.

실행 결과

docker dashboard를 보면 다음과 같이 작동되는 것을 확인할 수 있다.

728x90

'Docker' 카테고리의 다른 글

[Docker] DockerFile 정리  (0) 2022.04.11

댓글