Docker 搭建 Nginx 服务器

系列文章目录

Docker 搭建 Nginx 服务器

  • 系列文章目录
  • 前言
  • 一、准备工作
  • 二、设置 Nginx 容器的目录结构
  • 三、启动一个临时的 Nginx 容器来复制配置文件
  • 四、复制 Nginx 配置文件到本地目录
  • 五、删除临时 Nginx 容器
  • 六、创建并运行 Nginx 容器,挂载本地目录
  • 七、修改 `nginx.conf` 文件配置监听端口
  • 八、端口配置:Host 网络模式 vs Port 映射模式
  • 九、查看日志和检查容器状态
  • 十、访问 Nginx 服务
  • 总结


前言

在现代 Web 开发中,Nginx 是一个广泛使用的高性能 Web 服务器,它不仅可以用于反向代理,还能作为负载均衡器、HTTP 缓存等。通过 Docker 部署 Nginx,不仅能够简化安装过程,还能轻松进行配置和管理。

本篇文章将指导你通过 Docker 快速搭建一个 Nginx 环境,并讲解如何修改配置文件以定制化你的服务器设置。


一、准备工作

首先,确保你的系统上已经安装了 Docker。

Linux上进行Docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、设置 Nginx 容器的目录结构

为了便于管理,我们首先创建一个目录结构,用于存放 Nginx 配置文件、日志文件和 HTML 文件。

# 安装路径
DIR="/opt/docker/demo"
DOCKER_NAME="docker-nginx"# 创建目录结构
mkdir -p "$DIR/nginx/conf"
mkdir -p "$DIR/nginx/log"
mkdir -p "$DIR/nginx/html"
  • conf:存放 Nginx 的主配置文件和自定义配置文件。
  • log:存放 Nginx 的日志文件。
  • html:存放静态网站文件。

三、启动一个临时的 Nginx 容器来复制配置文件

我们需要一个基础的 Nginx 配置文件,Docker 官方镜像已经内置了标准配置文件。为了方便地获取并修改这些配置文件,我们首先启动一个临时的 Nginx 容器。

# 启动一个临时的 nginx 容器来复制配置文件
docker run --name nginx_test -p 9011:80 -d nginx:stable-alpine

这个命令会启动一个 nginx:stable-alpine 容器,并将其 80 端口映射到宿主机的 9011 端口。我们可以通过访问 http://localhost:9011 来查看默认的 Nginx 欢迎页面。

四、复制 Nginx 配置文件到本地目录

接下来,我们将容器内的 Nginx 配置文件复制到本地,以便进行自定义修改。使用以下命令将 nginx.conf 文件和 conf.d 配置目录复制到宿主机的 $DIR/nginx/conf 目录中:

# 复制 nginx 配置文件到本地目录
docker cp nginx_test:/etc/nginx/nginx.conf "$DIR/nginx/conf/nginx.conf"
docker cp nginx_test:/etc/nginx/conf.d "$DIR/nginx/conf/conf.d"

这样,我们就获取到了 Nginx 的配置文件,并且可以根据需要进行修改。

五、删除临时 Nginx 容器

复制完配置文件后,我们不再需要这个临时的 Nginx 容器,因此可以将其删除:

# 删除临时 nginx 容器
docker rm -f nginx_test

六、创建并运行 Nginx 容器,挂载本地目录

现在,我们可以使用自己的配置文件来启动一个持久化的 Nginx 容器。通过将本地目录挂载到容器中,我们可以确保配置文件、日志和网站文件持久化存储在宿主机上。

以下是启动 Nginx 容器的命令:

docker run -d \--restart=always \--name "$DOCKER_NAME" \--network host \-v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \-v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \-v "$DIR/nginx/log:/var/log/nginx" \-v "$DIR/nginx/html:/opt/html" \nginx:stable-alpine

解释各个参数:

  • -d:后台运行容器。
  • --restart=always:容器在崩溃或系统重启后自动重启。
  • --name "$DOCKER_NAME":容器的名称为 docker-nginx
  • --network host:容器将使用宿主机的网络栈。
  • -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf":挂载自定义的 nginx.conf 配置文件到容器中。
  • -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d":挂载自定义的配置目录。
  • -v "$DIR/nginx/log:/var/log/nginx":挂载日志目录,便于查看和管理日志。
  • -v "$DIR/nginx/html:/opt/html":挂载网站文件目录,用于存放静态网页。

七、修改 nginx.conf 文件配置监听端口

如果你希望更改 Nginx 的默认端口,可以在修改的 nginx.conf 文件中进行配置。在 nginx.conf 中,你可以找到以下内容:

server {listen 80;server_name localhost;client_max_body_size 100m;access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log notice;#测试location /demo/testme {default_type text/html;return 200 "demo success 80!";}#首页静态资源location /demo {autoindex off; # 禁止目录索引server_tokens off; # 在http{}块中隐藏服务器版本号client_max_body_size 100m;alias /opt/html/dist;index index.html index.htm;try_files $uri $uri/ /demo/index.html;  #front为路由 而不是目录}
}

listen 80; 改为你需要的端口(例如 listen 8080;)。这样,Nginx 就会监听新的端口。

八、端口配置:Host 网络模式 vs Port 映射模式

在 Docker 中,容器的端口配置是非常关键的。Nginx 容器支持两种主要的端口配置方式:Host 网络模式Port 映射模式

  1. Host 网络模式

    在 Docker 中使用 --network host 时,容器将共享宿主机的网络栈,这意味着容器直接使用宿主机的 IP 地址和端口来暴露服务。通过这种方式,容器会使用宿主机的端口 80 来提供服务。

    配置命令:

    docker run -d \--restart=always \--name "$DOCKER_NAME" \--network host \-v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \-v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \-v "$DIR/nginx/log:/var/log/nginx" \-v "$DIR/nginx/html:/opt/html" \nginx:stable-alpine
    
    • 优点
      • 容器共享宿主机的网络,性能较高。
      • 无需显式端口映射,容器与宿主机共享相同的网络。
    • 缺点
      • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
      • 容器的端口与宿主机端口相同,可能存在安全隐患。
  2. Port 映射模式

    如果你希望使用宿主机的特定端口来访问容器内的服务,可以使用 -p 参数进行端口映射。通过这种方式,容器内部的端口(例如 80)将映射到宿主机的另一个端口(例如 8080)。

    配置命令:

    docker run -d \--restart=always \--name "$DOCKER_NAME" \-p 8080:80 \-v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \-v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \-v "$DIR/nginx/log:/var/log/nginx" \-v "$DIR/nginx/html:/opt/html" \nginx:stable-alpine
    

    在这个配置中:
    -p 8080:80:将宿主机的 8080 端口映射到容器的 80 端口。你可以通过宿主机的 http://localhost:8080 访问 Nginx 服务。

    • 优点
      • 容器端口与宿主机端口不同,可以避免端口冲突。
      • 容器与宿主机之间有更好的网络隔离性。
      • 支持多个容器映射到宿主机不同的端口,适合多容器环境。
    • 缺点
      • 可能会导致稍微的性能损失,因为需要进行额外的端口映射。
      • 需要手动管理和指定端口映射。

九、查看日志和检查容器状态

容器启动后,你可以通过以下命令查看容器的状态,确保它在运行中:

docker ps

如果容器未正常运行,可以查看日志进行排查:

docker logs docker-nginx

查看 Nginx 的访问日志和错误日志也可以帮助你调试网站:

tail -f "$DIR/nginx/log/access.log"
tail -f "$DIR/nginx/log/error.log"

十、访问 Nginx 服务

完成上述步骤后,你可以通过浏览器访问宿主机的 IP 地址和配置的端口,查看 Nginx 是否正常运行。

  • 如果使用了 --network host,则可以通过 http://localhost 或宿主机的 IP 地址访问服务。
  • 如果使用了端口映射,例如 -p 8080:80,则可以通过 http://localhost:8080 访问 Nginx 欢迎页面。

在这里插入图片描述


总结

通过 Docker 部署 Nginx 容器非常简便,并且可以灵活配置各个参数。通过挂载本地目录,Nginx 的配置文件、日志和网站文件可以持久化存储在宿主机上,便于管理和备份。使用 Docker 来运行 Nginx 容器不仅简化了部署流程,还提供了极大的灵活性和可扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24182.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

WebSocket connection failed 解决

WebSocket connection failed 解决 前言 这里如果是新手小白不知道 WebSocket 是什么的? 怎么使用的?或者想深入了解的 那可以 点击这里 几分钟带你快速了解并使用,已经一些进阶讲解; WebSocket,多应用于需要双向数据…

基于大数据爬虫数据挖掘技术+Python的线上招聘信息分析统计与可视化平台(源码+论文+PPT+部署文档教程等)

博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringB…

java给钉钉邮箱发送邮件

1.开通POP和IMAP 2.引入pom <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version> </dependency>3.逻辑 String host "smtp.qiye.aliyun.com"; String port "…

五、AIGC大模型_04LLaMA-Factory基础知识与SFT实战

1、LLaMA-Factory 基本介绍 1.1 定义 LLaMA-Factory 是一个开源的大型语言模型&#xff08;LLM&#xff09;微调框架&#xff0c;旨在帮助开发者和研究人员轻松地对预训练语言模型进行定制化训练和优化 1.2 功能特点 支持多种预训练模型 LLaMA Factory 支持超过 100 种主流的…

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断

故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断 目录 故障诊断 | Matlab实现基于DBO-BP-Bagging多特征分类预测/故障诊断分类效果基本介绍模型描述DBO-BP-Bagging蜣螂算法优化多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目的与方法 二…

和Claude对战黑白棋!一起开发AI对弈游戏

序言 为了提升自己的多模态处理能力和API调用技巧&#xff0c;我决定挑战一个有趣的项目——开发一款可以与Claude对战的黑白棋游戏&#xff01;这个项目不仅涉及游戏逻辑的实现&#xff0c;还需要调用Claude的API&#xff0c;让AI作为对手进行博弈。通过这个过程&#xff0c;…

R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化...

全文链接&#xff1a;https://tecdat.cn/?p40720 本论文旨在为对空间建模感兴趣的研究人员客户提供使用R-INLA进行空间数据建模的基础教程。通过对区域数据和地统计&#xff08;标记点&#xff09;数据的分析&#xff0c;介绍了如何拟合简单模型、构建和运行更复杂的空间模型&…

ubuntu20.04安装docker

3台主机&#xff0c;2台都能正确安装&#xff0c;第三台怎么都安装不成功&#xff1b; 3台主机都是一样的配置和系统&#xff1b; 后来看来是其外网的ip不一样&#xff0c;导致第三台主机可能被Qiang&#xff0c;不过错误只是提示签名不正确&#xff0c;在设置签名时好像没有…

【Android】用 chrome://inspect/#devices 调试H5页面

通常做Android开发的过程中&#xff0c;不可避免的需要遇到去与H5交互&#xff0c;甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息&#xff1a; 直接在浏览器地址栏输入 &#xff1a; chrome://inspect/#devices 直接连接手机usb,打开开发者模式…

AI多模态梳理与应用思考|从单文本到多视觉的生成式AI的AGI关键路径

摘要&#xff1a; 生成式AI正从“文本独舞”迈向“多感官交响”&#xff0c;多模态将成为通向AGI的核心路径。更深度的多模态模型有望像ChatGPT颠覆文字交互一样&#xff0c;重塑物理世界的智能化体验。 一、多模态的必然性&#xff1a;从单一到融合 生成式AI的起点是文本生成…

精美登录注册UI,登录页面设计模板

精美登录注册UI,登录页面设计模板 引言 在网页设计中,按钮是用户交互的重要元素之一。一个炫酷的按钮特效不仅能提升用户体验,还能为网页增添独特的视觉吸引力。今天,我们将通过CSS和JavaScript来实现一个“精美登录注册UI,登录页面设计模板”。该素材呈现了数据符号排版…

kotlin 知识点一 变量和函数

在Kotlin中定义变量的方式和Java 区别很大&#xff0c;在Java 中如果想要定义一个变 量&#xff0c;需要在变量前面声明这个变量的类型&#xff0c;比如说int a表示a是一个整型变量&#xff0c;String b表 示b是一个字符串变量。而Kotlin中定义一个变量&#xff0c;只允许在变量…

海洋 CMS V9SQL注入漏洞

目录 禁用information_schema解决方法 方法一&#xff1a;替换法 sys performance_schema ​编辑 方法二&#xff1a;无列名注入 利用lxml模块进行布尔盲注 XPATH XPATH介绍: XPATH语法: 布尔盲注 标准代码&#xff1a; 运行结果&#xff1a; ​编辑 时间盲注 标准代…

springcloud nacos 整合seata解决分布式事务

文章目录 nacos安装Mysql5.7安装及表初始化seata server安装下载并解压seata安装包在conf文件夹修改file.conf文件向本地数据库导入seata需要的表修改registry.conf文件将seata配置信息添加到nacos配置中心启动seata server springcloud整合seata测试流程正常下单流程扣减库存失…

Linux搜索查找类指令

1、find指令 基本语法&#xff1a;find [搜索范围] [选项] 功能&#xff1a;将从指定目录向下递归地遍历其各个子目录&#xff0c;将满足条件的文件或目录显示在终端。 常用选项&#xff1a; 操作 命令示例 说明 查找指定路径下的所有文件 find /path/to/dir 查找指定目…

uniapp 网络请求封装(uni.request 与 uView-Plus)

一、背景 在开发项目中&#xff0c;需要经常与后端服务器进行交互&#xff1b;为了提高开发效率和代码维护性&#xff0c;以及降低重复性代码&#xff0c;便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹&#xff0c;utils文件夹内新建env.js文…

ReentrantLock 用法与源码剖析笔记

&#x1f4d2; ReentrantLock 用法与源码剖析笔记 &#x1f680; 一、ReentrantLock 核心特性 &#x1f504; 可重入性&#xff1a;同一线程可重复获取锁&#xff08;最大递归次数为 Integer.MAX_VALUE&#xff09;&#x1f527; 公平性&#xff1a;支持公平锁&#xff08;按等…

【蓝桥杯单片机】客观题

一、第十三届省赛&#xff08;一&#xff09; 二、第十三届省赛&#xff08;二&#xff09;

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令 命令解释 SHOW DATABASES&#xff1b; 展示所有的数据库 CREATE DATABASE 数据…