Docker를 활용한 Nginx 배포 가이드

Nginx 소개 및 Docker 배포 장점

Nginx는 가볍고 고성능의 HTTP 서버이자 리버스 프록시 서버로, 현대 웹 서비스의 핵심 구성 요소입니다. 주요 기능은 다음과 같습니다:

  • 정적 파일 서비스: HTML, CSS, JavaScript, 이미지 등의 정적 리소스를 효율적으로 제공
  • 리버스 프록시: 클라이언트 요청을 백엔드 서버로 전달하며 실제 서버 주소를 숨김
  • 로드 밸런싱: 다수의 백엔드 서버에 트래픽을 분산하여 안정성 확보
  • SSL 종단: HTTPS 암호화/복호화 처리 및 SSL 인증서 관리

Docker를 사용해 Nginx를 배포하면 환경 불일치, 의존성 충돌, 구성 관리 복잡성 등의 문제를 해결할 수 있습니다. Docker의 주요 이점:

  1. 개발, 테스트, 프로덕션 환경에서의 일관성 보장
  2. 가상화 대비 낮은 리소스 사용 및 빠른 시작 시간
  3. 서비스 간 격리로 안정성 향상
  4. 빠른 배포 및 롤백 기능
  5. 명령어 기반의 간편한 운영 관리

사전 준비 작업

Docker가 설치되지 않은 시스템에서는 다음 명령어로 설치할 수 있습니다:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Nginx 이미지 다운로드

Docker Hub에서 공식 Nginx 이미지를 다운로드합니다:

docker pull nginx:latest

이미지 다운로드 확인:

docker images nginx

Nginx 배포 방법

기본 배포 (테스트용)

docker run -d --name nginx-container -p 8080:80 nginx:latest

브라우저에서 http://서버주소:8080 으로 접속하여 Nginx 기본 페이지 확인

볼륨 마운트 방식 (실제 서비스용)

호스트 디렉토리 생성:

mkdir -p /app/nginx/{html,conf,logs}
echo "Nginx Docker 배포 테스트" > /app/nginx/html/index.html

Nginx 컨테이너 실행:

docker run -d --name nginx-service \
  -p 80:80 \
  -v /app/nginx/html:/usr/share/nginx/html \
  -v /app/nginx/conf:/etc/nginx/conf.d \
  -v /app/nginx/logs:/var/log/nginx \
  nginx:latest

기본 설정 파일 생성 (/app/nginx/conf/default.conf):

server {
    listen 80;
    server_name localhost;
    
    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

설정 적용을 위한 컨테이너 재시작:

docker restart nginx-service

Docker Compose를 이용한 배포

docker-compose.yml 파일 생성:

version: '3.8'
services:
  webserver:
    image: nginx:latest
    container_name: nginx-app
    ports:
      - "80:80"
    volumes:
      - ./web-content:/usr/share/nginx/html
      - ./nginx-config:/etc/nginx/conf.d
      - ./nginx-logs:/var/log/nginx
    restart: unless-stopped

서비스 실행:

docker-compose up -d

서비스 확인

컨테이너 상태 확인:

docker ps
docker logs nginx-service

자주 발생하는 문제 해결

포트 충돌 문제:

netstat -tuln | grep :80

방화벽 설정:

sudo ufw allow 80/tcp
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload

HTTPS 설정:

ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;

로그 관리:

docker logs --tail 50 nginx-service

태그: docker nginx 컨테이너 배포 리버스프록시

9월 5일 05:39에 게시됨