DevOps와 클라우드 환경에서 애플리케이션을 배포하기 위해 Docker와 Nginx는 필수적인 도구입니다. 이번 포스트에서는 Docker와 Nginx를 활용하여 간단한 웹 서버를 구축하는 미니 프로젝트를 진행해 보겠습니다. 이 과정에서 Docker의 이미지와 컨테이너 개념, Nginx의 리버스 프록시 설정 등을 다루게 됩니다.
1. 환경 준비하기
먼저, Docker가 설치되어 있어야 합니다. Docker가 설치되어 있지 않다면 Docker 공식 사이트에서 설치 방법을 확인하고 설치하세요. 설치가 완료되면, Docker 서비스를 시작합니다.
sudo systemctl start docker
2. 프로젝트 디렉토리 구조 만들기
먼저 프로젝트를 위한 디렉토리를 생성합니다.
mkdir docker-nginx-example
cd docker-nginx-example
그 안에 필요한 파일들을 생성합니다.
mkdir html
touch Dockerfile nginx.conf
3. HTML 파일 작성
html 디렉토리 안에 index.html 파일을 작성합니다. 이 파일은 웹 서버에서 제공할 콘텐츠입니다.
<!-- html/index.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Docker와 Nginx로 구축한 웹 서버</title>
</head>
<body>
<h1>안녕하세요, Docker와 Nginx로 구축한 웹 서버입니다!</h1>
</body>
</html>
4. Dockerfile 작성
Dockerfile을 작성하여 Nginx를 설치하고, 웹 콘텐츠를 제공하도록 설정합니다.
# Dockerfile
FROM nginx:alpine
# HTML 파일 복사
COPY html /usr/share/nginx/html
# Nginx 설정 파일 복사
COPY nginx.conf /etc/nginx/conf.d/default.conf
5. Nginx 설정 파일 작성
nginx.conf 파일을 작성하여 Nginx가 요청을 어떻게 처리할지 설정합니다.
# nginx.conf
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
6. Docker 이미지 빌드
이제 Docker 이미지를 빌드할 차례입니다. 아래 명령어를 사용하여 이미지를 생성합니다.
docker build -t my-nginx-server .
my-nginx-server는 생성할 이미지의 이름입니다. 완료되면, Docker 이미지 목록에서 확인할 수 있습니다.
docker images
7. Docker 컨테이너 실행
이제 빌드한 이미지를 바탕으로 컨테이너를 실행해 보겠습니다.
docker run -d -p 8080:80 --name web-server my-nginx-server
위 명령어는 8080 포트를 호스트와 연결하여 Nginx 웹 서버를 실행합니다. 웹 서버가 잘 실행되고 있는지 확인하기 위해 브라우저에서 http://localhost:8080으로 접근해 보세요. "안녕하세요, Docker와 Nginx로 구축한 웹 서버입니다!"라는 메시지를 볼 수 있습니다.
8. 컨테이너 관리
컨테이너가 정상적으로 실행되고 있다면, Docker 명령어로 컨테이너를 관리할 수 있습니다.
- 컨테이너 목록 보기:
docker ps
docker stop web-server
docker rm web-server
9. 문제 해결
웹 서버가 제대로 작동하지 않는 경우, 다음과 같은 점을 확인해 보세요.
docker logs web-server
마무리
이제 Docker와 Nginx를 이용하여 간단한 웹 서버를 구축하는 법을 배웠습니다. 이 미니 프로젝트는 실제 애플리케이션을 배포하기 위한 기본적인 단계이며, DevOps와 클라우드 환경에서 매우 유용한 기술입니다. Docker를 활용하면 다양한 환경에서 일관된 방식으로 애플리케이션을 배포할 수 있으며, Nginx는 고성능 웹 서버 및 리버스 프록시로서의 기능을 제공하여 다수의 사용 사례에 적합합니다. 다음에는 더 복잡한 설정이나 다른 기술 스택과의 통합을 시도해 보는 것도 좋을 것입니다. Happy Coding!