Docker安装Nginx,轻松搭建属于自己的Web服务器

拉取镜像

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 目录下的文件,则展示效果如下:

相关推荐
qq_171538853 分钟前
Docker命令解析:加速你的容器化之旅(以Nginx为例)
nginx·docker·eureka
神奇的海马体1 小时前
Kubeasz工具快速部署K8Sv1.27版本集群(二进制方式)
docker·容器·kubernetes·kubeasz
Psycho_MrZhang2 小时前
Docker DockerFile和Django最佳实践
数据库·docker·django
love530love6 小时前
巧用符号链接搬移C盘中的软件数据目录到其他盘
运维·开发语言·windows·docker
kaikai_sk6 小时前
Docker和Dify学习笔记
笔记·学习·docker
Charlie不才7 小时前
【记录】使用 Docker 搭建 MongoDB 分布
mongodb·docker·容器
mumu-hn7 小时前
Docker进阶篇1:什么是Docker数据卷?为什么需要Docker数据卷?Docker数据卷3种类型介绍
运维·docker·容器
拿铁加椰果7 小时前
docker 内 pytorch cuda 不可用
pytorch·docker·容器·cuda
翻滚吧键盘9 小时前
docker需要sudo才能使用
运维·docker·容器