1. .dockerignore 파일
docker 이미지를 빌드할 때 제외할 파일을 정해준다.
# Logs
logs
*.log
npm-debug.log*
# Dependency directories
node_modules/
# dotenv environment variable files
.env
.gitignore
2. Dockerfile.dev
# 노드를 베이스로 생성
FROM node:16.13.1
# mysql이 실행 할 준비가 되고 나서 실행할 수 있도록
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
# app 디렉토리 , working 디렉토리 생성
RUN npm install -g nodemon
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install dependencies
COPY package*.json .
RUN npm install
# Bundle app source
COPY . .
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ./docker-entrypoint.sh
# Exports
EXPOSE 8080
FROM : 사용할 이미지 베이스를 생성한다.
ENV ~ RUN wget : dockerize라는 프로그램은 도커 컨테이너의 실행순서를 결정해줄 수 있는 프로그램이다. mysql의 작동 준비가 완료되고 node가 실행되어야 sequelize sync를 맞출 수 있다.
Sequelize cannot sync to MySQL in a docker container from Node/express app (ECONNREFUSED)
I am using sequelize, MySQL and docker together for the first time and cannot get sequelize to connect to the db. I have tested the presence of the DB with DBeaver and I can connect. I can also se...
stackoverflow.com
install dependencies : 모듈을 빌드하지 않고 해당 이미지 내에서 npm install로 package.json을 참고해서 빌드한다. package*.json 은 package-lock.json도 참고해 모듈의 version을 특정한다.
3.docker-entrypoint.sh
# docker-entrypoint.sh for node.js
# 서버를 시작하기 전에 db가 준비될 때 까지 20초의 텀을 가진다.
echo "wait db server"
dockerize -wait tcp://db:3306 -timeout 20s
echo "start node server"
nodemon index.js
위의 sequelize sync를 맞추기 위해 docker-entrypoint.sh에서 db가 실행되기 전 20초의 텀을 가지므로 실행 준비 완료 상태가 될 시간을 준다.
4. docker-compose.yml
version: "3.5"
networks:
nemo-net:
services:
mysql:
networks:
- nemo-net
image: mysql
restart: always
env_file:
- .env
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD="${SQUARE_WITH_ME_DB_PASSWORD}"
server:
networks:
- nemo-net
build:
context: .
dockerfile: Dockerfile.dev
container_name: nemo_BE
restart: always
env_file:
- .env
ports:
- "${PORT}:80"
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: ${SQUARE_WITH_ME_DB_PASSWORD}
MYSQL_DATABASE: sqare_with_me
MYSQL_PORT: 3306
depends_on:
- mysql
links:
- mysql
docker-compose 파일은 다음과 같이 작성했다. $를 기재한 부분은 .env의 값을 가져오기 위함이다.
9. Docker-compose에서 환경 변수 설정하기(.env파일) (node.js) (tistory.com)
9. Docker-compose에서 환경 변수 설정하기(.env파일) (node.js)
1. 구조 .env파일은 docker-compose와 같이 최상단에 있어야 한다. 2. .env 파일 PORT=8080 SQUARE_WITH_ME_PASSWORD=12345678 port는 서버 listen 할 포트번호이고 square with me password는 프로젝트 db(mysq..
l-0-l.tistory.com
depends_on: 서비스 간 의존관계를 나타낸다.
links: 컨테이너 간의 연결을 나타낸다.
'[항해99]' 카테고리의 다른 글
travis ci에서 ignore된 환경 변수(.env 파일) 사용하기 (0) | 2022.03.24 |
---|---|
DOCKER, TRAVIS CI, GITHUB 연결 (1) (0) | 2022.03.24 |
[TIL] CSRF, Same Site 쿠키 (0) | 2022.03.14 |
[TIL] Access Token , Refresh Token (0) | 2022.03.11 |
[항해99] Week 08 회고 / webRTC (1) | 2022.03.06 |
댓글