本篇来自https://hub.docker.com/_/nginx/?tab=description
它是docker hub上nginx的官方网站,上面有关于nginx的使用描述等。从这里你可以找到关于docker的nginx镜像,使用
docker pull nginx
来拉取最新版本的nginx docker镜像。
想要在docker下安装nginx,但是按照网上的文章没有成功启用,翻译一下官方的信息,记录一下吧。
快速参考
在哪里寻求帮助:
the Docker Community Forums, the Docker Community Slack, or Stack Overflow受支持的架构: (more info)
amd64
,arm32v6
,arm32v7
,arm64v8
,i386
,ppc64le
,s390x
已发布的镜像制品清单:
repo-info repo'srepos/nginx/
directory (history)
(image metadata, transfer size, etc)镜像的升级历史:
official-images PRs with labellibrary/nginx
official-images repo'slibrary/nginx
file (history)该说明的来源:
docs repo'snginx/
directory (history)受支持的Docker版本:
the latest release (down to 1.6 on a best-effort basis)
nginx是什么
Nginx(发音为“engine-x”)是一个用于HTTP、HTTPS、SMTP、POP3和IMAP协议的开源反向代理服务器,以及负载平衡器、HTTP缓存和web服务器(源服务器)。nginx项目从高度关注高并发性、高性能和低内存使用开始。它是在类似于BSD的第二条款许可下获得许可的,并且它运行在Linux、BSD变体、Mac OS X、Solaris、AIX、HP-UX以及其他*nix版本上。它还为Microsoft Windows提供了概念端口的证明。
如何使用该镜像
托管一些静态的内容
$ 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
将此文件放在与内容目录相同的目录中(“static-html-directory”),运行docker build -t some-content-nginx .,然后启动容器(注意build语句最后面有一个点):
$ docker run --name some-nginx -d some-content-nginx
暴露外部端口
$ docker run --name some-nginx -d -p : some-content-nginx
然后就可以在浏览器中敲击http://localhost:8080
或者 http://host-ip:8080来进行访问。
复杂的配置
$ docker run --name my-custom-nginx-container -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
有关nginx配置语法信息,请参阅the official documentation官方指南(特别是Beginner's Guide开始指引)。
如果你希望调整默认配置,请使用如下内容从运行中的nginx容器中复制它:
#运行一个nginx镜像
$ docker run --name tmp-nginx-container -d nginx
#将容器的/etc/nginx/nginx.conf文件复制到宿主的/host/path/nginx.conf文件中
$ 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中添加了一个自定义的CMD,一定要在CMD中包含-g 'daemon off;';为了使nginx停留在前台,因此Docker可以正确地跟踪过程(否则容器将在启动后立即停止)!
然后使用docker build -t custom-nginx .
来构造镜像,然后像下面这样来运行镜像:
$ docker run --name my-custom-nginx-container -d custom-nginx
在nginx配置中使用环境变量
开箱即用,nginx不支持大多数配置块中的环境变量。但是,如果需要在nginx启动之前动态生成nginx配置,可以使用envsubst作为解决方案。
下面是一个使用docker-composition.yml的例子(有关envsubst命令的说明:https://linux.die.net/man/1/envsubst):
web:
image: nginx
volumes:
- ./mysite.template:/etc/nginx/conf.d/mysite.template
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=
command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
mysite.template模板文件可以包含如下变量引用:
listen ${NGINX_PORT};
只读模式运行nginx
要以只读模式运行nginx,需要将Docker卷挂载到nginx写入信息的每个位置。默认的nginx配置要求对/var/cache和/var/run进行写访问。这可以通过将nginx运行为f轻松实现
$ docker run -d -p : --read-only -v $(pwd)/nginx-cache:/var/cache/nginx -v $(pwd)/nginx-pid:/var/run nginx
如果你有一个更高级的配置,需要nginx写入其他位置,那么只需向这些位置添加更多的卷挂载即可。
调试模式运行nginx
自1.9.8版以来的映像附带了nginx-debug二进制文件,当使用较高的日志级别时,它会生成详细的输出。可以用简单的CMD替换:
$ docker run --name my-nginx -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx nginx-debug -g 'daemon off;'
相似的配置在docker-compose.yml中看起来是这样的:
web:
image: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
command: [nginx-debug, '-g', 'daemon off;']
使用Amplify监控nginx
Amplify是一个免费的监控工具,可以用来监控基于nginx的微服务架构。Amplify由nginx软件背后的公司开发和维护。
使用Amplify可以跨容器收集和聚合指标,并呈现关键性能数据的一组一致的可视化,比如每秒的活动连接或请求。快速检查性能也很容易
为了使用Amplify,应该在容器中安装一个小型的基于python的代理软件(Amplify agent)。
镜像变体
nginx镜像有许多变体,每个设计用于一个特定的用例。
nginx:<version>
这是事实上的镜像。如果你不确定你的需求是什么,你可能想要使用这个。它被设计用来作为一个丢弃容器(挂载源代码并启动容器来启动应用程序),以及构建其他镜像的基础。
nginx:<version>-alpine
此镜像基于流行的Alpine Linux项目,可在Alpine官方图像中找到。Alpine Linux比大多数发行版基础映像(~5MB)小得多,因此通常会生成更瘦的映像。
当希望最终图像大小尽可能小时,强烈建议使用这种变体。需要注意的主要问题是,它确实使用了musl libc而不是glibc和friends,因此某些软件可能会遇到问题,这取决于它们对libc的需求的深度。然而,大多数软件都没有这个问题,所以这个变体通常是一个非常安全的选择。有关可能出现的问题的更多讨论,以及使用基于alpine镜像的一些利弊比较,请参阅this Hacker News comment thread查看关于这方面的更多的讨论。
为了最小化图像大小,通常不会在基于阿尔卑斯的图像中包含其他相关工具(如git或bash)。使用此映像作为基础,在自己的Dockerfile中添加所需的内容(如果不熟悉如何安装包,请参阅alpine映像描述中的示例)。