[Springboot + MySQL + Docker] 도커를 이용한 멀티 컨테이너 환경 구성 (Docker-compose)

Kim Dae Hyun·2021년 8월 20일
1

Docker

목록 보기
6/7

프로젝트 설정과 Dockerfile은 이전 게시글 혹은 Github를 참고해주세요.

🔎 Docker-compose.yml 작성

이전에 Docker-compose 없이 멀티컨테이너를 구동했던 설정을 그대로 Docker-compose에 적용할 것 입니다.

version: "3.7"

services:
  db-mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: user
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    ports:
      - 3306:3306
    networks:
      - springboot-mysql-net
  test-app:
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    depends_on:
      - db-mysql
    networks:
      - springboot-mysql-net

networks:
  springboot-mysql-net:
         driver: bridge

Docker-composeservices 밑에 여러 컨테이너들을 가질 수 있습니다. 여기서 생성되는 컨테이너들은 기본적으로 같은 네트워크에서 구동되게 됩니다.(default network)
하지만 이전에 했던 예제와 아예 동일하게 하기 위해 네트워크도 설정해주었습니다.

하나씩 자세히 볼께요.

db-mysql
mysql 을 컨테이너로 구동시키기 위한 설정입니다.

  • image: 도커허브에서 가져올 이미지 (docker pull mysql:5.7 동일)
  • environment: mysql 구동시 필요한 환경변수 설정
    (사용할 db이름, 접속할 user이름, password)
  • ports: 포트매핑 (로컬의 포트에서 접근할 포트와 컨테이너 내부의 포트와 맞춤)
  • networks: 컨테이너가 구동될 네트워크 설정

test-app
springboot 를 컨테이너로 구동시키기 위한 설정입니다.

  • build: 이미지 빌드에 필요한 정보를 설정합니다.
    • context: 로컬에서 프로젝트가 존재하는 경로를 설정합니다.
    • dockerfile: 도커파일의 이름을 지정합니다.
      여기서 이름을 굳이 지정하는 이유는 DockerfileDockerfile-dev 혹은 Dockerfile-prod 등 개발환경과 운영환경에서 쓰이는 이름이 다를 수 있기 때문입니다.
  • port: 이전과 동일
  • depend_on: db-mysql 컨테이너에 의존한다는 의미인데 여기서 의존은 반드시 db-mysql컨테이너가 구동된 후에 test-app 컨테이너를 구동시키겠다는 의미입니다.
  • networks: 이전과 동일

networks
이전 예제와 동일하게 네트워크를 구성하였습니다.


🔎 컨테이너 구동

docker-compose up or docker-compose up -d

서버가 정상적으로 구동되어 로컬에서 접근이 가능합니다.
또한 ps 명령어로 구동중인 컨테이너를 보면 mysqlspringboot 두 개 컨테이너가 구동되는 것을 확인할 수 있습니다.

컨테이너 중지
docker-compose down

profile
좀 더 천천히 까먹기 위해 기록합니다. 🧐

0개의 댓글