티스토리 뷰
반응형
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설정, 리버스 프록시 설정)
- nginx.conf
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 |
댓글