Skip to content

Docker安装Nginx

使用Docker安装Nginx是最简单快捷的方式,可以快速部署和管理Nginx服务。

前置条件

确保系统已安装Docker:

bash
# 检查Docker是否安装
docker --version

# 检查Docker服务是否运行
docker ps

拉取Nginx镜像

拉取最新版本

bash
docker pull nginx:latest

拉取指定版本

bash
# 拉取稳定版
docker pull nginx:stable

# 拉取特定版本
docker pull nginx:1.24.0

查看镜像

bash
docker images | grep nginx

运行Nginx容器

基本运行

bash
docker run --name my-nginx -p 80:80 -d nginx

参数说明:

  • --name my-nginx:容器名称
  • -p 80:80:端口映射,宿主机80端口映射到容器80端口
  • -d:后台运行

挂载配置文件

创建本地配置目录:

bash
mkdir -p ~/nginx/conf
mkdir -p ~/nginx/html
mkdir -p ~/nginx/logs

复制默认配置:

bash
docker run --name tmp-nginx -d nginx
docker cp tmp-nginx:/etc/nginx/nginx.conf ~/nginx/conf/nginx.conf
docker cp tmp-nginx:/etc/nginx/conf.d ~/nginx/conf/conf.d
docker cp tmp-nginx:/usr/share/nginx/html ~/nginx/
docker rm -f tmp-nginx

运行容器并挂载目录:

bash
docker run --name my-nginx \
  -p 80:80 \
  -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
  -v ~/nginx/html:/usr/share/nginx/html:ro \
  -v ~/nginx/logs:/var/log/nginx \
  -d nginx

自定义端口

bash
docker run --name my-nginx -p 8080:80 -d nginx

访问:http://localhost:8080

容器管理

查看运行状态

bash
docker ps | grep nginx

查看日志

bash
# 查看实时日志
docker logs -f my-nginx

# 查看最近100行日志
docker logs --tail 100 my-nginx

进入容器

bash
docker exec -it my-nginx /bin/bash

重启容器

bash
docker restart my-nginx

停止容器

bash
docker stop my-nginx

启动已停止的容器

bash
docker start my-nginx

删除容器

bash
docker rm -f my-nginx

配置重载

修改配置文件后,重载Nginx配置:

bash
docker exec my-nginx nginx -s reload

测试配置:

bash
docker exec my-nginx nginx -t

Docker Compose

使用Docker Compose可以更方便地管理Nginx容器。

创建docker-compose.yml

yaml
version: '3.8'

services:
  nginx:
    image: nginx:latest
    container_name: my-nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/html:/usr/share/nginx/html:ro
      - ./nginx/logs:/var/log/nginx
      - ./nginx/ssl:/etc/nginx/ssl:ro
    restart: unless-stopped
    networks:
      - nginx-network

networks:
  nginx-network:
    driver: bridge

启动服务

bash
docker-compose up -d

停止服务

bash
docker-compose down

重启服务

bash
docker-compose restart

查看日志

bash
docker-compose logs -f nginx

多站点配置

目录结构

nginx/
├── conf/
│   ├── nginx.conf
│   └── conf.d/
│       ├── site1.conf
│       └── site2.conf
├── html/
│   ├── site1/
│   └── site2/
├── logs/
└── ssl/

站点配置示例

site1.conf

nginx
server {
    listen 80;
    server_name site1.example.com;

    location / {
        root /usr/share/nginx/html/site1;
        index index.html;
    }
}

site2.conf

nginx
server {
    listen 80;
    server_name site2.example.com;

    location / {
        root /usr/share/nginx/html/site2;
        index index.html;
    }
}

运行容器

bash
docker run --name my-nginx \
  -p 80:80 \
  -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
  -v ~/nginx/html:/usr/share/nginx/html:ro \
  -v ~/nginx/logs:/var/log/nginx \
  -d nginx

HTTPS配置

准备SSL证书

将SSL证书放到 ~/nginx/ssl/ 目录:

ssl/
├── example.com.crt
└── example.com.key

HTTPS配置

nginx
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

运行容器

bash
docker run --name my-nginx \
  -p 80:80 \
  -p 443:443 \
  -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
  -v ~/nginx/html:/usr/share/nginx/html:ro \
  -v ~/nginx/ssl:/etc/nginx/ssl:ro \
  -v ~/nginx/logs:/var/log/nginx \
  -d nginx

性能优化

资源限制

bash
docker run --name my-nginx \
  --cpus="1.0" \
  --memory="512m" \
  -p 80:80 \
  -d nginx

启用Gzip

在配置文件中添加:

nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript;

常见问题

端口冲突

如果80端口被占用,可以修改映射端口:

bash
docker run --name my-nginx -p 8080:80 -d nginx

权限问题

确保挂载的目录有正确的权限:

bash
chmod -R 755 ~/nginx

配置文件错误

测试配置文件:

bash
docker exec my-nginx nginx -t

总结

使用Docker安装Nginx的优势:

  • 快速部署:一条命令即可启动
  • 环境隔离:不影响宿主机环境
  • 易于管理:容器化部署,便于迁移
  • 版本控制:可以轻松切换不同版本
  • 资源限制:可以精确控制资源使用

Docker是部署Nginx的推荐方式,特别适合开发和测试环境。