使用 Docker 部署 Nginx 教程

1、寻找 Nginx 镜像

访问不了官方网站的可以查看这个 Nginx 镜像页面:

👉 https://xuanyuan.cloud/r/library/nginxhttps://xuanyuan.cloud/r/library/nginx

在页面中会看到多种拉取方式,下面我们逐一说明。

2、下载 Nginx 镜像

2.1 使用轩辕镜像登录验证的方式拉取

复制代码
docker pull docker.xuanyuan.run/library/nginx:latest

2.2 拉取后改名

复制代码
docker pull docker.xuanyuan.run/library/nginx:latest \
&& docker tag docker.xuanyuan.run/library/nginx:latest library/nginx:latest \
&& docker rmi docker.xuanyuan.run/library/nginx:latest
说明:
  • docker pull:从轩辕镜像加速拉取镜像
  • docker tag:将镜像重命名为官方标准名称 library/nginx:latest,后续运行命令更简洁
  • docker rmi:删除临时镜像标签,避免占用额外存储空间

2.3 使用免登录方式拉取(推荐)

基础拉取命令:

复制代码
docker pull xxx.xuanyuan.run/library/nginx:latest

带重命名的完整命令:

复制代码
docker pull xxx.xuanyuan.run/library/nginx:latest \
&& docker tag xxx.xuanyuan.run/library/nginx:latest library/nginx:latest \
&& docker rmi xxx.xuanyuan.run/library/nginx:latest
说明:

免登录方式无需配置账户信息,新手可直接使用;镜像内容与 docker.xuanyuan.run 源完全一致,仅拉取地址不同。

2.4 官方直连方式

若网络可直连 Docker Hub,或已配置轩辕镜像加速器,可直接拉取官方镜像:

复制代码
docker pull library/nginx:latest

2.5 查看镜像是否拉取成功

复制代码
docker images

若输出类似以下内容,说明镜像下载成功:

复制代码
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
library/nginx       latest    f652ca386ed1   2 weeks ago    142MB

3、部署 Nginx

以下使用已下载的 library/nginx:latest 镜像,提供三种部署方案,可根据场景选择。

3.1 快速部署(最简方式)

适合测试或临时使用,命令如下:

复制代码
# 启动 Nginx 容器,命名为 nginx-test
# 宿主机 80 端口映射到容器 80 端口(Nginx 默认端口)
docker run -d --name nginx-test -p 80:80 library/nginx:latest
核心参数说明:
  • --name nginx-test:为容器指定名称,便于后续管理(如停止、重启)
  • -p 80:80:端口映射,格式为「宿主机端口:容器端口」
  • -d:后台运行容器
验证方式:

浏览器访问 http://服务器IP,应显示 Nginx 官方欢迎页。

3.2 挂载目录(推荐方式,适合实际项目)

通过挂载宿主机目录,实现「配置持久化」「日志分离」「网页文件独立管理」,步骤如下:

第一步:创建宿主机目录
复制代码
# 一次性创建 html(网页)、conf(配置)、logs(日志)三个目录
mkdir -p /data/nginx/{html,conf,logs}
第二步:准备测试网页
复制代码
# 向 html 目录写入测试内容
echo "Hello from Xuanyuan Nginx!" > /data/nginx/html/index.html
第三步:启动容器并挂载目录
复制代码
docker run -d --name nginx-web \
  -p 80:80 -p 443:443 \  # 映射 HTTP(80) 和 HTTPS(443) 端口
  -v /data/nginx/html:/usr/share/nginx/html \  # 网页目录挂载
  -v /data/nginx/conf:/etc/nginx/conf.d \      # 配置目录挂载
  -v /data/nginx/logs:/var/log/nginx \        # 日志目录挂载
  library/nginx:latest
目录映射说明:
宿主机目录 容器内目录 用途
/data/nginx/html /usr/share/nginx/html 存放网页文件(如 HTML、CSS)
/data/nginx/conf /etc/nginx/conf.d 存放 Nginx 配置文件
/data/nginx/logs /var/log/nginx 存放访问日志、错误日志
第四步:配置文件示例

新建 Nginx 基础配置文件 /data/nginx/conf/default.conf

复制代码
server {
    listen       80;          # 监听 80 端口(HTTP)
    server_name  _;           # 匹配所有域名(可替换为实际域名,如 example.com)

    root   /usr/share/nginx/html;  # 网页根目录
    index  index.html;             # 默认首页

    access_log  /var/log/nginx/access.log;  # 访问日志路径
    error_log   /var/log/nginx/error.log;   # 错误日志路径

    # 处理请求的核心规则
    location / {
        try_files $uri $uri/ =404;  # 尝试访问文件/目录,不存在则返回 404
    }
}
配置更新后重启容器

修改配置文件后,需重启容器使配置生效:

复制代码
docker restart nginx-web

3.3 docker-compose 部署(适合企业级场景)

通过 docker-compose.yml 统一管理容器配置,支持一键启动/停止,步骤如下:

第一步:创建 docker-compose.yml 文件
复制代码
version: '3'  # 指定 docker-compose 语法版本
services:
  nginx:
    image: library/nginx:latest  # 使用的镜像
    container_name: nginx-service  # 容器名称
    ports:
      - "80:80"   # HTTP 端口映射
      - "443:443" # HTTPS 端口映射
    volumes:
      - ./html:/usr/share/nginx/html   # 网页目录(相对路径,与 yml 同目录)
      - ./conf:/etc/nginx/conf.d       # 配置目录
      - ./logs:/var/log/nginx          # 日志目录
    restart: always  # 容器退出后自动重启(保障服务可用性)
