오랜만에 도커를 사용하려고 하니 사용법이 잘 기억이 나지 않았다. 일종의 snipset으로 사용했던 코드를 올려둔다.
docker.compose.yml
: aws을 사용할거라면 postgresql은 따로 포함하지 않아도 알아서 처리해준다.
version: "3"
services:
client:
image: "blaxsior/multi-client"
mem_limit: 128m
hostname: client
server:
image: "blaxsior/multi-server"
mem_limit: 128m
hostname: api
environment:
- REDIS_HOST=$REDIS_HOST
- REDIS_PORT=$REDIS_PORT
- PGUSER=$PGUSER
- PGHOST=$PGHOST
- PGDATABASE=$PGDATABASE
- PGPASSWORD=$PGPASSWORD
- PGPORT=$PGPORT
worker:
image: "blaxsior/multi-worker"
mem_limit: 128m
hostname: worker
environment:
- REDIS_HOST=$REDIS_HOST
- REDIS_PORT=$REDIS_PORT
nginx:
image: "blaxsior/multi-nginx-"
mem_limit: 128m
hostname: nginx
ports:
- "80:80"
docker-compose.dev.yml
version: '3.9'
services:
postgres: #service name
image: 'postgres:latest'
environment:
- POSTGRES_PASSWORD=postgres_password
redis:
image: 'redis:latest'
nginx:
restart: always
build:
dockerfile: Dockerfile.dev
context: ./nginx
ports:
- '8080:80'
depends_on:
- api
- client
api:
depends_on:
- postgres
- redis
build:
dockerfile: Dockerfile.dev
context: ./server
volumes:
- /home/node/app/node_modules
- ./server:/home/node/app
env_file:
- ./postgres.env
- ./redis.env
client:
build:
dockerfile: Dockerfile.dev
context: ./client
volumes:
- /app/node_modules
- ./client:/app
worker:
build:
dockerfile: Dockerfile.dev
context: ./worker
env_file:
- ./redis.env
volumes:
- /home/node/app/node_modules
- ./worker:/home/node/app
depends_on:
- redis
Dockerfile.dev
FROM node:alpine
ARG START_DIR=/home/node/app
USER node
# 설정에 에러 발생하는 경우
RUN mkdir ${START_DIR}
RUN chown -R node:node ${START_DIR}
WORKDIR ${START_DIR}
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]
FROM node:alpine
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
Dockerfile
FROM node:alpine
ARG START_DIR=/home/node/app
USER node
RUN mkdir ${START_DIR}
RUN chown -R node:node ${START_DIR}
WORKDIR ${START_DIR}
COPY ./package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
FROM node:alpine as builder
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/.next /usr/share/nginx/html
# next js와 함께
nginx
FROM nginx
# COPY ./default.conf /etc/nginx/nginx.conf
COPY ./default.conf /etc/nginx/conf.d/default.conf
# nginx 의 경우
FROM nginx
# COPY ./default.conf /etc/nginx/nginx.conf
COPY ./default.conf /etc/nginx/conf.d/default.conf
upstream client {
server client:3000;
}
upstream api {
server api:5000;
}
server {
listen 80;
location / {
proxy_pass http://client;
}
location /_next/webpack-hmr {
proxy_pass http://client;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /api {
rewrite /api/(.*) /$1 break;
proxy_pass http://api;
}
}
// nginx 설정 코드. 좀 더 공부가 필요하다...
server {
listen 3000;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri.html $uri/ =404;
}
}
'잡다 > docker' 카테고리의 다른 글
[docker] restart policy (0) | 2023.05.01 |
---|---|
[오늘의삽질] 도커와 커널: 아주 구 버전의 이미지는 호환되지 않을 수 있다 (0) | 2023.04.07 |
[docker] 오늘의 삽질 : nginx : host not found in upstream ~ 에러 (0) | 2022.03.03 |
[docker] cli 명령어들 (0) | 2022.02.21 |
[docker] Vmmem 이 지나치게 메모리를 잡아먹는 현상 (0) | 2022.02.14 |