DevOps 환경에서 효율적인 웹 서버 구축은 매우 중요합니다. 오늘은 Nginx와 Docker를 활용하여 간단한 웹 서버를 구축하는 미니 프로젝트를 진행해보겠습니다. 이 과정을 통해 Docker의 컨테이너화 개념과 Nginx의 기본 설정을 익힐 수 있습니다.

1. Docker 설치

우선 Docker가 설치되어 있어야 합니다. Docker는 다양한 플랫폼에서 실행할 수 있으며, 설치 방법은 다음과 같습니다.

  1. Docker 공식 웹사이트(Docker 공식 문서)에서 운영 체제에 맞는 설치 방법을 확인하고 Docker를 설치합니다.
  2. 설치 후, Docker가 정상적으로 작동하는지 확인하기 위해 아래 명령어를 터미널에 입력합니다.
   docker --version

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

2. Nginx Docker 이미지 만들기

Nginx는 고성능의 웹 서버이자 리버스 프록시 서버입니다. Docker Hub에서 Nginx 이미지를 다운로드하여 사용할 수 있습니다. 아래 명령어로 Nginx 이미지를 다운로드합니다.

docker pull nginx

Nginx 이미지를 다운로드한 후, 기본 설정 파일을 작성하겠습니다. 프로젝트 디렉토리를 생성하고, 그 안에 nginx.conf 파일을 만들어줍니다.

mkdir my-nginx-project
cd my-nginx-project
touch nginx.conf
nginx.conf 파일에 다음과 같이 Nginx 설정을 추가합니다.
server {
    listen 80;
    server_name localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

3. HTML 파일 생성

Nginx가 제공할 HTML 파일을 만들어보겠습니다. html 디렉토리를 생성하고 간단한 index.html 파일을 만들어주세요.

mkdir html
echo "<h1>Welcome to my Nginx server!</h1>" > html/index.html

이제 html 디렉토리에는 index.html 파일이 생성되었습니다.

4. Dockerfile 작성

Docker를 사용하여 Nginx를 컨테이너화하기 위해 Dockerfile을 작성합니다. 아래와 같이 Dockerfile을 생성합니다.

touch Dockerfile
Dockerfile에 아래 내용을 추가합니다.
FROM nginx:latest

# Nginx 설정 파일 복사
COPY nginx.conf /etc/nginx/nginx.conf

# HTML 파일 복사
COPY html /usr/share/nginx/html

5. Docker 이미지 빌드하기

이제 Docker 이미지를 빌드해보겠습니다. 아래 명령어를 실행하여 Docker 이미지를 생성합니다.

docker build -t my-nginx .

이 명령어는 현재 디렉토리(.)에 있는 Dockerfile을 기반으로 my-nginx라는 이름의 이미지를 생성합니다.

6. Docker 컨테이너 실행하기

이미지 빌드가 완료되면, Docker 컨테이너를 실행할 차례입니다. 아래 명령어를 통해 컨테이너를 실행합니다.

docker run -d -p 8080:80 my-nginx

위 명령어는 my-nginx 이미지를 기반으로 컨테이너를 실행하고, 호스트의 8080 포트를 컨테이너의 80 포트에 매핑합니다.

7. 웹 서버 확인하기

브라우저를 열고 http://localhost:8080에 접속해보세요. "Welcome to my Nginx server!"라는 메시지를 확인할 수 있을 것입니다.

8. 컨테이너 정지 및 삭제

작업이 끝난 후, 컨테이너를 정지하려면 아래 명령어를 사용합니다.

docker ps

현재 실행 중인 컨테이너의 ID를 확인한 후, 다음 명령어로 정지합니다.

docker stop <컨테이너_ID>

컨테이너를 삭제하려면 아래 명령어를 사용합니다.

docker rm <컨테이너_ID>

마무리

이번 포스트에서는 Nginx와 Docker를 활용하여 간단한 웹 서버를 구축하는 방법을 알아보았습니다. Docker를 사용하면 환경 설정이 간편해지고, 컨테이너 간의 충돌을 피할 수 있어 DevOps 환경에서 매우 유용합니다. 이 기본적인 설정을 바탕으로 더 복잡한 웹 애플리케이션으로 확장해보길 바랍니다. 추가적으로 Docker Compose를 활용하여 여러 컨테이너를 함께 관리하는 방법도 고려해볼 수 있습니다.