本篇来自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 : 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映像描述中的示例)。

docker学习之路-nginx镜像(翻译)的更多相关文章

  1. Docker学习(二): 镜像的使用与构建

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  2. docker实战之通过nginx镜像来部署静态页

    本章我们主要讲解如何通过docker构建一个nginx容器,这里我们以部署一个静态html为素材来进行演示. 首先我们通过[docker search nginx]命令来查找Docker Hub上的n ...

  3. docker 学习之路 将docker容器变为镜像并上传

    环境 ubunt 16.4 去hub.docker.com上注册一个账号,并在账号中注册一个公有public或者私有仓库private 步骤如下 如上图 点击该处进入创建docker库页面 除了名字之 ...

  4. Docker学习之搭建nginx环境

    前言 很久没写随笔了,今天我们来学习一下如何在docker搭建nginx环境吧! 一:下载镜像,使用docker pull拉取最新的nginx镜像 命令:docker pull nginx 查看镜像: ...

  5. docker安装并修改Nginx镜像

    1.安装nginx镜像,命令:docker pull nginx 2.创建nginx容器,并启动,命令:docker run --name webserver -d -p 192.168.51.227 ...

  6. docker学习8-搭建nginx环境

    前言 使用 docker 搭建 nginx 环境 下载镜像 使用docker pull 拉取最新的 nginx 镜像 [root@yoyo ~]# docker pull nginx Using de ...

  7. docker学习之路

    环境 : ubuntu 16.4 下载docker 首先使用命令行下载 docker wget -qO- https://get.docker.com/ | sh 启动 下载完成之后进行一个启动,但是 ...

  8. docker学习笔记3:镜像操作(查找和下载)

    一.查看本地镜像 只有下载后,镜像才会保存在本地(docker环境所在的主机),通过如下命令可以查看本地已经存在的镜像. 命令:dokcer images 上面命令列出本地所有已经存在的镜像,显示的信 ...

  9. Docker学习笔记之从镜像仓库获得镜像

    0x00 概述 之前我们说到了,Docker 与其他虚拟化软件的一处不同就是将镜像管理纳入到了功能之中.实现虚拟化只是程序能够无缝移植的一部分,而有了镜像管理,就真正取代了我们在移植过程中的繁琐操作. ...

随机推荐

  1. https工具类

    import org.apache.commons.lang.StringUtils; import javax.net.ssl.*; import java.io.*; import java.ne ...

  2. db.sqlite如何导出转储为sql文件

    在使用 django框架写博客时,用的是sqlite数据库,想要将其中的db.sqlite转储为sql文件, 我是在linux下使用的,很多linux系统下都自带sqlite 检查是否安装sqlite ...

  3. 关于交叉熵损失函数Cross Entropy Loss

    1.说在前面 最近在学习object detection的论文,又遇到交叉熵.高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个 ...

  4. AtCoder Grand Contest 033 题解

    传送门 我比赛的时候怕不是在睡觉啊-- \(A\ Darker\ and\ Darker\) 我是不是想得太复杂了--根本没必要像我这样做吧-- 首先问题可以转化成令\(p_{i,j}\)表示到\(( ...

  5. 第二阶段冲刺(个人)——seven

    今天的计划:设计总的界面背景,统一风格. 昨天做了什么?优化登录.注册信息的填写判断.

  6. ASP.NET中IOC容器Autofac(依赖注入DI 控制反转IOC)

    IOC的一个重点是在程序运行中,动态的向某个对象提供它所需要的其他对象.这一点是通过DI来实现的.Autofac则是比较流行的一款IOC容器. IoC和DI有什么关系呢?其实它们是同一个概念的不同角度 ...

  7. oracle用dba创建用户并授权

    参考: https://blog.csdn.net/zhang195617/article/details/5857769 sqlplus中切换用户,如切换到adm用户,命令为:conn adm/12 ...

  8. Java的策略和保护域

    参考文章: (1)java之jvm学习笔记十(策略和保护域) https://blog.csdn.net/yfqnihao/article/details/8271415

  9. docker:轻量级图形页面管理工具Portainer

    1.介绍 docker 图形化管理提供了很多工具,有Portainer.Docker UI.Shipyard等等,本文主要介绍Portainer. Portainer是一个开源.轻量级Docker管理 ...

  10. bat修改文件内容

    #file.vbsSet fso = Wscript.CreateObject("Scripting.FileSystemObject")set f=fso.opentextfil ...