02.DockerCompose部署Nginx

转载请注明出处

参考链接

  • https://hubgw.docker.com/_/nginx
  • https://devopsian.net/p/nginx-config-template-with-environment-vars/

获取镜像

docker pull nginx:1.26.0

单机部署(bridge模式)

采用外挂nginx配置方式
创建 nginx.yml 文件, 内容如下

version: "3"

services:
  nginx:
    container_name: nginx
    image: nginx:1.26.0
    restart: on-failure:3
    ports:
      - 10001:80
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /nginx-work/nginx.conf:/etc/nginx/nginx.conf
      - /nginx-work/logs:/var/log/nginx
    # network_mode: host
# 部署
docker compose -f nginx.yml up -d
# 卸载
docker compose -f nginx.yml down

单机部署(host模式)

采用外挂nginx配置方式
创建 nginx.yml 文件, 内容如下

version: "3"

services:
  nginx:
    container_name: nginx
    image: nginx:1.26.0
    restart: on-failure:3
    environment:
      - TZ=Asia/Shanghai
      # - NGINX_HOST=foobar.com
    volumes:
      - /nginx-work/nginx.conf:/etc/nginx/nginx.conf
      - /nginx-work/logs:/var/log/nginx
    network_mode: host
# 部署
docker compose -f nginx.yml up -d
# 卸载
docker compose -f nginx.yml down

单机部署使用 templates 配置 nginx.conf

nginx 在 1.19 之后的版本可以支持使用template来进行配置, 并支持在template中使用环境变量

官方镜像支持的环境变量

  • NGINX_ENVSUBST_TEMPLATE_DIR
    • 包含模板文件的目录(默认值:/etc/nginx/templates)
    • 当此目录不存在时,此函数将不执行任何有关模板处理的操作。
  • NGINX_ENVSUBST_TEMPLATE_SUFFIX
    • 模板文件的后缀(默认值:.template)
    • 此函数仅处理名称以此后缀结尾的文件。
  • NGINX_ENVSUBST_OUTPUT_DIR
    • 输出执行 envsubst 结果的目录(默认:/etc/nginx/conf.d)
    • 输出文件名是删除了后缀的模板文件名。
      • 例如。 将输出文件名 。/etc/nginx/templates/default.conf.template/etc/nginx/conf.d/default.conf
    • 此目录必须可由运行容器的用户写入。

准备template文件

默认情况下,容器会加载/etc/nginx/templates/*.template文件,并将设置了环境变量的结果输出到/etc/nginx/conf.d目录下(可以通过环境变量修改)。
准备好一个名为 nginx.conf.template 的文件(和docker-compose 文件同级目录),并将其配置如下 PORT 为后面要传入的环境变量。

server {
  server_name         localhost;
  listen              ${PORT};
}

创建 docker-compose.yml

version: "3"

services:
  nginx:
    container_name: nginx
    image: nginx:1.26.0
    restart: on-failure:3
    environment:
      - NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx
      - TZ=Asia/Shanghai
      - PORT=8088
    volumes:
      # 挂载template文件目录
      - ./nginx.conf.template:/etc/nginx/templates/nginx.conf.template
      # 容器内文件映射到本地(重新安装nginx会还原)
      - ./config/nginx-inside-container.conf:/etc/nginx/nginx.conf:rw
    network_mode: host
docker compose up -d 

验证

在容器的 /etc/nginx/conf.d文件夹中可以确认到输出了设置了环境变量的文件。

docker exec -it nginx cat /etc/nginx/nginx.conf

在这里插入图片描述

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值