NGINX Plus Docker 이미지 구성 및 실행 가이드
이 포스트에서는 NGINX OSS/Plus를 Docker 이미지 로 만들고 컨테이너를 생성하여, 구동하는 방법에 대해 다루겠습니다.
NGINX OSS/Plus는 웹 서버, 리버스 프록시, 소프트웨어 L4/L7 로드 밸런서, API Gateway, 캐시 서버로 많이 사용됩니다.
NGINX 서버를 Docker 이미지로 만들면, 기존에 사용하던 서버를 손쉽게 Docker 컨테이너로 생성하여 구동할 수 있습니다. 또한, 생성한 이미지를 통해 여러 개의 컨테이너를 생성하여 서버를 확장하고 관리하기에 용이합니다.
목차
1. Docker 이미지란?
2. NGINX OSS 웹 서버를 Docker 이미지 로 만들기
3. NGINX Plus 웹 서버를 Docker 이미지 로 만들기
1. Docker 이미지란?

Docker 이미지는 Docker 컨테이너 실행에 필요한 모든 애플리케이션, 라이브러리, 설정 등을 포함한 파일입니다.
Docker 이미지를 통해 사용자는 Docker 컨테이너를 손쉽게 생성하고 배포할 수 있습니다.
하나의 이미지 파일로 여러 개의 컨테이너를 생성할 수 있기 때문에, 서버를 쉽게 확장하고 관리할 수 있습니다.
2. NGINX OSS 웹 서버를 Docker 이미지 로 만들기
NGINX OSS 웹 서버를 Docker 이미지로 만들기 위해 해당 웹 서버를 구성할 파일을 준비합니다.
이번 포스트에서는 nginx.conf 파일과 index.html 파일을 사용하여 Docker 이미지를 생성하겠습니다.
# ls
index.html nginx.conf
index.html 파일은 다음과 같이 작성하였습니다.
<html>
<head>
<title>Welcome to docker test!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to docker test!</h1>
<p>docker test page</p>
</body>
</html>
Docker 이미지 파일을 생성하기 위해서는 Dockerfile 이 필요합니다. 해당 파일의 이름은 Dockerfile로 지정되어야 하며, 내용은 다음과 같이 작성하였습니다.
# 기반이 될 NGINX OSS 이미지 설정
FROM nginx:latest
# COPY <호스트 경로> <도커 이미지 경로>
COPY nginx.conf /etc/nginx/nginx.conf
COPY index.html /usr/share/nginx/html/index.html
# 외부에 노출할 포트 번호 설정
EXPOSE 80
- FROM 지시어를 통해 NGINX OSS의 버전을 지정할 수 있습니다. ex) FROM nginx:1.25.4
- COPY 명령어를 통해 이미지 파일 구성에 사용될 서버 파일을 지정할 수 있습니다.
- 호스트 경로를 디렉토리로 지정할 시, 해당 디렉토리 내의 모든 파일과 하위 디렉토리가 도커 이미지로 복사됩니다.
- EXPOSE 지시어를 통해, 컨테이너를 생성할 때 연결할 포트 번호에 대한 정보를 제공할 수 있습니다.
Docker Hub의 NGINX 최신 버전 이미지에 지정된 호스트의 파일로 구성된 이미지 파일을 생성하도록 구성하였습니다.
# ls
Dockerfile index.html nginx.conf
명령어를 실행하여 my-nginx-image라는 이름의 이미지 파일을 생성하였습니다.
마지막의 .은 Dockerfile의 경로를 의미합니다.
# docker build -t my-nginx-image .

이미지 파일을 생성 후 명령어를 통해 생성된 이미지를 확인할 수 있습니다.
# docker images

명령어를 통해 생성된 이미지 파일로 컨테이너를 생성하고, 실행합니다.
# docker run -d --name mynginx -p 80:80 my-nginx-image
4d3dcc80ea943f297a9b401a997578b8c21feca6eb334915739126342e92a82c
- docker run -d –name <컨테이너 이름> -p <호스트 포트 번호>:<컨테이너 포트 번호> <이미지파일이름>으로 구성되어있습니다.
- 생성에 성공하면 컨테이너의 ID를 반환합니다.
명령어를 통해 생성된 컨테이너가 실행 중임을 확인할 수 있습니다.
# docker ps

80번 포트로 요청 시 이미지 파일에 사용된 html 페이지를 반환함을 확인할 수 있습니다.

