Dockerfile
FROM openjdk:8
EXPOSE 48080
ENTRYPOINT ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "/opt/app/your-server.jar", "-Xss256k", "-Xms2g", "-Xmx4g", "-XX:+UseG1GC"]
docker-compose.yml
version: '3.8'
services:
# MinIO 服务
minio:
image: minio/minio
network_mode: host
container_name: minio
ports:
- "9000:9000" # MinIO API 端口
- "9001:9001" # MinIO 控制台端口
volumes:
- ./minio/data:/data # MinIO 数据存储目录
environment:
- "MINIO_ROOT_USER=admin" # 管理员账号
- "MINIO_ROOT_PASSWORD=yourpassword" # 管理员密码
command: server /data --console-address ":9001" # 启动命令
restart: unless-stopped
caddy:
image: caddy:latest
network_mode: host
container_name: caddy
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile # Caddy 配置文件
- ./caddy/data:/data # 证书存储
- ./caddy/config:/config # Caddy 配置缓存
- ./your-web.cn:/var/www/your-web.cn
restart: unless-stopped
nginx:
image: nginx:latest
network_mode: host
container_name: nginx
ports:
- "9090:80" # 将容器80端口映射到宿主机9090端口
- "808:808" # 将容器80端口映射到宿主机9090端口
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf # 映射Nginx主配置文件
#- ./conf/conf.d:/etc/nginx/conf.d # 映射额外的配置文件目录
- ./logs:/var/log/nginx # 映射日志目录
- /root/nginx-docker/html:/usr/share/nginx/html # 映射静态文件目录
restart: unless-stopped
# MySQL数据库服务
mysql:
image: mysql:5.7.22
container_name: mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=root123456
- TZ=Asia/Shanghai
volumes:
- ./mysql/conf:/etc/mysql
- ./mysql/data:/var/lib/mysql
- ./mysql/logs:/var/log/mysql
command: [
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci",
"--default-time_zone=+8:00",
"--max_connections=1024"
]
restart: unless-stopped
# redis
redis:
image: redis
ports:
- 6379:6379
container_name: redis
privileged: true
command: redis-server --appendonly yes --requirepass 123456 #设置密码
volumes:
- ./redis/data:/data
- ./redis/conf/redis.conf:/etc/redis/redis.conf:ro
restart: unless-stopped
hansu-server:
build:
#这是指定dockerfile的文件路径
context: /root/nginx-docker/your-api/
dockerfile: Dockerfile
image: hansu:latest
container_name: yourapiname
restart: always
privileged: true
logging:
driver: "json-file"
options:
max-size: "500m"
max-file: "3"
depends_on :
- redis
#如果有文件需要处理,需要将宿主机的文件目录挂载进容器中
volumes:
- /root/nginx-docker/your-api:/opt/app:rw
#如果和宿主机共用一个网络,就不需要设置端口,不然就使用默认网桥模式
network_mode: host
Caddyfile
your-api.cn {
reverse_proxy localhost:8080
}
your-static.cn {
root * /var/www/your-static.cn
file_server
encode gzip
#添加缓存控制
header {
Cache-Control "public, max-age=604800"
}
# 禁止目录访问
file_server {
hide dotfiles
browse disable
}
# 可选:添加日志
log {
output file /var/log/caddy/static.access.log
}
# 可选:启用HTTPS自动续期
tls yourmail@mail.com
}
nginx.conf
events {
worker_connections 1024; # 每个 worker 进程的最大连接数
}
http {
server {
listen 8080; # 容器内部监听 80 端口
#server_name your-minio.cn;
location / {
#root /usr/share/nginx/html; # 指定静态文件目录
# index index2.html; # 默认首页
proxy_pass http://127.0.0.1:9001;
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;
}
}
server {
listen 8081; # 监听的端⼝
server_name 127.0.0.1;# 域名或ip
root /usr/share/nginx/html/dist-prod;
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router{
rewrite ^.*$ /index.html last;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
使用命令:
命令 说明
docker-compose up 启动所有服务(前台运行)
docker-compose up -d 后台启动所有服务(守护进程模式)
docker-compose down 停止并删除所有容器、网络、卷
docker-compose down -v 同时删除挂载的卷(volumes)
docker-compose ps 查看当前运行的服务状态
docker-compose logs 查看所有容器的日志
docker-compose logs -f <service> 实时跟踪某个服务的日志(Ctrl+C 退出)
docker-compose exec <service> <command> 在运行的容器中执行命令(如 docker-compose exec app bash)
docker-compose build 构建或重新构建服务镜像
docker-compose pull 拉取服务所需的镜像