docker学习之路-nginx镜像(翻译)

本篇来自https://hub.docker.com/_/nginx/?tab=description

它是docker hub上nginx的官方网站,上面有关于nginx的使用描述等。从这里你可以找到关于docker的nginx镜像,使用

docker pull nginx

来拉取最新版本的nginx docker镜像。

想要在docker下安装nginx,但是按照网上的文章没有成功启用,翻译一下官方的信息,记录一下吧。

快速参考

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提供了概念端口的证明。

wikipedia.org/wiki/Nginx

如何使用该镜像

托管一些静态的内容

$ 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 8080:80 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=80
  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 80:80 --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映像描述中的示例)。

posted @ 2019-06-03 15:59  wall-ee  阅读(439)  评论(0编辑  收藏  举报