在Docker上部署NGINX和NGINX Plus

 2023-09-06 阅读 23 评论 0

摘要:在Docker上部署NGINX和NGINX Plus 高性能应用程序交付平台NGINX Plus,负载均衡器和Web服务器可通过Docker容器部署。 先决条件在Docker容器中运行NGINX开源在Docker容器中运行NGINX Plus 创建NGINX Plus Docker映像管理NGINX配置和内容文件 在Docker主机上维护内容和配

在Docker上部署NGINX和NGINX Plus

 

高性能应用程序交付平台NGINX Plus,负载均衡器和Web服务器可通过Docker容器部署。

  • 先决条件
  • 在Docker容器中运行NGINX开源
  • 在Docker容器中运行NGINX Plus
    • 创建NGINX Plus Docker映像
  • 管理NGINX配置和内容文件
    • 在Docker主机上维护内容和配置
    • 从Docker主机复制配置和内容文件
    • 维护容器中的配置文件和内容文件
  • 管理日志
    • 使用默认日志记录
    • 使用自定义日志
  • 控制NGINX

 

先决条件

  • Docker安装
  • Docker Hub帐户(NGINX开源)
  • nginx-repo.crtnginx-repo.key文件,用于创建Docker映像的Dockerfile(NGINX Plus)

 

在Docker容器中运行NGINX开源

您可以使用Docker Hub中的NGINX开源映像在Docker容器中创建NGINX实例。

  1. 启动运行在容器中的NGINX实例,并使用默认NGINX配置和以下命令:

    $ docker run --name mynginx1 -p 80:80 -d nginx
    

    • mynginx1 是基于NGINX映像创建的容器的名称
    • -d选项指定容器以分离模式运行:容器继续运行直到停止,但不响应在命令行上运行的命令。
    • -p选项告诉Docker将NGINX映像(端口80)在容器中公开的端口映射到Docker主机上的指定端口。第一个参数指定Docker主机中的端口,第二个参数映射到容器中公开的端口

    该命令返回容器ID的长格式fcd1fb01b14557c7c9d991238f2558ae2704d129cf9fb97bb4fadf673a58580d。这种形式的ID用于日志文件的名称。

  2. 验证容器是否已创建,并使用以下命令运行:docker ps

     

此命令还允许查看在上一步中设置的端口映射:PORTS输出中的字段报告80Docker主机上的端口已映射到80容器中的端口。

 

在Docker容器中运行NGINX Plus

Docker也可以与NGINX Plus一起使用。将Docker与NGINX Open Source结合使用的区别在于,您首先需要创建NGINX Plus映像,因为作为商业产品,NGINX Plus在Docker Hub上不可用。

注意:切勿将NGINX Plus映像上传到公共存储库(例如Docker Hub)。这样做违反您的许可协议。

 

创建NGINX Plus Docker映像