第二步:启动服务

docker-compose.yml 所在目录执行:

复制代码
docker compose up -d
补充说明:
  • 若需修改配置/网页,直接操作当前目录下的 htmlconf 文件夹即可
  • 停止服务命令:docker compose down
  • 查看服务状态:docker compose ps

4、结果验证

通过以下方式确认 Nginx 服务正常运行:

  1. 浏览器验证

    访问 http://服务器IP,应显示之前写入的测试内容(Hello from Xuanyuan Nginx!)或 Nginx 欢迎页。

  2. 查看容器状态

    复制代码
    docker ps

    STATUS 列显示 Up,说明容器正常运行。

  3. 查看容器日志

    nginx-web 容器为例(若用 docker-compose 则为 nginx-service):

    复制代码
    docker logs nginx-web

    无报错信息即表示服务启动正常。

5、常见问题

5.1 访问不到网页?

排查方向:

  • 安全组:检查云服务器安全组是否放行 80(HTTP)、443(HTTPS)端口
  • 防火墙 :检查服务器本地防火墙(如 ufwfirewalld)是否开放对应端口
    • ufw 开放端口:sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
    • firewalld 开放端口:sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --add-port=443/tcp --permanent && sudo firewall-cmd --reload
  • 端口冲突 :执行 netstat -tuln | grep 80 查看 80 端口是否被其他进程占用,若占用需更换宿主机端口(如 -p 8080:80

5.2 如何启用 HTTPS?

  1. 准备证书 :获取 SSL 证书文件(通常包含 fullchain.pem 证书链和 privkey.pem 私钥),放到宿主机目录(如 /data/nginx/certs)。

  2. 挂载证书目录 :在容器启动命令中添加证书挂载参数:

    复制代码
    -v /data/nginx/certs:/etc/nginx/certs
  3. 修改 Nginx 配置 :更新 default.conf,添加 HTTPS 监听规则:

    复制代码
    server {
        listen 443 ssl;  # 监听 443 端口(HTTPS)
        server_name 你的域名;  # 替换为实际域名(如 example.com)
    
        # 证书路径(容器内路径,对应宿主机 /data/nginx/certs)
        ssl_certificate     /etc/nginx/certs/fullchain.pem;
        ssl_certificate_key /etc/nginx/certs/privkey.pem;
    
        root   /usr/share/nginx/html;
        index  index.html;
    }
  4. 重启容器docker restart nginx-web

5.3 日志文件过大怎么办?

  • 方案1:使用 logrotate 切割日志 (推荐):
    在宿主机创建 /etc/logrotate.d/nginx 配置文件,设置日志切割规则(如按天切割、保留 7 天):

    复制代码
    /data/nginx/logs/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 0640 root root
    }
  • 方案2:日志收集系统
    配合 ELK Stack(Elasticsearch + Logstash + Kibana)或 Loki 等工具,实现日志集中收集、存储和分析。

5.4 容器内时区不正确?

在启动容器时,通过 -e 参数设置时区(以上海时区 Asia/Shanghai 为例):

复制代码
docker run -d -e TZ=Asia/Shanghai \
  --name nginx-web \
  -p 80:80 -p 443:443 \
  -v /data/nginx/html:/usr/share/nginx/html \
  -v /data/nginx/conf:/etc/nginx/conf.d \
  -v /data/nginx/logs:/var/log/nginx \
  library/nginx:latest

结尾

至此,你已掌握基于轩辕镜像的Nginx镜像拉取与Docker部署全流程------从镜像下载验证,到不同场景的部署实践,再到问题排查,每个步骤都配备了完整的操作命令和说明。对于初学者而言,建议先从「快速部署」熟悉流程,再尝试「目录挂载」方案理解持久化配置的意义,最后根据需求进阶到「docker-compose」管理。

在实际使用中,若遇到文档未覆盖的问题,可结合docker logs 容器名查看日志定位原因,或参考Nginx官方文档补充学习。随着实践深入,你还可以基于本文基础,进一步探索Nginx的反向代理、负载均衡、HTTPS高级配置等功能,让Nginx更好地支撑你的业务需求。

相关推荐
lang2015092813 分钟前
Apache Maven 项目的开发指南
java·maven·apache
rengang6621 分钟前
134-Spring AI Alibaba OceanBase 向量数据库示例
java·人工智能·spring·oceanbase·rag·spring ai·ai应用编程
靠沿1 小时前
JavaSE知识分享——继承(下)
java·开发语言
Catfood_Eason1 小时前
CMPP3020作业2
java·开发语言
CryptoRzz1 小时前
印度实时股票数据源接口对接文档-IPO新股、k线数据
java·开发语言·数据库·区块链
宸津-代码粉碎机1 小时前
Java内部类内存泄露深度解析:原理、场景与根治方案(附GC引用链分析)
java·开发语言·jvm·人工智能·python
東雪木2 小时前
Java基础语言进阶学习——1,JVM内存模型(堆、栈、方法区)
java·jvm·学习
毕设源码-郭学长2 小时前
【开题答辩全过程】以 常二社区线上养老院管理系统为例,包含答辩的问题和答案
java·eclipse
yychen_java3 小时前
基于Java3D与Jzy3D的三维建模深度开发:从架构到实践
java·3d·架构
lang201509283 小时前
Maven 入门指南
java·maven