Docker Compose实战:一键部署Java应用
本文通过实际案例,演示如何使用Docker Compose一键部署完整的Java应用栈。
一、项目结构
project/
├── docker-compose.yml
├── app/
│ ├── Dockerfile
│ └── target/app.jar
├── mysql/
│ └── init.sql
└── nginx/
└── nginx.conf二、Dockerfile
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]三、docker-compose.yml
version: '3.8'
services:
app:
build: ./app
ports:
- "8080:8080"
depends_on:
- mysql
- redis
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/mydb
- SPRING_DATASOURCE_PASSWORD=123456
- SPRING_REDIS_HOST=redis
restart: always
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=mydb
volumes:
- mysql_data:/var/lib/mysql
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
restart: always
redis:
image: redis:7
ports:
- "6379:6379"
restart: always
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app
restart: always
volumes:
mysql_data:四、Nginx配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}五、启动命令
# 构建并启动
docker-compose up -d --build
# 查看日志
docker-compose logs -f app
# 停止
docker-compose down