Docker로 웹서버 구축하기–Nginx 환경 설정부터 자동배포까지

최근 IT업계와 개발자 커뮤니티에서 가장 많이 언급되는 기술 중 하나가 Docker(도커)입니다.
도커는 복잡한 서버 환경을 ‘컨테이너(Container)’로 단순화시켜, 누구나 손쉽게 웹서버를 구축하고 자동배포(DevOps)까지 구현할 수 있게 해줍니다.

1. Docker란 무엇인가

Docker는 애플리케이션과 실행 환경을 하나의 패키지(컨테이너)로 묶어 어디서든 실행할 수 있게 하는 가상화 기술입니다.
기존의 가상머신(VM)과 달리 운영체제 전체를 복사하지 않고, 필요한 구성만 가볍게 분리해 실행합니다.

즉, “개발 환경 그대로 서버에 옮길 수 있는 기술”이라고 이해하면 됩니다.

Docker의 장점

  • 실행 환경이 동일하므로 “내 컴퓨터에서는 되는데 서버에서는 안 돼요” 문제가 사라짐
  • 여러 서비스를 각각 독립된 컨테이너로 운영 가능
  • 배포 및 백업이 간단 (한 줄 명령으로 전체 환경 재현 가능)
  • 서버 자원 효율이 뛰어나고 속도가 빠름

2. Docker 설치하기

Docker는 대부분의 OS에서 무료로 사용할 수 있습니다.
가정용 서버나 클라우드 서버 모두 설치 방법이 단순합니다.

Ubuntu (리눅스) 기준 설치 명령어:

sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo systemctl start docker

설치 후 다음 명령어로 정상 작동 여부를 확인합니다.

docker --version

버전 정보가 출력되면 설치가 완료된 것입니다.

Windows나 Mac 사용자는 Docker Desktop을 설치하면 GUI 환경에서 컨테이너를 관리할 수 있습니다.

3. Nginx 웹서버 컨테이너 만들기

웹서버를 가장 간단히 구축할 수 있는 방법은 Nginx 이미지를 불러와 실행하는 것입니다.

docker run -d -p 80:80 --name webserver nginx
  • -d: 백그라운드 모드 실행
  • -p 80:80: 서버의 80포트를 컨테이너의 80포트와 연결
  • --name webserver: 컨테이너 이름 지정
  • nginx: Docker Hub의 공식 Nginx 이미지 사용

이제 브라우저에서 http://서버IP 를 입력하면
“Nginx Welcome Page”가 뜨면서 웹서버가 정상 작동하는 것을 확인할 수 있습니다.

4. HTML 파일 직접 배포하기

Nginx의 기본 페이지 대신 직접 만든 HTML 파일을 띄우려면, 호스트 디렉터리를 컨테이너와 연결해야 합니다.

docker run -d -p 80:80 --name myweb \
-v /home/user/html:/usr/share/nginx/html nginx
  • -v: 볼륨 마운트 옵션 (로컬 폴더와 컨테이너 폴더 연결)
  • /home/user/html: 로컬에 저장된 내 웹페이지 경로
  • /usr/share/nginx/html: Nginx의 웹루트 디렉터리

이제 /home/user/html 폴더에 index.html을 넣으면,
자동으로 웹서버에서 해당 페이지가 서비스됩니다.

5. Docker Compose로 자동 관리하기

프로젝트가 커질수록 매번 컨테이너를 수동으로 실행하는 것은 번거롭습니다.
이때 Docker Compose를 사용하면 여러 컨테이너를 한 번에 실행하고, 설정 파일 하나로 관리할 수 있습니다.

docker-compose.yml 예시:

version: '3'
services:
  web:
    image: nginx:latest
    container_name: nginx_server
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: always

실행 명령어:

docker-compose up -d

이제 서버가 재부팅되어도 자동으로 Nginx 컨테이너가 실행됩니다.
restart: always 옵션 덕분에 자동 복구 기능까지 구현됩니다.

6. SSL(HTTPS) 설정 – Let’s Encrypt 자동 적용

보안을 위해 HTTPS를 설정하려면 Certbot 컨테이너를 함께 사용합니다.

docker run -it --rm \
-v /etc/letsencrypt:/etc/letsencrypt \
-v /var/lib/letsencrypt:/var/lib/letsencrypt \
certbot/certbot certonly --standalone -d example.com

SSL 인증서를 발급받으면, Nginx 설정 파일에서 다음처럼 적용할 수 있습니다.

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

도커 볼륨을 이용하면 인증서도 자동 백업 및 재사용이 가능하므로
서버 재설치 시에도 HTTPS 환경을 바로 복원할 수 있습니다.

7. 자동배포 파이프라인 구축 (CI/CD)

도커의 강력한 장점 중 하나는 자동배포(Continuous Deployment) 기능입니다.
GitHub, GitLab, Jenkins 같은 플랫폼과 연동하면 코드 수정 시 자동으로 웹서버가 업데이트됩니다.

GitHub Actions 예시:

on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 코드 클론
        uses: actions/checkout@v3
      - name: 도커 빌드 및 배포
        run: |
          docker build -t mywebapp .
          docker stop webserver || true
          docker rm webserver || true
          docker run -d -p 80:80 --name webserver mywebapp

이 설정을 추가하면 깃허브에 새 코드를 푸시할 때마다
웹서버가 자동으로 재빌드·재배포됩니다.

8. 도커 웹서버 운영 시 주의사항

  • 보안: 컨테이너 포트를 외부에 개방할 때는 방화벽(UFW) 설정을 반드시 적용합니다.
  • 백업: 중요한 웹 데이터는 볼륨(-v 옵션)으로 호스트에 저장하여 정기적으로 백업하세요.
  • 로그 관리: docker logs webserver 명령으로 로그를 확인하고, 필요 시 Logrotate 설정으로 용량 폭주 방지
  • 이미지 업데이트: 정기적으로 docker pull nginx 명령으로 최신 버전을 유지합니다.

9. Docker 웹서버 활용 아이디어

  • 개인 블로그나 포트폴리오 사이트 직접 호스팅
  • WordPress를 Docker로 테스트 서버로 운영
  • REST API 서버나 개발용 백엔드 서버로 활용
  • Reverse Proxy로 여러 서비스(NAS, 홈서버 등) 통합 접근

특히 크리에이터나 프리랜서라면, 저렴한 VPS나 가정용 서버에서
Docker로 구축한 웹서버를 운영해도 충분히 안정적입니다.

결론

Docker는 이제 단순한 개발 도구가 아니라,
웹서비스를 빠르고 안정적으로 배포할 수 있는 핵심 인프라 기술입니다.
특히 Nginx 컨테이너를 이용한 웹서버 구축은 가볍고 효율적이며,
자동배포까지 구현하면 개인도 기업 수준의 운영 환경을 손쉽게 갖출 수 있습니다.

Docker를 이해하고 활용하는 순간,
“개발 → 배포 → 유지관리”의 전 과정을 자동화할 수 있는 미니 DevOps 시스템이 완성됩니다.

댓글 남기기