[Docker] 8-3.Docker 실무: 동적 서버 설정

null·2025년 2월 25일
0

Docker

목록 보기
20/24

# nginx.conf

server {
    listen 80;
    server_name _;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }

    location /api/ {
        proxy_pass http://${BACKEND_HOST}:${BACKEND_PORT};
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /ust/share/nginx/html;
    }
}

# dockerFile

# 빌드 이미지로 node:14 지정
FROM node:14 AS build
WORKDIR /app
# 라이브러리 설치에 필요한 파일만 복사
COPY package.json .
COPY package-lock.json .
# 외부 라이브러리 설치
RUN npm install
# 소스코드 복사
COPY . .
RUN npm run build

FROM nginx:1.21.4-alpine

# -- 동적 서버 구성
# 소스코드의 nginx.conf 파일을 이미지 빌드 시 template파일로 복사 기본 환경 변수 지정
COPY nginx.conf /etc/nginx/conf.d/default.conf.template
ENV BACKEND_HOST leafy
ENV BACKEND_PORT 8080

# 컨테이너 실행시 자동으로 실행될 스크립트 지정
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

# 빌드 스테이지에서 생성된 빌드 결과물 복사
COPY --from=build /app/dist /usr/share/nginx/html

EXPOSE 80
# 스크립트 실행 처리
ENTRYPOINT [ "docker-entrypoint.sh" ]
CMD [ "nginx", "-g", "daemon off;" ]
# docker-entrypoint.sh 파일
#!/bin/sh
# 스크립트에서 오류 발생시 중단하도록 설정
set -e

# default.conf.template 파일에서 환경 변수를 대체하고 결과를 default.conf에 저장
# 템플릿 파일과 환경 변수를 읽은 뒤 nginx.conf 파일을 구성하여 nginx 설정으로 복사
envsubst '${BACKEND_HOST} ${BACKEND_PORT}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf

# 다음 명령어를 실행
# 옵션으로 제공 받은 값 CMD [ "nginx", "-g", "daemon off;" ] 을 의미
exec "$@"

0개의 댓글