Docker 搭建 Nginx 服务器

06-01 1633阅读

系列文章目录

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
          
          • 优点
            • 容器共享宿主机的网络,性能较高。
            • 无需显式端口映射,容器与宿主机共享相同的网络。
            • 缺点
              • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
              • 容器的端口与宿主机端口相同,可能存在安全隐患。
              • 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 服务器


          总结

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

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码