系列文章目录
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 容器不仅简化了部署流程,还提供了极大的灵活性和可扩展性。