
Docker에 NGINX 및 NGINX Plus 배포
NGINX 및 NGINX Plus를 Docker 컨테이너로 배포합니다.
고성능 애플리케이션 제공 플랫폼, load balancer 및 웹 서버인 NGINX Plus를 Docker 컨테이너로 사용할 수 있습니다.
전제 조건
- Docker 설치
- Docker Hub 계정(NGINX 오픈 소스)
- nginx-repo.crt 및 nginx-repo.key 파일, Docker 이미지 생성을 위한 Dockerfile(NGINX Plus)
목차
1. Docker 컨테이너에서 NGINX 오픈 소스 실행
2. Docker 컨테이너에서 NGINX Plus 실행
2-1. NGINX Plus Docker 이미지 만들기
3. 콘텐츠 및 구성 파일 관리
3-1. Docker 호스트에서 콘텐츠 및 구성 파일 유지 관리
3-2. Docker 호스트에서 콘텐츠 및 구성 파일 복사
3-3. 컨테이너의 컨텐츠 및 구성 파일 유지 관리
4. 로깅 관리
4-1. 기본 로깅 사용
4-2. 사용자 정의 로깅 사용
5. NGINX 제어
1. Docker 컨테이너에서 NGINX 오픈 소스 실행
Docker Hub의 NGINX 오픈 소스 이미지를 사용하여 Docker 컨테이너에 NGINX 인스턴스를 생성할 수 있습니다.
1. 다음 명령을 사용하여 기본 NGINX 구성을 설정하고 컨테이너에서 실행 중인 NGINX 인스턴스를 시작합니다.
$ docker run --name mynginx1 -p 80:80 -d nginx
- mynginx1은 NGINX 이미지를 기반으로 생성된 컨테이너의 이름입니다.
- -d 옵션은 컨테이너가 분리된 모드로 실행되도록 지정합니다. 컨테이너는 중지될 때까지 계속 실행되지만 command line에서 실행되는 명령에 응답하지 않습니다.
- -p 옵션은 Docker에게 NGINX 이미지(포트 80)에 의해 컨테이너에 노출된 포트를 Docker 호스트의 지정된 포트에 매핑하도록 지시합니다. 첫 번째 매개 변수는 Docker 호스트의 포트를 지정하고, 두 번째 매개 변수는 컨테이너에 노출된 포트에 매핑됩니다.
명령어는 컨테이너 ID의 긴 형식을 반환합니다.
fcd1fb01b14557c7c9d991238f2558ae2704d129cf9fb97bb4fadf673a58580d
이 ID 형식은 로그 파일 이름에 사용됩니다.
2. 컨테이너가 생성되었고 docker ps 명령으로 실행 중인지 확인합니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ...
fcd1fb01b145 nginx:latest "nginx -g 'daemon of 16 seconds ago Up 15 seconds ...
... PORTS NAMES
... 0.0.0.0:80->80/tcp mynginx1
또한 이 명령을 사용하면 이전 단계에서 설정된 포트 매핑을 볼 수 있습니다. 위의 표시의 PORTS 필드의 의미는 Docker 호스트의 포트 80이 컨테이너의 포트 80에 매핑되었다고 하는 것 입니다.
2. Docker 컨테이너에서 NGINX Plus 실행
Docker는 NGINX Plus와 함께 사용할 수도 있습니다. NGINX 오픈 소스와 함께 Docker를 사용하는 것의 차이점은 NGINX Plus 상용 제품으로 Docker Hub에서 사용할 수 없기 때문에 먼저 NGINX Plus 이미지를 생성해야 한다는 것입니다.
Note: NGINX Plus 이미지를 Docker Hub와 같은 공개 저장소에 업로드하지 마십시오. 그렇게 하는 것은 라이센스 계약을 위반하는 것입니다.
2-1. NGINX Plus Docker 이미지 만들기
1. Docker build context 또는 Dockerfile을 만듭니다.
Dockerfile
FROM debian:bullseye-slim
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 \
gnupg1 \
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 gnupg1 && 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/debian `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
EXPOSE 80
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
Dockerfile.alpine
FROM alpine:3.16
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 in the main RUN
# instruction to install a specific release
# ENV NGINX_VERSION 27
# ENV NJS_VERSION 0.7.4
# ENV PKG_RELEASE 1
# 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=cert.pem \
--mount=type=secret,id=nginx-key,dst=cert.key \
set -x \
# Create nginx user/group first, to be consistent throughout Docker variants
&& addgroup -g 101 -S nginx \
&& adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx \
# 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} \
" \
KEY_SHA512="e7fa8303923d9b95db37a77ad46c68fd4755ff935d0a534d26eba83de193c76166c68bfe7f65471bf8881004ef4aa6df3e34689c305662750c0172fca5d8552a *stdin" \
&& apk add --no-cache --virtual .cert-deps openssl \
&& wget -O /tmp/nginx_signing.rsa.pub https://nginx.org/keys/nginx_signing.rsa.pub \
&& if [ "$(openssl rsa -pubin -in /tmp/nginx_signing.rsa.pub -text -noout | openssl sha512 -r)" = "$KEY_SHA512" ]; then \
echo "key verification succeeded!"; \
mv /tmp/nginx_signing.rsa.pub /etc/apk/keys/; \
else \
echo "key verification failed!"; \
exit 1; \
fi \
&& apk del .cert-deps \
&& cat cert.pem > /etc/apk/cert.pem \
&& cat cert.key > /etc/apk/cert.key \
&& apk add -X "https://pkgs.nginx.com/plus/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \
&& if [ -n "/etc/apk/keys/nginx_signing.rsa.pub" ]; then rm -f /etc/apk/keys/nginx_signing.rsa.pub; fi \
&& if [ -n "/etc/apk/cert.key" && -n "/etc/apk/cert.pem"]; then rm -f /etc/apk/cert.key /etc/apk/cert.pem; fi \
# Bring in gettext so we can get `envsubst`, then throw
# the rest away. To do this, we need to install `gettext`
# then move `envsubst` out of the way so `gettext` can
# be deleted completely, then move `envsubst` back.
&& apk add --no-cache --virtual .gettext gettext \
&& mv /usr/bin/envsubst /tmp/ \
\
&& runDeps="$( \
scanelf --needed --nobanner /tmp/envsubst \
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
| sort -u \
| xargs -r apk info --installed \
| sort -u \
)" \
&& apk add --no-cache $runDeps \
&& apk del .gettext \
&& mv /tmp/envsubst /usr/local/bin/ \
# Bring in tzdata so users could set the timezones through the environment
# variables
&& apk add --no-cache tzdata \
# Bring in curl and ca-certificates to make registering on DNS SD easier
&& apk add --no-cache curl ca-certificates \
# Forward request and error logs to Docker log collector
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
# vim:syntax=Dockerfile
2. NGINX 오픈 소스와 마찬가지로 기본 NGINX Plus 이미지의 기본 설정은 동일합니다.
- 액세스 및 오류 로그가 Docker 로그 수집기에 연결됩니다.
- 볼륨이 지정되지 않았습니다. Dockerfile을 사용하여 기본 이미지를 만들 수 있습니다. 여기서 볼륨이 지정된 새 이미지를 생성하거나 볼륨을 수동으로 지정할 수 있습니다.
VOLUME /usr/share/nginx/html
VOLUME /etc/nginx
- 컨테이너가 생성될 때 Docker 호스트에서 파일이 복사되지 않습니다. 각 Dockerfile에 COPY 정의를 추가하거나 생성한 이미지를 다른 이미지의 기반으로 사용할 수 있습니다.
3. NIGNX Plus를 구독하고 받은 nginx-repo.crt 및 nginx-repo.key 파일을 다운로드합니다. NGINX Plus 평가판의 경우 평가판 패키지와 함께 파일이 제공됩니다.
4. Dockerfile이 있는 디렉토리에 파일을 복사하십시오.
5. 예를 들어 nginxplus와 같은 Docker 이미지를 만듭니다(명령어의 마지막 마침표를 참고하세요).
$ docker build --no-cache --secret id=nginx-key,src=nginx-repo.key --secret id=nginx-crt,src=nginx-repo.crt -t nginxplus .
–no-cache 옵션은 Docker에 이미지를 처음부터 빌드하도록 지시하고 최신 버전의 NGINX Plus 설치합니다. Dockerfile이 이전에 –no-cache 옵션 없이 이미지를 빌드하는 데 사용된 경우 새 이미지는 Docker 캐시에서 이전에 빌드된 이미지의 NGINX Plus 버전을 사용합니다.
6. docker images 명령을 사용하여 nginxplus 이미지가 성공적으로 생성되었는지 확인합니다.
$ docker images nginxplus
REPOSITORY TAG IMAGE ID CREATED SIZE
nginxplus latest ef2bf65931cf 6 seconds ago 91.2 MB
7. 이 이미지를 기반으로 컨테이너를 만듭니다(예: mynginxplus 컨테이너).
$ docker run --name mynginxplus -p 80:80 -d nginxplus
8. docker ps 명령을 사용하여 mynginxplus 컨테이너가 실행 중인지 확인합니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS ...
eb7be9f439db nginxplus:latest "nginx -g 'daemon of 1 minute ago Up 15 seconds ...
... PORTS NAMES
... 0.0.0.0:80->80/tcp mynginxplus
NGINX Plus 컨테이너는 NGINX 오픈 소스 컨테이너와 동일한 방식으로 제어 및 관리됩니다.
3. 콘텐츠 및 구성 파일 관리
NGINX 및 NGINX 구성 파일이 제공하는 콘텐츠는 다음과 같은 여러 가지 방법으로 관리할 수 있습니다.
- 파일은 Docker 호스트에서 유지 관리됩니다.
- 파일은 Docker 호스트에서 컨테이너로 복사됩니다.
- 파일은 컨테이너에 유지됩니다.
3-1. Docker 호스트에서 콘텐츠 및 구성 파일 유지 관리
컨테이너가 생성되면 Docker 호스트의 로컬 디렉토리를 컨테이너의 디렉토리에 마운트할 수 있습니다. NGINX 이미지는 컨테이너의 루트 디렉터리로 /usr/share/nginx/html을 사용하고 구성 파일을 /etc/nginx에 넣는 기본 NGINX 구성을 사용합니다. 로컬 디렉토리 /var/www에 콘텐츠가 있고 /var/nginx/conf에 구성 파일이 있는 Docker 호스트의 경우 다음 명령을 실행합니다.
$ docker run --name mynginx2 --mount type=bind,source=/var/www,target=/usr/share/nginx/html,readonly --mount source=/var/nginx/conf,target=/etc/nginx/conf,readonly -p 80:80 -d nginx
Docker 호스트의 로컬 디렉토리 /var/www 및 /var/nginx/conf에 있는 파일의 변경 내용은 컨테이너의 디렉토리 /usr/share/nginx/html 및 /etc/nginx에 반영됩니다. 읽기 전용 옵션은 이러한 디렉토리를 컨테이너 내부가 아닌 Docker 호스트에서만 변경할 수 있음을 의미합니다.
3-2. Docker 호스트에서 콘텐츠 및 구성 파일 복사
Docker는 컨테이너를 생성하는 동안 Docker 호스트의 로컬 디렉토리에서 컨텐츠 및 구성 파일을 복사할 수 있습니다. 컨테이너가 생성되면 파일이 변경될 때 새 컨테이너를 생성하거나 컨테이너의 파일을 수정하여 파일을 유지관리합니다.
파일을 복사하는 간단한 방법은 NGINX 이미지를 기반으로 새 Docker 이미지를 생성하는 동안 실행되는 명령으로 Dockerfile을 만드는 것입니다. Dockerfile의 파일 복사(COPY) 명령의 경우 로컬 디렉터리 경로는 Dockerfile이 있는 빌드 context에 상대적입니다.
콘텐츠 디렉토리가 콘텐츠이고 구성 파일의 디렉토리가 conf라고 가정해 보겠습니다. 두 디렉토리 모두 Dockerfile이 있는 디렉토리의 하위 디렉토리입니다. NGINX 이미지에는 /etc/nginx/conf.d 디렉토리에 default.conf를 포함한 기본 NGINX 구성 파일이 있습니다. Docker 호스트의 구성 파일만 사용하려면 RUN 명령을 사용하여 기본 파일을 삭제합니다.
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY content /usr/share/nginx/html
COPY conf /etc/nginx
Dockerfile이 있는 디렉토리에서 명령을 실행하여 NGINX 이미지를 만듭니다. 명령 끝에 있는 마침표(“.”)는 현재 디렉토리를 빌드 context로 정의하며 여기에는 Dockerfile과 복사할 디렉토토리가 포함됩니다.
$ docker build -t mynginx_image1 .
mynginx_image1 이미지를 기반으로 mynginx3 컨테이너를 생성합니다.
$ docker run --name mynginx3 -p 80:80 -d mynginx_image1
컨테이너의 파일을 변경하려면 다음 절에 설명된 대로 도우미 컨테이너를 사용합니다.
3-3. 컨테이너의 컨텐츠 및 구성 파일 유지 관리
SSH를 사용하여 NGINX 컨테이너에 액세스할 수 없으므로 컨텐츠 또는 구성 파일을 직접 편집하려면 shell 액세스 권한이 있는 도우미 컨테이너를 만들어야 합니다. 도우미 컨테이너가 파일에 액세스할 수 있게 하려면 이미지에 대해 정의된 적절한 Docker 데이터 볼륨이 있는 새 이미지를 만듭니다.
1. nginx 컨텐츠 및 구성 파일을 복사하고 Docker 파일을 사용하여 이미지의 볼륨을 정의합니다.
FROM nginx
COPY content /usr/share/nginx/html
COPY conf /etc/nginx
VOLUME /usr/share/nginx/html
VOLUME /etc/nginx
2. 다음 명령을 실행하여 새 NGINX 이미지를 생성합니다.
$ docker build -t mynginx_image2 .
3. mynginx_image2 이미지를 기반으로 NGINX 컨테이너 mynginx4를 생성합니다.
$ docker run --name mynginx4 -p 80:80 -d mynginx_image2
4. shell이 있는 도우미 컨테이너 mynginx4_files를 시작하여 방금 만든 mynginx4 컨테이너의 콘텐츠 및 구성 디렉토리에 액세스할 수 있도록 합니다.
$ docker run -i -t --volumes-from mynginx4 --name mynginx4_files debian /bin/bash
root@b1cbbad63dd1:/#
- 새로운 mynginx4_files 도우미 컨테이너는 영구 표준 입력(-i 옵션) 및 tty(-t 옵션)를 사용하여 foreground에서 실행됩니다. mynginx4에 정의된 모든 볼륨은 도우미 컨테이너에서 로컬 디렉토리로 마운트됩니다.
- debian 인수는 도우미 컨테이너가 Docker Hub의 Debian 이미지를 사용함을 의미합니다. NGINX 이미지도 Debian을 사용하기 때문에 Docker가 다른 운영 체제를 로드하는 것보다 도우미 컨테이너에 Debian을 사용하는 것이 가장 효율적입니다.
- /bin/bash 인수는 bash shell이 도우미 컨테이너에서 실행되고 필요에 따라 파일을 수정하는 데 사용할 수 있는 shell prompt를 표시함을 의미합니다.
컨테이너를 시작하고 중지하려면 다음 명령을 실행합니다.
$ docker start mynginx4_files
$ docker stop mynginx4_files
shell을 종료하고 컨테이너를 실행 상태로 유지하려면 Ctrl+p를 누른 다음 Ctrl+q를 누릅니다. 실행 중인 컨테이너에 대한 shell 액세스 권한을 다시 얻으려면 다음 명령을 실행합니다.
$ docker attach mynginx4_files
shell을 종료하고 컨테이너를 종료하려면 exit 명령을 실행합니다.
4. 로깅 관리
기본 로깅을 사용하거나 로깅을 사용자 정의할 수 있습니다.
4-1. 기본 로깅 사용
기본적으로 NGINX 이미지는 NGINX 액세스 로그 및 오류 로그를 Docker 로그 수집기로 보내도록 구성됩니다. 이는 stdout 및 stderr에 연결하여 수행됩니다. 두 로그의 모든 메시지는 Docker 호스트의 /var/lib/docker/containers/container-ID/container-ID-json.log 파일에 기록됩니다. container‑ID는 컨테이너를 생성할 때 반환되는 긴 형식의 ID입니다. 긴 형식 ID를 표시하려면 다음 명령을 실행합니다.
$ docker inspect --format '{{ .Id }}' container-name
Docker command line과 Docker Engine API를 모두 사용하여 로그 메시지를 추출할 수 있습니다.
command line에서 로그 메시지를 추출하려면 다음 명령을 실행합니다.
$ docker logs container-name
Docker Remote API를 사용하여 로그 메시지를 추출하려면 Docker Unix 소켓을 사용하여 GET 요청을 보냅니다.
$ curl --unix-sock /var/run/docker-sock http://localhost/containers/container-name/logs?stdout=1&stderr=1
출력에 액세스 로그 메시지만 포함하려면 stdout=1만 포함하면 됩니다. 출력을 오류 로그 메시지로 제한하려면 stderr=1만 포함하면 됩니다. 사용 가능한 다른 옵션은 Docker Engine API 설명서의 컨테이너 로그 가져오기 섹션을 참조하세요.
4-2. 사용자 정의 로깅 사용
특정 구성 블록(예: 서버 {} 및 위치 {})에 대해 다르게 로깅을 구성하려면 컨테이너에 로그 파일을 저장할 디렉토리에 대한 Docker 볼륨을 정의하고 로그 파일에 액세스할 도우미 컨테이너를 생성합니다. 이를 구현하려면 로깅 파일에 대한 볼륨을 포함하는 새 이미지를 생성하십시오.
예를 들어 /var/log/nginx/log에 로그 파일을 저장하도록 NGINX를 구성하려면 이 디렉토리에 대한 볼륨 정의를 Dockerfile에 추가합니다(컨테이너에서 콘텐츠 및 구성 파일이 관리되는 경우).
FROM nginx
COPY content /usr/share/nginx/html
COPY conf /etc/nginx
VOLUME /var/log/nginx/log
그런 다음 이미지를 만들고 이를 사용하여 로깅 디렉토리에 액세스할 수 있는 NGINX 컨테이너와 도우미 컨테이너를 만들 수 있습니다. 도우미 컨테이너에는 원하는 로깅 도구가 설치되어 있을 수 있습니다.
5. NGINX 제어
NGINX 컨테이너의 command line에 직접 액세스할 수 없기 때문에 NGINX 명령을 컨테이너로 직접 전송 수 없습니다. 대신 Docker kill 명령을 통해 신호를 컨테이너로 보낼 수 있습니다.
NGINX 구성을 다시 로드하려면 Docker에 HUP 신호를 보냅니다.
$ docker kill -s HUP container-name
NGINX를 다시 시작하려면 다음 명령을 실행하여 컨테이너를 다시 시작합니다.
$ docker restart container-name