Docker로 Node서버와 Sequelize를 실행 시킬 때 연동이 안되는 문제가 발생
Node 컨테이너가 실행 된 후 mysql(Sequelize) 컨테이너가 실행 되게 순서를 만들기로 했다.
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
CMD
와 비슷해 보이지만 컨테이너 실행 시 run을 통해 명령어 및 인자값을 전달해도 기존(ENTRYPOINT)의 명령이 실행 됩니다.ENTRYPOINT ["/bin/echo", "hello"]
를docker run-it [image]
하면 hello
로docker run-it [image] hello_world
해도 hello
로 실행됩니다.dockerize -wait tcp://mysql:3306 -timeout 20s
echo "Start server" && echo "Start server2"
npm run test
dockerize 프로그램이 dockerize-entrypoint.sh를 실행 시킨 후
mysql 컨테이너가 켜진 후 20초 정도후에 실행되게 한다.
timeout
은 기본 10초라고한다.
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