Appearance
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容器管理
查看运行状态
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 -tDocker 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 nginxHTTPS配置
准备SSL证书
将SSL证书放到 ~/nginx/ssl/ 目录:
ssl/
├── example.com.crt
└── example.com.keyHTTPS配置
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的推荐方式,特别适合开发和测试环境。