云计算百科
云计算领域专业知识百科平台

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安装有两种方式:

  • Docker自动化安装
  • 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 映射模式。

  • 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

    • 优点
      • 容器共享宿主机的网络,性能较高。
      • 无需显式端口映射,容器与宿主机共享相同的网络。
    • 缺点
      • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
      • 容器的端口与宿主机端口相同,可能存在安全隐患。
  • 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 容器不仅简化了部署流程,还提供了极大的灵活性和可扩展性。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Docker 搭建 Nginx 服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!