生成NGINX Plus图像:

  1. 创建Docker构建上下文或Dockerfile。在示例中,Debian 9(“ Stretch”)用作基础Docker映像:

    #For Debian 9
    FROM debian:stretch-slimLABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"# Download certificate and key from the customer portal (https://cs.nginx.com)
    # and copy to the build context
    COPY nginx-repo.crt /etc/ssl/nginx/
    COPY nginx-repo.key /etc/ssl/nginx/# Install NGINX Plus
    RUN set -x \&& apt-get update && apt-get upgrade -y \&& apt-get install --no-install-recommends --no-install-suggests -y apt-transport-https ca-certificates gnupg1 \&& \NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \found=''; \for server in \ha.pool.sks-keyservers.net \hkp://keyserver.ubuntu.com:80 \hkp://p80.pool.sks-keyservers.net: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; \echo "Acquire::https::plus-pkgs.nginx.com::Verify-Peer \"true\";" >> /etc/apt/apt.conf.d/90nginx \&& echo "Acquire::https::plus-pkgs.nginx.com::Verify-Host \"true\";" >> /etc/apt/apt.conf.d/90nginx \&& echo "Acquire::https::plus-pkgs.nginx.com::SslCert     \"/etc/ssl/nginx/nginx-repo.crt\";" >> /etc/apt/apt.conf.d/90nginx \&& echo "Acquire::https::plus-pkgs.nginx.com::SslKey      \"/etc/ssl/nginx/nginx-repo.key\";" >> /etc/apt/apt.conf.d/90nginx \&& printf "deb https://plus-pkgs.nginx.com/debian stretch nginx-plus\n" > /etc/apt/sources.list.d/nginx-plus.list \&& apt-get update && apt-get install -y nginx-plus \&& apt-get remove --purge --auto-remove -y gnupg1 \&& rm -rf /var/lib/apt/lists/* \&& rm -rf /etc/ssl/nginx# Forward request logs to Docker log collector
    RUN ln -sf /dev/stdout /var/log/nginx/access.log \&& ln -sf /dev/stderr /var/log/nginx/error.logEXPOSE 80STOPSIGNAL SIGTERMCMD ["nginx", "-g", "daemon off;"]
    

     

  2. 与NGINX开放源代码一样,默认的NGINX Plus映像具有相同的默认设置:

    • 访问和错误日​​志链接到Docker日志收集器
    • 未指定任何卷:Dockerfile可用于创建基础映像,您可以从中创建具有指定卷的新映像,或者可以手动指定卷:
    VOLUME /usr/share/nginx/html
    VOLUME /etc/nginx
    • 创建容器时,不会从Docker主机复制任何文件:您可以COPY向每个Dockerfile 添加定义,或者您创建的映像可用作另一个映像的基础
  3. 登录到NGINX Plus客户门户并下载您的nginx-repo.crtnginx-repo.key文件。对于NGINX Plus试用版,文件将随试用包一起提供。

  4. 将文件复制到Dockerfile所在的目录。

  5. 例如,创建一个Docker映像nginxplus(请注意命令中的最后一个句点)。

    $ docker build --no-cache -t nginxplus .
    

    --no-cache选项告诉Docker从头开始构建映像,并确保安装了最新版本的NGINX Plus。如果以前使用Dockerfile生成不带该--no-cache选项的映像,则新映像将使用Docker缓存中先前生成的映像中的NGINX Plus版本。

  6. nginxplus使用以下命令验证是否已成功创建映像:docker images

     
  7. 根据该图像创建一个容器,例如mynginxpluscontainer:

     
  8. mynginxplus使用以下命令验证容器是否已启动并正在运行:docker ps

     

NGINX Plus容器的控制和管理方式与NGINX开源容器相同。

 

管理内容和配置文件

NGINX和NGINX配置文件提供的内容可以通过几种方式进行管理:

  • 文件在Docker主机上维护
  • 文件从Docker主机复制到容器
  • 文件保存在容器中

 

在Docker主机上维护内容和配置文件

创建容器后,可以将Docker主机上的本地目录挂载到容器中的目录。NGINX映像使用默认的NGINX配置,该配置/usr/share/nginx/html用作容器的根目录,并将配置文件放入中/etc/nginx。对于本地目录中包含内容/var/www且配置文件位于中的Docker主机/var/nginx/conf,请运行以下命令:

$ 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主机上本地目录中文件的任何更改都会反映在目录和容器中。该选项意味着只能在Docker主机上更改这些目录,而不能在容器内更改。/var/www and /var/nginx/conf/usr/share/nginx/html/etc/nginxreadonly

 

从Docker主机复制内容和配置文件

在容器创建期间,Docker可以从Docker主机上的本地目录复制内容和配置文件。创建容器后,可通过在文件更改时创建新容器或修改容器中的文件来维护文件。

复制文件的一种简单方法是使用基于NGINX映像的新Docker映像生成期间运行的命令创建Dockerfile。对于Dockerfile中的文件复制(COPY)命令,本地目录路径是相对于Dockerfile所在的构建上下文的。

假设目录content 目录为,配置文件目录为conf,则Dockerfile所在目录的两个子目录都位于该目录下。NGINX映像default.conf/etc/nginx/conf.d目录中具有默认的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映像。命令末尾的句点(“。”)将当前目录定义为构建上下文,其中包含Dockerfile和要复制的目录:

$ docker build -t mynginx_image1 .

