반응형
본 내용은 인프런의 데브위키님의 강의 "개발자를 위한 쉬운 도커" 내용을 바탕으로 정리한 내용입니다.
기존 방식의 문제점
- Nginx 서버 설정에 백엔드 애플리케이션의 주소가 고정되어 있는데 환경 별로 Nginx가 프록시 해야 하는 주소가 바뀔 수 있다.
- 프록시 설정의 주소를 바꾸기 위해 이미지 빌드를 다시 해야 한다.
환경 변수를 활용한 동적 서버 설정
- 환경 별로 달라지는 정보는 시스템 환경 변수로 처리하면 컨테이너 실행 시 결정할 수 있다.
- 더 유연한 애플리케이션 이미지를 설계할 수 있다.
그림 1) 환경변수를 활용한 Nginx 프록시 설정
예시 1) leafy-frontend 도커파일 수정 및 캐싱 테스트
# 1. easydocker/leafy/leafy-frontend 디렉터리 이동 및 소스코드 상태 변경
git reset --hard HEAD && git clean -fd
git switch 03-proxy
# 또는 git switch 04-dynamicconfig
예시 2) easydocker/leafy/leafy-frontend/nginx.conf 파일수정
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api/ {
# 웹서버로오는요청중 /api/로시작하는경로의요청을 해당 환경변수 url로 전달
proxy_pass http://${BACKEND_HOST}:${BACKEND_PORT};
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
예시 3) easydocker/leafy/leafy-frontend/Dockerfile 수정
FROM node:14 AS build
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm ci
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/
# docker-entrypoint.sh을 실행할 수 있는 권한 부여
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;"]
예시 4) easydocker/leafy/leafy-frontend/docker-entrypoint.sh 생성
#!/bin/sh
# 오류 발생시 스크립트 중지
set -e
# default.conf.template 파일에서 환경 변수를 대체하고 결과를 default.conf에 저장
envsubst '${BACKEND_HOST} ${BACKEND_PORT}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
# < 템플릿 파일과 환경 변수를 읽은 뒤 nginx.conf 파일을 구성하여 nginx 설정으로 복사
# 다음 명령어를 실행
exec "$@"
예시 5) leafy-frontend 이미지 빌드 및 애플리케이션 구동 테스트
# 1. 이미지 빌드
docker build -t leafy-front:4.0.0-env .
# 2. network가 제대로 생성되어 있는지 확인
docker network create leafy-network
# 3. 애플리케이션 구동 및 테스트, 백엔드 애플리케이션의 접속 도메인 변경
# localhost:80 접속하여 정상 접속 확인
docker run -d --name leafy-postgres -v mydata://var/lib/postgresql/data --network leafy-network devwikirepo/leafy-postgres:1.0.0
# 컨테이너 명을 leafy > leafy-backend로 수정함
docker run -d -e DB_URL=leafy-postgres --name leafy-backend --network leafy-network devwikirepo/leafy-backend:1.0.0
# leafy-frontend 컨테이너 실행 및 BACKEND_HOST를 leafy-backend로 지정
docker run -d -e BACKEND_HOST=leafy-backend -p 80:80 --name leafy-front --network leafy-network leafy-front:4.0.0-env
# 4. 설정 파일에 환경 변수가 적용되었는지 확인
docker exec leafy-front cat etc/nginx/conf.d/default.conf
# 5. 환경 정리
docker rm -f leafy-postgres leafy-backend leafy-front
반응형
'Docker' 카테고리의 다른 글
[Docker] 도커 실무(컨테이너 애플리케이션 최적화) (0) | 2024.07.19 |
---|---|
[Docker] 도커 실무(PostgreSQL 이중화 DB 구성) (0) | 2024.07.19 |
[Docker] 도커 실무(3 Tier 아키텍처 구성) (0) | 2024.07.19 |
[Docker] 도커 실무(캐싱을 활용한 빌드) (0) | 2024.07.19 |
[Docker] 도커 실무(레이어 관리) (0) | 2024.07.19 |