容器化部署 #
一、Dockerfile编写 #
1.1 基础镜像 #
dockerfile
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/user-service.jar app.jar
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms256m -Xmx512m"
EXPOSE 8001
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
1.2 多阶段构建 #
dockerfile
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /build
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY --from=builder /build/target/*.jar app.jar
ENV TZ=Asia/Shanghai
EXPOSE 8001
ENTRYPOINT ["java", "-jar", "app.jar"]
二、Docker Compose #
2.1 基础服务 #
yaml
version: '3.8'
services:
nacos:
image: nacos/nacos-server:v2.3.0
container_name: nacos
environment:
- MODE=standalone
ports:
- "8848:8848"
- "9848:9848"
networks:
- spring-cloud-net
mysql:
image: mysql:8.0
container_name: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=cloud
ports:
- "3306:3306"
networks:
- spring-cloud-net
redis:
image: redis:7
container_name: redis
ports:
- "6379:6379"
networks:
- spring-cloud-net
networks:
spring-cloud-net:
driver: bridge
2.2 微服务 #
yaml
services:
user-service:
build: ./user-service
container_name: user-service
environment:
- NACOS_SERVER_ADDR=nacos:8848
- MYSQL_HOST=mysql
- REDIS_HOST=redis
ports:
- "8001:8001"
depends_on:
- nacos
- mysql
- redis
networks:
- spring-cloud-net
order-service:
build: ./order-service
container_name: order-service
environment:
- NACOS_SERVER_ADDR=nacos:8848
ports:
- "8002:8002"
depends_on:
- nacos
networks:
- spring-cloud-net
gateway:
build: ./gateway
container_name: gateway
environment:
- NACOS_SERVER_ADDR=nacos:8848
ports:
- "8080:8080"
depends_on:
- nacos
networks:
- spring-cloud-net
三、启动命令 #
bash
# 启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -f user-service
# 停止服务
docker-compose down
# 重新构建
docker-compose up -d --build
四、总结 #
| 要点 | 说明 |
|---|---|
| Dockerfile | 构建镜像 |
| Docker Compose | 编排服务 |
| 网络 | 服务间通信 |
接下来让我们学习 Kubernetes部署!
最后更新:2026-03-28