3. NGINX Plus 웹 서버를 Docker 이미지 로 만들기
NGINX Plus 웹 서버로 Docker 이미지를 생성하는 방법은 NGINX OSS의 방법과 비슷하지만, Dockerfile 내용 구성에 차이가 있습니다. NGINX OSS 와 마찬가지로 nginx.conf 파일과 index.html 파일을 사용하여 Docker 이미지를 생성하겠습니다.
index.html 파일은 다음과 같이 작성되었습니다.
<html>
<head>
<title>docker nginx plus</title>
</head>
<body>
<h1>docker nginx plus</h1>
<p>docker nginx plus<p>
</body>
</html>
이미지 파일 작성을 위한 Dockerfile을 작성합니다. NGINX Plus 서버를 Docker 이미지로 생성할때 는 OSS와 달리 Docker Hub의 NGINX 이미지 파일을 사용하지 않고 스크립트를 작성해야 합니다.
FROM ubuntu:22.04
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
# Define NGINX versions for NGINX Plus and NGINX Plus modules
# Uncomment this block and the versioned nginxPackages block in the main RUN
# instruction to install a specific release
# ENV NGINX_VERSION 27
# ENV NJS_VERSION 0.7.4
# ENV PKG_RELEASE 1~bullseye
# Download certificate and key from the customer portal (https://account.f5.com)
# and copy to the build context
RUN --mount=type=secret,id=nginx-crt,dst=nginx-repo.crt \
--mount=type=secret,id=nginx-key,dst=nginx-repo.key \
set -x \
# Create nginx user/group first, to be consistent throughout Docker variants
&& addgroup --system --gid 101 nginx \
&& adduser --system --disabled-login --ingroup nginx --no-create-home --home /nonexistent --gecos "nginx user" --shell /bin/false
--uid 101 nginx \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
ca-certificates \
gnupg \
lsb-release \
&& \
NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \
found=''; \
for server in \
hkp://keyserver.ubuntu.com:80 \
pgp.mit.edu \
; do \
echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
done; \
test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
apt-get remove --purge --auto-remove -y gnupg && rm -rf /var/lib/apt/lists/* \
# Install the latest release of NGINX Plus and/or NGINX Plus modules
# Uncomment individual modules if necessary
# Use versioned packages over defaults to specify a release
&& nginxPackages=" \
nginx-plus \
# nginx-plus=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-xslt \
# nginx-plus-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-geoip \
# nginx-plus-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-image-filter \
# nginx-plus-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-perl \
# nginx-plus-module-perl=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-njs \
# nginx-plus-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${PKG_RELEASE} \
" \
&& echo "Acquire::https::pkgs.nginx.com::Verify-Peer \"true\";" > /etc/apt/apt.conf.d/90nginx \
&& echo "Acquire::https::pkgs.nginx.com::Verify-Host \"true\";" >> /etc/apt/apt.conf.d/90nginx \
&& echo "Acquire::https::pkgs.nginx.com::SslCert \"/etc/ssl/nginx/nginx-repo.crt\";" >> /etc/apt/apt.conf.d/90nginx \
&& echo "Acquire::https::pkgs.nginx.com::SslKey \"/etc/ssl/nginx/nginx-repo.key\";" >> /etc/apt/apt.conf.d/90nginx \
&& printf "deb https://pkgs.nginx.com/plus/ubuntu `lsb_release -cs` nginx-plus\n" > /etc/apt/sources.list.d/nginx-plus.list \
&& mkdir -p /etc/ssl/nginx \
&& cat nginx-repo.crt > /etc/ssl/nginx/nginx-repo.crt \
&& cat nginx-repo.key > /etc/ssl/nginx/nginx-repo.key \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
$nginxPackages \
curl \
gettext-base \
&& apt-get remove --purge -y lsb-release \
&& apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx-plus.list \
&& rm -rf /etc/apt/apt.conf.d/90nginx /etc/ssl/nginx \
# Forward request logs to Docker log collector
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
COPY nginx.conf /etc/nginx/nginx.conf
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
Ubuntu 22.04 환경에서의 Dockerfile을 작성하였습니다. 핵심은 NGINX OSS 와 같은 COPY 명령어를 통한 서버 파일의 경로 지정입니다.
NGINX Plus Docker 이미지 생성에 대한 자세한 내용은 Docker에 NGINX 및 NGINX Plus 배포 블로그 포스트를 참고하세요.
NGINX Plus 서버를 Docker 이미지파일로 구성 시, NGINX Plus 인증서와 키 파일도 함께 필요합니다.
# ls
Dockerfile index.html nginx.conf nginx-repo.crt nginx-repo.key
명령어를 통해 Docker 이미지 파일을 생성합니다.
# docker build -t my-nginx-plus .

이미지 파일을 생성 후 명령어를 통해 생성된 이미지를 확인할 수 있습니다.
# docker image ls

명령어를 통해 생성된 이미지 파일로 컨테이너를 생성하고, 실행합니다.
# docker run -d --name myplus -p 80:80 my-nginx-plus
2839caccff5ae818546d5de4c08d619ed8f0595c0a63528c78cfb52327b31c71
명령어를 통해 생성된 컨테이너가 실행 중임을 확인할 수 있습니다.
# docker ps

80번 포트로 요청 시 이미지 파일에 사용된 html 페이지를 반환함을 확인할 수 있습니다.

이렇게 NGINX 서버를 Docker 이미지파일로 만들고, 구동시키는 방법을 알아보았습니다.
댓글을 달려면 로그인해야 합니다.