本篇来自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. maven仓库报错 sqljdbc4、ojdbc6、tomcat-jdbc-8.5.14

    报错:Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0  和  Missing artifact com.microsoft.sqlserver: ...

  2. sql字符转义

    /** * sql 内的like % 代表一个或多个字符, _代表一个字符,这都是需要转义的 * @param s * @return */ public static String escapeSp ...

  3. 一天撸完《 Learning Jupyter 5 2nd Edition》

    因为工作需要了解这个应用的大概功能. 网上找不到下载的,CSDN没积分. 最后,在道客上找到了这个PDF.花了一天时间浏览了一下, 只留意了python功能,其它语言略去. widget和jupyte ...

  4. LOJ 3159: 「NOI2019」弹跳

    题目传送门:LOJ #3159. 题意简述: 二维平面上有 \(n\) 个整点,给定每个整点的坐标 \((x_i,y_i)\). 有 \(m\) 种边,第 \(i\) 种边从 \(p_i\) 号点连向 ...

  5. jquery 统计统计子标签的个数

    本文实例讲述了jQuery获得子元素个数的方法.分享给大家供大家参考.具体分析如下://获取id=div1下的子元素的个数$('#div1').children().length;//获取id=div ...

  6. 项目1:ATM+购物商城项目

    项目1:ATM+购物商城 1.项目介绍 项目需求: # 项目需求如下:'''- 额度 15000或自定义​- 实现购物商城,买东西加入购物车,调用信用卡接口结账​- 可以提现,手续费5%​- 支持多账 ...

  7. btcWallet系列之一-grpc模块

    btcwallet对外服务 btcwallet除了像btcd对外提供rpc服务以外,还提供了grpc服务,同时grpc采用的是protobuf来实现. 这方便与不同语言进行交互,降低客户端代码编写量. ...

  8. 梅尔倒谱系数特征(Mel-frequency cepstral coefficients,MFCC)

    引言 感知实验表明,人耳对于声音信号的感知聚焦于某一特定频率区域内,而非在整个频谱包络中. MFCC特征是应用非常广泛的语音特征. 语音的MFCC特征是基于人耳感知实验得到,将人耳当成特定的滤波器,只 ...

  9. STL——list用法总结

    头文件 #include<list> 声明一个int型的list:list<int> a: 1.list的构造函数 list<int>a{1,2,3} list&l ...

  10. 4.28(TG模拟赛)总结

    1.挖地雷 题目背景 NOIp1996提高组第三题 题目描述 在一个地图上有N个地窖(N≤20),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径.当地窖及其连接的数据给出之后,某人可以从任 ...