Docker sequelize sync 문제

00_8_3·2021년 2월 23일
0

sequelize

목록 보기
4/4

문제

Docker로 Node서버와 Sequelize를 실행 시킬 때 연동이 안되는 문제가 발생

해결 방안

Node 컨테이너가 실행 된 후 mysql(Sequelize) 컨테이너가 실행 되게 순서를 만들기로 했다.

Dockerfile

FROM node:15.5.1-alpine3.12 as base

// 1
ENV DOCKERIZE_VERSION v0.2.0
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \  
    && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package*.json ./

ENV NODE_ENV=development \
    TZ=Asia/Seoul

RUN npm install -g sequelize-cli
RUN npm install && npm cache clean --force


COPY . .

// 2
RUN chmod +x docker-entrypoint.sh  
ENTRYPOINT ./docker-entrypoint.sh

# Exports
EXPOSE 3001
    1. 커널로 DOKERIZE 프로그램을 설치 한다.
    1. docker-entrypoint.sh에게 모든 사용자에게 실행 권한을 추가
    • ENTRYPOINT 란 : CMD와 비슷해 보이지만 컨테이너 실행 시 run을 통해 명령어 및 인자값을 전달해도 기존(ENTRYPOINT)의 명령이 실행 됩니다.
      예를 들어 ENTRYPOINT ["/bin/echo", "hello"]
      docker run-it [image]하면 hello
      docker run-it [image] hello_world해도 hello로 실행됩니다.

docker-entrypoint.sh

dockerize -wait tcp://mysql:3306 -timeout 20s

echo "Start server" && echo "Start server2"
npm run test

dockerize 프로그램이 dockerize-entrypoint.sh를 실행 시킨 후
mysql 컨테이너가 켜진 후 20초 정도후에 실행되게 한다.
timeout은 기본 10초라고한다.

docker-compose.yml

version: '3.7'

networks:
  app-tier:
    driver: bridge

services:
  mysql:
    networks:
      - app-tier
    image: mysql
    command: --lower_case_table_names=1
    restart: always
    # ports:
    #   - '3306:3306'
    environment:
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=haruharu
      - MYSQL_DATABASE=HaRu_HaRu
      - MYSQL_PASSWORD=haruharu
    volumes:
      - ./db:/var/lib/mysql

  server:
    networks:
      - app-tier
    build: .
    restart: unless-stopped
    # command: npm run test
    ports:
      - '3001:3001'
    environment:
      - PORT=3001
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=haruharu
      - MYSQL_DATABASE=HaRu_HaRu
      - MYSQL_PASSWORD=haruharu
      # - DATABASE_URL
    volumes:
      - ./:/usr/src/app:delegated
      - /usr/src/app/node_modules
      - ./seeders:/usr/src/app/seeders
    links:
      - mysql
    depends_on:
      - mysql

  phpmyadmin:
    networks:
      - app-tier
    image: phpmyadmin/phpmyadmin:latest
    container_name: myadmin
    environment:
      - PMA_HOST=mysql
      - MYSQL_ROOT_PASSWORD=haruharu
      - PMA_ARBIRARY=1
    restart: always
    ports:
      - '8081:80'
    volumes:
      - ./phpmyadmin:/docker/phpmyadmin/sessions
    links:
      - mysql
    depends_on:
      - mysql

출처

Dockerize
Dockerize && Netcat
dockerize 깃헙

0개의 댓글