docker nginx官方文档翻译

快速参考

维护者:NGINX Docker维护者

哪里可以得到帮助:Docker社区论坛、Docker社区松弛或堆栈溢出

什么是nginx?

Nginx(发音为“engine-x”)是用于HTTP、HTTPS、SMTP、POP3和IMAP协议的开源反向代理服务器,以及负载平衡器、HTTP缓存和web服务器(源服务器)。nginx项目一开始就非常关注高并发性、高性能和低内存使用。它是根据类似于BSD的2条款授权的,它运行在Linux、BSD变体、Mac OS X、Solaris、AIX、HP-UX以及其他*nix版本上。它还有一个用于Microsoft Windows的概念验证端口。

How to use this image

托管一些简单的静态内容

$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

或者,可以使用一个简单的Dockerfile来生成包含必要内容的新映像(这是比上面的绑定挂载更干净的解决方案):

FROM nginx
COPY static-html-directory /usr/share/nginx/html

把这个文件放在你的目录下(“静态html目录”),运行docker build-t some content nginx,然后启动你的容器:

$ docker run --name some-nginx -d some-content-nginx

Exposing external port(暴露外部端口)

$ docker run --name some-nginx -d -p 8080:80 some-content-nginx

然后你可以打http://localhost/本地主机:8080或http://host ip地址:8080在您的浏览器中。

Complex configuration(复杂结构)

$ docker run --name my-custom-nginx-container -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

有关nginx配置文件语法的信息,请参阅官方文档(特别是初学者指南)。

如果希望调整默认配置,请使用以下内容从正在运行的nginx容器中复制它:

$ docker run --name tmp-nginx-container -d nginx
$ docker cp tmp-nginx-container:/etc/nginx/nginx.conf /host/path/nginx.conf
$ docker rm -f tmp-nginx-container

使用一个简单的Dockerfile(in/host/path/)也可以更干净地完成此任务:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

 

如果您在Dockerfile中添加了一个自定义命令,请确保在命令中包含-g daemon off;,以便nginx保持在前台,这样Docker可以正确地跟踪进程(否则您的容器将在启动后立即停止)!

然后用docker build-t自定义nginx构建图像。运行如下:

$ docker run --name my-custom-nginx-container -d custom-nginx

Using environment variables in nginx configuration(在nginx配置中使用环境变量)

开箱即用,nginx不支持大多数配置块中的环境变量。但是这个图像有一个函数,它将在nginx启动之前提取环境变量。

下面是一个使用docker的例子-合成.yml:

web:
  image: nginx
  volumes:
   - ./templates:/etc/nginx/templates
  ports:
   - "8080:80"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=80

默认情况下,此函数读取/etc/nginx/templates/*.template中的模板文件,并将执行envsubt的结果输出到/etc/nginx/conf.d。

所以如果你放模板/default.conf.template模板包含如下变量引用的文件:

listen       ${NGINX_PORT};

输出到/etc/nginx/conf.d/default.conf这样地: 

listen       80;

可以通过以下环境变量更改此行为:

NGINX_ENVSUBST_TEMPLATE_目录

包含模板文件的目录(默认值为/etc/nginx/templates)

当此目录不存在时,此函数将不处理模板处理。

NGINX_ENVSUBST_TEMPLATE_后缀

模板文件的后缀(默认值:.template)

此函数仅处理名称以该后缀结尾的文件。

NGINX_ENVSUBST_OUTPUT_DIR(NGINX_ENVSUBST_输出目录)

输出执行envsubt的结果的目录(默认值为/etc/nginx/conf.d)

输出文件名是去掉后缀的模板文件名。

例如)/etc/nginx/模板/default.conf.template模板将输出文件名为/etc/nginx/conf.d/默认.conf.

运行容器的用户必须可以写入此目录。

Running nginx in read-only mode(以只读模式运行nginx)

要以只读模式运行nginx,需要将Docker卷装载到nginx写入信息的每个位置。默认的nginx配置需要对/var/cache和/var/run的写访问。通过运行nginx可以很容易地实现这一点,如下所示:

$ docker run -d -p 80:80 --read-only -v $(pwd)/nginx-cache:/var/cache/nginx -v $(pwd)/nginx-pid:/var/run nginx

如果有更高级的配置要求nginx写入其他位置,只需向这些位置添加更多的卷装入。

Running nginx in debug mode(在调试模式下运行nginx)

自1.9.8版以来的图像都带有nginx调试二进制文件,当使用更高的日志级别时会产生详细的输出。它可以与简单的命令替换一起使用:

$ docker run --name my-nginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx nginx-debug -g 'daemon off;'

docker中的类似配置-合成.yml可能是这样的:

web:
  image: nginx
  volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf:ro
  command: [nginx-debug, '-g', 'daemon off;']

 User and group id(用户和组id)

自1.17.0以来,基于alpine和debian的映像变体都使用相同的用户和组ID来删除工作进程的权限:

$ id
uid=101(nginx) gid=101(nginx) groups=101(nginx)

 Running nginx as a non-root user(以非根用户身份运行nginx)

可以将映像作为特权较低的任意UID/GID运行。但是,这需要修改nginx配置以使用可由该特定UID/GID对写入的目录:

$ docker run -d -v $PWD/nginx.conf:/etc/nginx/nginx.conf nginx

哪里nginx.conf格式在当前目录中应重新定义以下指令:

pid        /tmp/nginx.pid;

在http上下文中:

http {
    client_body_temp_path /tmp/client_temp;
    proxy_temp_path       /tmp/proxy_temp_path;
    fastcgi_temp_path     /tmp/fastcgi_temp;
    uwsgi_temp_path       /tmp/uwsgi_temp;
    scgi_temp_path        /tmp/scgi_temp;
...
}

 Monitoring nginx with Amplify(用放大法监测nginx)

Amplify是一个免费的监控工具,可以用来监控基于nginx的微服务架构。Amplify是由nginx软件背后的公司开发和维护的。

使用Amplify,可以跨容器收集和聚合度量,并呈现关键性能数据的一致可视化集,例如每秒的活动连接或请求。它也很容易快速检查任何性能下降,流量异常,并深入了解nginx配置的一般情况。

为了使用Amplify,应该在容器中安装一个基于Python的小型代理软件(Amplify agent)。

有关Amplify的更多信息,请查看此处的官方文档。

Image Variants

nginx图像有多种风格,每种都是为特定的用例设计的。

nginx:

这是真实的图像。如果你不确定你的需求是什么,你可能想用这个。它被设计成既可用作丢弃的容器(装载源代码并启动容器以启动应用程序),也可用作构建其他映像的基础。

nginx:-alpine

此图片基于流行的Alpine Linux项目,可在Alpine官方图片中找到。Alpine Linux比大多数发行版基础映像(约5MB)小得多,因此通常会产生更细的映像。

当需要尽可能小的最终图像尺寸时,强烈建议使用此变体。需要注意的主要问题是,它使用的是musl libc,而不是glibc和friends,因此某些软件可能会遇到问题,这取决于它们的libc需求的深度。然而,大多数软件都没有这个问题,所以这个变种通常是一个非常安全的选择。有关可能出现的问题的更多讨论,以及使用基于Alpine的图像的一些赞成/反对比较,请参阅此黑客新闻评论线程。

为了最小化图像大小,很少有其他相关工具(如git或bash)包含在基于Alpine的图像中。使用此映像作为基础,在您自己的Dockerfile中添加所需的内容(如果您不熟悉,请参阅alpine映像描述以获取如何安装软件包的示例)。

 

你可能感兴趣的:(docker nginx官方文档翻译)