我来详细介绍Docker Compose安装和使用Nginx的方法。
一、安装Docker和Docker Compose
1. 安装Docker
# Ubuntu/Debian
sudo apt update
sudo apt install docker.io
# CentOS/RHEL
sudo yum install docker
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
2. 安装Docker Compose
# 下载最新版本(当前v2.x)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
# 或者使用新版命令
docker compose version
二、基本Nginx配置
1. 创建项目目录
mkdir nginx-docker && cd nginx-docker
2. 创建docker-compose.yml文件
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: my-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
- ./logs:/var/log/nginx
- ./ssl:/etc/nginx/ssl
restart: unless-stopped
networks:
- nginx-network
networks:
nginx-network:
driver: bridge
3. 创建Nginx配置文件
创建 nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
# 默认服务器配置
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
}
4. 创建示例HTML页面
mkdir html
echo "<h1>Welcome to Nginx Docker!</h1>" > html/index.html
5. 启动Nginx容器
# 启动服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f nginx
# 停止服务
docker-compose down
三、高级配置示例
1. 多站点配置
创建 docker-compose.yml:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
- ./sites:/var/www/html
- ./ssl:/etc/nginx/ssl
- ./logs:/var/log/nginx
restart: unless-stopped
networks:
- web-network
networks:
web-network:
driver: bridge
创建站点配置文件 conf.d/site1.conf:
server {
listen 80;
server_name site1.example.com;
location / {
root /var/www/html/site1;
index index.html;
}
}
server {
listen 80;
server_name site2.example.com;
location / {
root /var/www/html/site2;
index index.html;
}
}
2. SSL证书配置
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html/secure-site;
index index.html;
}
}
3. 反向代理配置
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./proxy.conf:/etc/nginx/conf.d/proxy.conf
depends_on:
- webapp1
- webapp2
networks:
- app-network
webapp1:
image: my-webapp:latest
networks:
- app-network
webapp2:
image: another-webapp:latest
networks:
- app-network
networks:
app-network:
driver: bridge
创建 proxy.conf:
upstream backend {
server webapp1:3000;
server webapp2:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
四、常用管理命令
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 重启服务
docker-compose restart
# 查看日志
docker-compose logs
docker-compose logs -f nginx # 实时查看
# 查看状态
docker-compose ps
docker stats
# 进入容器
docker-compose exec nginx bash
docker-compose exec nginx nginx -t # 测试配置
# 重新加载配置(不重启容器)
docker-compose exec nginx nginx -s reload
# 停止并删除所有资源
docker-compose down -v
# 构建镜像(如果有自定义Dockerfile)
docker-compose build
# 查看服务日志
docker-compose logs --tail=100 nginx
# 查看资源使用
docker-compose top
五、性能优化配置
Docker Compose资源限制:
services:
nginx:
image: nginx:alpine # 使用更小的Alpine版本
deploy:
resources:
limits:
memory: 512M
cpus: '1'
reservations:
memory: 256M
cpus: '0.5'
优化的Nginx配置:
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
# 启用gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss;
# 缓存配置
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
}
六、完整示例项目结构
nginx-docker/
├── docker-compose.yml
├── nginx.conf
├── conf.d/
│ ├── default.conf
│ ├── site1.conf
│ └── site2.conf
├── html/
│ ├── index.html
│ ├── site1/
│ └── site2/
├── ssl/
│ ├── cert.pem
│ └── key.pem
└── logs/
├── access.log
└── error.log
这样你就有了一个完整的Nginx Docker环境,可以根据需要调整配置。