mynginx3根据mynginx_image1图像创建一个容器:

$ docker run --name mynginx3 -p 80:80 -d mynginx_image1

要更改容器中的文件,请使用下一部分中所述的帮助容器。

 

维护容器中的内容和配置文件

由于SSH无法用于访问NGINX容器,因此要直接编辑内容或配置文件,您需要创建一个具有shell访问权限的帮助器容器。为了使帮助容器能够访问文件,请创建一个新映像,该映像具有为该映像定义的正确的Docker数据卷:

  1. 复制nginx内容和配置文件,并使用Dockerfile定义映像的卷:

    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. mynginx4根据mynginx_image2镜像创建一个NGINX容器:

    $ docker run --name mynginx4 -p 80:80 -d mynginx_image2
  4. 启动一个mynginx4_files具有外壳的帮助程序容器,以提供对mynginx4我们刚刚创建的容器的内容和配置目录的访问:

    $ docker run -i -t --volumes-from mynginx4 --name mynginx4_files debian /bin/bash
    root@b1cbbad63dd1:/#

    注意:

    • 新的mynginx4_files辅助容器在前台运行,带有一个持久的标准输入(该-i选项)和一个tty(该-t选项)。定义的所有卷mynginx4都作为本地目录安装在帮助容器中。
    • debian参数表示帮助容器使用Docker Hub中的Debian映像。因为NGINX映像也使用Debian,所以将Debian用于帮助容器是最有效的,而不是让Docker加载另一个操作系统
    • /bin/bash参数表示bash shell在helper容器中运行,并显示一个shell提示,您可以根据需要修改该文件

要启动和停止容器,请运行以下命令:

$ docker start mynginx4_files
$ docker stop mynginx4_files

要退出外壳但不让容器运行,请按,Ctrl+p然后按Ctrl+q。要重新获得对正在运行的容器的Shell访问,请运行以下命令:

$ docker attach mynginx4_files

要退出外壳并终止容器,请运行exit命令。

 

管理日志

您可以使用默认日志记录或自定义日志记录。

 

使用默认日志记录

默认情况下,NGINX映像配置为将NGINX 访问日志和错误日志发送到Docker日志收集器。这是通过将它们链接到stdout和来完成的stderr:然后将两个日志中的所有消息都写入/var/lib/docker/containers/container-ID/container-ID-json.logDocker主机上的文件中。container-ID是创建容器时返回的长格式ID 。要显示长格式ID,请运行以下命令:

$ docker inspect --format '{{ .Id }}' container-name

您可以同时使用Docker命令行和Docker Engine API提取日志消息。

要从命令行提取日志消息,请运行以下命令:

$ docker logs container-name

要使用Docker Remote API提取日志消息,GET请使用Docker Unix袜子发送请求:

$ curl --unix-sock /var/run/docker-sock http://localhost/containers/container-name/logs?stdout=1&stderr=1

要仅在输出中包括访问日志消息,请仅包括stdout=1。要将输出限制为错误日志消息,请仅包含stderr=1。有关其他可用选项,请参阅Docker Engine API文档的获取容器日志部分。

 

使用自定义日志

如果要为某些配置块(例如和)以不同的方式配置日志记录,请为将日志文件存储在容器中的目录定义一个Docker卷,创建一个帮助器容器来访问日志文件,并使用任何日志记录工具。要实现此目的,请创建一个新映像,其中包含日志文件的一个或多个卷。server {}location {}

例如,要将NGINX配置为在中存储日志文件/var/log/nginx/log,请VOLUME将此目录的定义添加到Dockerfile中(前提是在容器中管理内容和配置文件):

 

然后,您可以创建一个映像,并使用它来创建有权访问日志目录的NGINX容器和帮助器容器。辅助容器可以安装任何所需的日志记录工具。

 

控制NGINX

由于不能直接访问NGINX容器的命令行,因此NGINX命令不能直接发送到容器。相反,可以通过Docker 命令将信号发送到容器kill

要重新加载NGINX配置,请将HUP信号发送到Docker:

$ docker kill -s HUP container-name

要重启NGINX,请运行以下命令来重启容器:

$ docker restart container-name

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/3506.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息