拉取镜像
bash
docker pull nginx
创建挂载目录
bash
# 在容器中一次性创建多个目录
mkdir -p /docker/nginx/{conf,html,log}
启动临时容器
bash
docker run --name nginx -d nginx
复制配置文件到宿主机
bash
docker cp nginx:/etc/nginx/nginx.conf /docker/nginx/conf
docker cp nginx:/etc/nginx/conf.d /docker/nginx/conf
docker cp nginx:/usr/share/nginx/html /docker/nginx
docker cp nginx:/var/log/nginx /docker/nginx/log
配置
在宿主机的 /docker/nginx/conf/nginx.conf 文件中配置如下内容:
注意:以下配置仅供参考,可根据自身需求进行调整
bash
# 主配置文件
user nginx; # 指定运行用户
worker_processes auto; # 根据CPU核心数自动分配工作进程数
worker_rlimit_nofile 65535; # 设置每个进程的最大文件句柄数
error_log /var/log/nginx/error.log; # 错误日志路径
pid /var/run/nginx.pid; # 进程ID文件路径
# 事件模型
events {
worker_connections 1024; # 每个进程的最大连接数,默认1024
use epoll; # 使用epoll事件模型,适合高并发场景
accept_mutex off; # 高并发时关闭互斥锁
}
# HTTP核心模块
http {
include mime.types; # 包含MIME类型文件
default_type application/octet-stream; # 默认MIME类型
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # 访问日志路径
# 传输优化
sendfile on; # 零拷贝传输
tcp_nopush on; # 优化数据包发送
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 30s; # 连接保持时间
reset_timedout_connection on; # 超时后重置连接
# 虚拟主机配置
server {
listen 80; # 监听80端口
server_name localhost; # 域名
location / {
root /usr/share/nginx/html; # 默认根目录
try_files $uri $uri/ /index.html; # 按照顺序检查请求的URI是否对应一个文件或目录,如果没有找到,则返回根目录下的index.html文件
}
# 反向代理配置
location /api {
proxy_pass http://localhost:8080; # 后端服务地址(实际的生产环境,这里配置的是域名,如:chaoup.cn)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 错误页面配置
error_page 404 /404.html;
location = /404.html {
internal;
}
# 压缩配置
gzip on;
gzip_types text/plain application/json application/x-javascript text/css application/xml;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6].";
}
}
在宿主机的 /docker/nginx/html 目录下放置页面(如果是生产环境,可将前端项目打包生成的 dist 目录下的所有文件放置在该目录下)
授权
bash
# 授权于文件所有者(读、写、执行)权限
# 授权于文件所属组(读、执行)权限
# 授权于文件所属组(读、执行)权限
# -R 表示递归,即 /docker/nginx 目录及其子目录和文件都会应用此权限设置
chmod 755 -R /docker/nginx
删除临时容器
bash
docker stop nginx && docker rm nginx
启动
bash
# -d:后台运行容器(detached 模式)
# --name nginx:指定容器名称为 "nginx"
# -p 80:80:映射宿主机 80 端口 → 容器 80 端口(HTTP)
# -v /docker/nginx/html:/usr/share/nginx/html:挂载网页文件目录
# -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:挂载主配置文件
# -v /docker/nginx/conf/conf.d:/etc/nginx/conf.d:挂载子配置目录
# -v /docker/nginx/log:/var/log/nginx:挂载日志目录
# --restart=always:容器意外退出时自动重启
# nginx:使用 nginx:latest 镜像
docker run -d --name nginx \
-p 80:80 \
-v /docker/nginx/html:/usr/share/nginx/html \
-v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/log:/var/log/nginx \
--restart=always \
nginx
测试
浏览器访问:localhost,其结果如下:
如果html目录下放置的是项目打包后生成的 dist 目录下的文件,则展示效果如下: