Docker部署Nginx服务的两种实现方法
作者:MatrixExplore
引言
在现代应用部署中,Docker 凭借其轻量、隔离、可移植的特性成为主流选择。Nginx 作为高性能的 Web 服务器和反向代理,结合 Docker 可以快速实现环境一致性和部署自动化。本文将详细介绍如何通过 Docker 部署 Nginx 1.24.0 版本,并实现配置文件、日志和网站内容的持久化管理。
准备工作
在开始部署前,请确保你的环境已满足以下条件:
- 已安装 Docker 引擎(推荐版本 20.10 及以上)
- 具备基本的 Linux 命令操作能力
- 拥有服务器的 root 或 sudo 权限
- 可通过以下命令验证 Docker 是否正常运行
docker --version # 查看 Docker 版本 systemctl status docker # 检查 Docker 服务状态
方法1:docker方式部署
步骤一:拉取Nginx镜像
Docker 镜像作为容器的模板,我们首先需要从 Docker Hub 拉取官方的 Nginx 镜像。可以指定一个具体的版本,也可以默认拉取latest。
docker pull nginx:1.26.0
拉取完成后,可通过docker images命令查看本地镜像列表,确认nginx:1.26.0 已存在:
docker images

步骤二:创建宿主机目录结构
为了实现 Nginx 配置、日志和网站内容的持久化,避免容器删除后数据丢失,我们需要在宿主机创建对应的目录结构。推荐的目录规划如下:
- 创建主目录
mkdir -p /opt/nginx
- 分别创建配置、日志和网站内容目录
mkdir -p /opt/nginx/conf # 存放 Nginx 主配置文件 mkdir -p /opt/nginx/conf/conf.d # 存放虚拟主机配置 mkdir -p /opt/nginx/log # 存放 Nginx 日志 mkdir -p /opt/nginx/html # 存放网站静态文件
步骤三:获取容器内的默认配置文件
Nginx容器内置了默认的配置文件,但这些文件存在于容器内部。为了便于后续自定义配置,我们需要先通过一个临时容器提取这些文件到宿主机的目录中。
- 启动临时 Nginx 容器,执行以下命令创建并启动一个临时的 Nginx 容器:
docker run --name nginx -d nginx:1.26.0 # --name nginx:为容器指定名称 # -d:以守护进程模式运行
- 复制容器内的配置文件到宿主机
通过 docker cp 命令将容器内的关键文件复制到之前创建的目录中。
docker cp nginx:/etc/nginx/nginx.conf /opt/nginx/conf/nginx.conf
- 复制虚拟主机配置目录 conf.d
docker cp nginx:/etc/nginx/conf.d /opt/nginx/conf/
- 复制默认网站内容目录html
docker cp nginx:/usr/share/nginx/html /opt/nginx/
- 删除临时容器
配置文件已提取完成,临时容器不再需要,执行以下命令停止并删除容器:
docker stop nginx docker rm nginx
步骤四:启动正式的 Nginx 容器
基于宿主机的持久化目录,启动正式的 Nginx 容器,通过 -v 参数实现目录挂载:
docker run --restart=always -d --name nginx \ -p 80:80 \ -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /opt/nginx/log:/var/log/nginx \ -v /opt/nginx/html:/usr/share/nginx/html \ -v /mnt/volumn:/mnt/volumn \ nginx:1.26.0
命令参数说明:
–restart=always:设置容器随 Docker 服务自动启动(避免服务器重启后容器未运行)
-d:后台运行容器
–name nginx:指定容器名称为 nginx
-p 80:80:端口映射(宿主机 80 端口:容器内 80 端口,外部可通过服务器 IP:80 访问)
-v 目录挂载:
配置文件挂载:确保宿主机修改配置后无需重启容器即可生效(需执行 nginx -s reload)
日志挂载:便于在宿主机直接查看和分析 Nginx 日志
网站内容挂载:直接在宿主机修改 /opt/nginx/html 目录下的文件即可更新网站内容
/mnt/volumn:/mnt/volumn:额外 挂载自定义目录(可根据实际需求添加或删除,例如用于存放静态资源)
步骤五:验证 Nginx 容器运行状态
容器启动后,通过以下命令确认是否正常运行:
docker ps | grep nginx
查看容器详细日志(排查启动失败问题)
docker logs nginx
若容器正常运行,可通过浏览器访问服务器的 80 端口,应显示Nginx的默认欢迎页面
方法2:docker-compose方式部署
- 拉取镜像
docker pull nginx:1.26.0
- 建立自定义网络
docker network ls
docker network create --driver bridge my_switch
- 编写docker-compose.yml文件
services:
nginx: # 服务的名称 自定义
image: nginx:1.26.0
container_name: nginx # 容器名称
restart: always
ports:
- "80:80"
volumes:
- /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /opt/nginx/html:/usr/share/nginx/html
- /opt/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/nginx/log:/var/log/nginx
- /mnt/volume:/mnt/volume
networks:
- my_switch
networks:
my_switch:
external: true # 指明该网络是外部定义和管理的
- 启动容器
在docker-compose.yml文件所在的目录下,打开终端或命令行界面,运行以下命令
docker-compose up -d
结语
本文阐述的Docker部署Nginx方案,核心在于通过目录挂载实现数据持久化,既保留了容器化部署的轻量特性,又解决了配置与数据的管理难题。这种模式在实际生产环境中极具实用价值。当需要迁移服务时,只需打包宿主机的 /opt/nginx目录与启动命令,即可在新环境快速复现相同的运行实例。
本文还分别介绍了docker原生和docker-compose工具两种方式部署nginx的方法。个人比较推荐后者,docker-compose方式使得docker的运维内容都以yaml的方式保存下来,使得后期运维更加清晰明了,但docker原生的方式可以让操作者更加熟悉docker底层的逻辑,也是一种加深学习映像的方式。
到此这篇关于Docker部署Nginx服务的两种实现方法的文章就介绍到这了,更多相关Docker部署Nginx服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
