针对 Nginx 应用的 Docker 镜像,用于提供 Nginx 服务。容器详细使用说明可参考仓库:Gitee 或 Github中服务器运维
相应文档。
使用说明可参照:官方说明
版本信息:
- 1.18、latest
- 1.16
镜像信息:
- 镜像地址:
- Aliyun仓库:registry.cn-shenzhen.aliyuncs.com/colovu/nginx
- DockerHub:colovu/nginx
- 依赖镜像:debian:buster-slim
后续相关命令行默认使用
[Docker Hub](https://hub.docker.com)
镜像服务器做说明
Docker 快速启动命令:
# 从 Docker Hub 服务器下载镜像并启动
$ docker run -d -p 80:8080 colovu/nginx
# 从 Aliyun 服务器下载镜像并启动
$ docker run -d -p 80:8080 registry.cn-shenzhen.aliyuncs.com/colovu/nginx
启动后,可以使用浏览器访问:http://localhost/
,出现默认的 Nginx 首页。
Docker-Compose 快速启动命令:
# 从 Gitee 下载 Compose 文件
$ curl -sSL -o https://gitee.com/colovu/docker-nginx/raw/master/docker-compose.yml
# 从 Github 下载 Compose 文件
$ curl -sSL -o https://raw.githubusercontent.com/colovu/docker-nginx/master/docker-compose.yml
# 创建并启动容器
$ docker-compose up -d
- 8080:HTTP 端口
- 8443:HTTPS 端口
镜像默认提供以下数据卷定义,默认数据分别存储在自动生成的应用名对应nginx
子目录中:
/srv/conf # nginx 配置文件
/srv/data # 站点源文件
/var/log # 日志文件
/var/run # 进程运行PID文件
如果需要持久化存储相应数据,需要在宿主机建立本地目录,并在使用镜像初始化容器时进行映射。宿主机相关的目录中如果不存在对应应用nginx
的子目录或相应数据文件,则容器会在初始化时创建相应目录及文件。
在初始化 Nginx
容器时,如果没有预置配置文件,可以在命令行中设置相应环境变量对默认参数进行修改。类似命令如下(配置环境变量APP_ENV_KEY_NAME
的值为key_value
):
$ docker run -d -e "APP_ENV_KEY_NAME=key_value" colovu/nginx
针对配置文件中的配置项,支持环境变量名自动替换,该类环境变量定义规则为:APP_CFG_*=<val>
APP_CFG_
:环境变量自动替换标识,具备该前缀的环境变量会被自动处理并更新至配置文件*
:配置文件中对应的配置项名,大小写需要符合实际参数名要求;特殊字符需要符合特殊字符替换规则
<val>
:配置项对应值
例如:
# 设置配置文件中配置项 max_wal_size,传入容器的变量为(两者都可以):
APP_CFG_max_wal_size=400MB
APP_CFG_max_wal_size="400MB"
# 容器启动后,应用配置文件中对应配置项生效,且设置为相应值:
max_wal_size = '400MB'
特殊字符替换规则:
- 针对使用
xml
格式的配置文件_
==>.
: 环境变量中的下划线
会被转义为设置属性中的半角点
__
==>_
: 环境变量中的双下划线
会被转义为设置属性中的单下划线
___
==>-
: 环境变量中的三下划线
会被转义为设置属性中的中划线
- 针对使用
key-val
格式的配置文件_
==>_
: 环境变量中的下划线
不会被替换__
==>.
: 环境变量中的双下划线
会被转义为设置属性中的半角点
___
==>-
: 环境变量中的三下划线
会被转义为设置属性中的中划线
常规配置参数用来配置容器基本属性,一般情况下需要设置,主要包括:
如果没有必要,可选配置参数可以不用定义,直接使用对应的默认值,主要包括:
ENV_DEBUG
:默认值:false。设置是否输出容器调试信息。可选值:no、true、yes
配置服务为集群工作模式时,通过以下参数进行配置:
配置服务使用 TLS 加密时,通过以下参数进行配置:
本容器默认使用non-root
运行应用,以加强容器的安全性。在使用non-root
用户运行容器时,相关的资源访问会受限;应用仅能操作镜像创建时指定的路径及数据。使用non-root
方式的容器,更适合在生产环境中使用。
如果需要赋予容器内应用访问外部设备的权限,可以使用以下两种方式:
- 启动参数增加
--privileged=true
选项 - 针对特定权限需要使用
--cap-add
单独增加特定赋权,如:ALL、NET_ADMIN、NET_RAW
如果需要切换为root
方式运行应用,可以在启动命令中增加-u root
以指定运行的用户。
- 容器中应用的启动参数不能配置为后台运行,如果应用使用后台方式运行,则容器的启动命令会在运行后自动退出,从而导致容器退出
- 2021/1/14(1.18): 更新为 Nginx 1.18.0
- 2021/1/1 (1.16): 初始版本,基于 Nginx 1.16.1
本文原始来源 Endial Fang @ Github.com