본문 바로가기
Develop/Feature

[Docker] Database docker-compose 구축(mysql, redis)

by 코젼 2024. 7. 22.
728x90
반응형

목차

    Docker 설치

    https://www.docker.com/

     

    Docker: Accelerated Container Application Development

    Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

    www.docker.com

     

    도커 컴포즈는 개발 환경 세팅이라고 생각하고, 프로젝트 파일과 별개로 docker-compose.yml 파일을 생성해도 된다.

    docker-compose.yml 파일을 열고 작성한다.

    vi docker-compose.yml

     

    docker-compose.yml

    services:
      mysql-docker:
        image: mysql:latest
        container_name: "mysql"
        restart: always
        ports:
          - 3306:3306
        environment:
          MYSQL_ROOT_PASSWORD: 1234
          TZ: Asia/Seoul
        platform: linux/x86_64
        volumes:
          - ./schema.sql:/schema.sql
      redis-docker:
        image: redis:latest
        command: redis-server --requirepass 1234 --port 6379
        container_name: "redis"
        labels:
          - "name=redis"
          - "mode=standalone"
        ports:
          - 6379:6379

    schema.sql

    -- 유저
    DROP TABLE IF EXISTS user;
    CREATE TABLE IF NOT EXISTS user (
      id BIGINT NOT NULL COMMENT '유저 PK',
      amount DECIMAL(7,0) COMMENT '잔액',
      PRIMARY KEY (id)
    ) ENGINE=InnoDB;
    
    -- 대기열
    DROP TABLE IF EXISTS waiting_token;
    CREATE TABLE IF NOT EXISTS waiting_token (
        id BIGINT NOT NULL AUTO_INCREMENT COMMENT '대기열 PK',
        user_id BIGINT COMMENT '유저 PK',
        token VARCHAR(255) NOT NULL COMMENT '토큰 정보(uuid)',
        waiting_token_status ENUM('ACTIVATE','DEACTIVATE','EXPIRED') COMMENT '대기열 토큰 상태',
        created_at DATETIME(6) COMMENT '대기열 토큰 요청 시간',
        modified_at DATETIME(6) COMMENT '상태 변경 시간',
        PRIMARY KEY (id),
        UNIQUE (token)
    ) ENGINE=InnoDB;
    
    -- 콘서트
    DROP TABLE IF EXISTS concert;
    CREATE TABLE IF NOT EXISTS concert (
        id BIGINT NOT NULL AUTO_INCREMENT COMMENT '콘서트 PK',
        name VARCHAR(20) NOT NULL COMMENT '콘서트 이름',
        host VARCHAR(10) NOT NULL COMMENT '콘서트 주최자',
        PRIMARY KEY (id)
    ) ENGINE=InnoDB;
    
    -- 콘서트 날짜
    DROP TABLE IF EXISTS concert_schedule;
    CREATE TABLE IF NOT EXISTS concert_schedule (
        id BIGINT NOT NULL AUTO_INCREMENT COMMENT '콘서트 날짜 PK',
        concert_id BIGINT COMMENT '콘서트 PK',
        concert_date DATE NOT NULL COMMENT '콘서트 날짜',
        PRIMARY KEY (id)
    ) ENGINE=InnoDB;
    
    -- 콘서트 좌석
    DROP TABLE IF EXISTS concert_seat;
    CREATE TABLE IF NOT EXISTS concert_seat (
        id BIGINT NOT NULL AUTO_INCREMENT COMMENT '콘서트 좌석 PK',
        concert_id BIGINT COMMENT '콘서트 PK',
        concert_schedule_id BIGINT COMMENT '콘서트 날짜 PK',
        seat_number INT NOT NULL COMMENT '콘서트 좌석 번호',
        seat_price DECIMAL(7,0) COMMENT '콘서트 좌석 금액',
        modified_at DATETIME(6) COMMENT '상태 변경 시간',
        expired_at DATETIME(6) COMMENT '좌석 임시 배정 만료 시간',
        user_id BIGINT COMMENT '유저 PK',
        seat_status ENUM('AVAILABLE','RESERVED','TEMPORARY') COMMENT '콘서트 좌석 상태',
        PRIMARY KEY (id)
    ) ENGINE=InnoDB;
    
    -- 예약
    DROP TABLE IF EXISTS reservation;
    CREATE TABLE IF NOT EXISTS reservation (
        id BIGINT NOT NULL AUTO_INCREMENT COMMENT '콘서트 예약 PK',
        concert_seat_id BIGINT NOT NULL COMMENT '콘서트 좌석 PK',
        user_id BIGINT NOT NULL COMMENT '유저 PK',
        concert_name VARCHAR(20) NOT NULL COMMENT '콘서트 이름',
        concert_date DATE NOT NULL COMMENT '콘서트 날짜',
        reservation_status ENUM('CANCELED','RESERVED','RESERVING') COMMENT '예약 상태',
        created_at DATETIME(6) COMMENT '콘서트 예약 요청 시간',
        modified_at DATETIME(6) COMMENT '상태 변경 시간',
        PRIMARY KEY (id)
    ) ENGINE=InnoDB;
    
    -- 결제
    DROP TABLE IF EXISTS payment;
    CREATE TABLE IF NOT EXISTS payment (
        id BIGINT NOT NULL AUTO_INCREMENT COMMENT '콘서트 결제 PK',
        reservation_id BIGINT COMMENT '콘서트 예약 PK',
        price DECIMAL(7,0) COMMENT '결제 금액',
        payment_state ENUM('PENDING', 'CANCELED','COMPLETED') COMMENT '결제 상태',
        created_at DATETIME(6) COMMENT '콘서트 결제 요청 시간',
        modified_at DATETIME(6) COMMENT '상태 변경 시간',
        PRIMARY KEY (id),
        UNIQUE (reservation_id)
    ) ENGINE=InnoDB;

     

    실행

    docker-compose: 여러 docker 컨테이너를 정의하고 관리할 수 있는 도구. 하나의 구성 파일로 정의하고 명령어 하나로 실행할 수 있다.

    -f: 사용할 compose 파일을 지정한다.

    up: compose 파일에 정의된 서비스들을 생성하고 시작한다. 필요한 경우 이미지를 빌드하고 컨테이너를 생성한다음 모든 컨테이너를 연결하고 시작한다.

    -d: 컨테이너를 백그라운드에서 실행하도록 지정한다. 이 옵션을 사용하지 않으면 컨테이너의 로그가 현재 터미널에 출력되고 터미널을 차지하게 된다.

    docker-compose -f docker-compose.yml up -d

    terminal
    docker container

    MySQL

     

    Redis

    728x90
    반응형

    'Develop > Feature' 카테고리의 다른 글

    [Redis] Redisson vs Lettuce vs Spring data redis  (0) 2024.07.31
    Redis  (0) 2024.07.23
    Filter, Interceptor  (0) 2024.07.16
    Mac Node.js 설치  (0) 2024.06.24
    Swagger UI 사용  (0) 2024.06.12

    댓글