티스토리 뷰

반응형

Nginx의 필요성

 

 

Q. 개발환경 서버와 운영환경 서버가 달라야 하는 이유

 

개발에서 사용하는 서버(Dockerfile.dev)

  • 소스 변경시 자동으로 전체 앱을 다시 빌드해서 변경 소스를 반영 → 개발환경에 특화

 

운영환경 서버(Dockerfile)

  • 소스 변경시 변경 소스 반영X →개발에 필요한 기능들이 필요하지 않아 더 깔끔함

 

Nginx의 장점

Q. Docker에서 nginx를 사용하는 이유는?

nginx(리버스 프록시 서버)는 백엔드 서버 앞에 위치해서 클라이언트 요청을 백엔드 서버로 전달

이로인해 아래와 같은 장점이 있음

  • 백엔드 서버의 주소 숨길 수 있음(리버스 프록시)
  • 들어오는 네트워크 트래픽을 여러 서버에 분산시켜 부하를 균등하게 분배(로드 밸런싱)
  • 자주 요청되는 데이터(예: 이미지, CSS, JavaScript 파일 등)를 캐시에 저장 → 서버 응답시간 단축
  • SSL(웹사이트-사용자간 통신 암호화, 보안유지 프로토콜) 처리로 안전한 HTTPS 연결 제공

Nginx을 Compose에 적용

1. dockerfile.nginx 파일 생성 및 적용(dockerfile-folder/web/dockerfile.nginx)

FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80

2. default.conf 파일 생성 및 작성(dockerfile-folder/web/default.conf)

default.conf 파일이 Dockerfile.nginx와 같은 디렉토리에 존재해야한다.

  • default.conf 와 nginx.conf
    • nginx.conf
      • nginx.conf는 Nginx의 전역 설정(worker 프로세스의 수, 로그파일의 위치, 클라이언트 요청 방법) 을 정의
      • but 일반적으로 Docker를 사용할 때는 Docker Hub에서 제공하는 Nginx 이미지를 가져와서 사용하고, 이 이미지에는 기본 nginx.conf 파일이 이미 포함되어 있어 이걸 사용함
    • default.conf
      • 특정 서버 또는 도메인에 대한 설정을 정의(어떤 포트에서 리스닝할껀지, SSL설정, 리버스 프록시 설정)
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://web:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. docker-compose.yaml 추가 (dockerfile-folder/docker-compose.yaml)

services:
  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    depends_on:
      - db
    environment:
      DATABASE_USER: ${MYSQL_USER}
      DATABASE_PASSWORD: ${MYSQL_PASSWORD}
      DATABASE_NAME: ${MYSQL_DATABASE}
    networks:
      - backend


  nginx:
    build:
      context: ./web
      dockerfile: dockerfile.nginx
    networks:
      - backend
    ports:
      - "80:80"
    depends_on:
      - db

4. docker build

docker-compose down
docker-compose up --build
[+] Building 1.1s (17/17) FINISHED                                                                                 docker:desktop-linux
 => [web internal] load build definition from dockerfile                                                                           0.0s
 => => transferring dockerfile: 837B                                                                                               0.0s
 => [web internal] load .dockerignore                                                                                              0.0s
 => => transferring context: 2B                                                                                                    0.0s
 => [web internal] load metadata for docker.io/library/python:3.8-slim                                                             1.0s
 => [nginx internal] load .dockerignore                                                                                            0.0s
 => => transferring context: 2B                                                                                                    0.0s
 => [nginx internal] load build definition from dockerfile.nginx                                                                   0.0s
 => => transferring dockerfile: 159B                                                                                               0.0s
 => [nginx internal] load metadata for docker.io/library/nginx:latest                                                              0.0s
 => [nginx internal] load build context                                                                                            0.0s
 => => transferring context: 398B                                                                                                  0.0s
 => CACHED [nginx 1/2] FROM docker.io/library/nginx:latest                                                                         0.0s
 => [nginx 2/2] COPY ./default.conf /etc/nginx/conf.d/default.conf                                                                 0.0s
 => [nginx] exporting to image                                                                                                     0.0s
 => => exporting layers                                                                                                            0.0s
 => => writing image     0.0s
 => => naming to docker.io/library/dockerfile-folder-nginx                                                                         0.0s
 => [web 1/5] FROM docker.io/library/python:3.8-slim@s     0.0s
 => [web internal] load build context                                                                                              0.0s
 => => transferring context: 2.03kB                                                                                                0.0s
 => CACHED [web 2/5] WORKDIR /app                                                                                                  0.0s
 => CACHED [web 3/5] COPY requirements.txt .                                                                                       0.0s
 => CACHED [web 4/5] RUN pip install --no-cache-dir -r requirements.txt                                                            0.0s
 => [web 5/5] COPY . .                                                                                                             0.0s
 => [web] exporting to image                                                                                                       0.0s
 => => exporting layers                                                                                                            0.0s
 => => writing image                                     0.0s
 => => naming to docker.io/library/dockerfile-folder-web                                                                           0.0s
[+] Running 5/3
 ✔ Network dockerfile-folder_backend    Created                                                                                    0.0s 
 ✔ Network dockerfile-folder_default    Created                                                                                    0.0s 
 ✔ Container mysql-container-web        Created                                                                                    0.1s 
 ✔ Container dockerfile-folder-nginx-1  Created                                                                                    0.0s 
 ✔ Container dockerfile-folder-web-1    Created                                                                                    0.1s 
Attaching to dockerfile-folder-nginx-1, dockerfile-folder-web-1, mysql-container-web

docker-compose logs nginx #에러가 있을 경우
 

 

* 참고자료

https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

https://newwisdom.tistory.com/105

https://medium.com/@rajani103/deploying-a-noteapp-project-by-nginx-920067dca1b5

반응형

'DOCKER' 카테고리의 다른 글

[DOCKER] Docker Compose  (0) 2024.01.08
[Docker] Docker Volume  (2) 2024.01.02
[Docker] Docker 최적화  (0) 2023.12.28
[Docker] Docker Container2 - 코드로 보는 개념  (0) 2023.12.26
[Docker] Docker Image  (0) 2023.12.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함