Skip to content

xdhps/docker-java-demo

Repository files navigation

Docker Java 示例项目

这是一个完整的 Docker 学习示例,包含 Spring Boot 应用的容器化实践。

项目结构

docker-java-demo/
├── src/                          # Java 源代码
│   └── main/
│       ├── java/
│       │   └── com/example/demo/
│       │       ├── DemoApplication.java      # 主应用类
│       │       └── HelloController.java      # REST 控制器
│       └── resources/
│           └── application.properties        # 应用配置
├── Dockerfile                    # Docker 镜像构建文件
├── Dockerfile.best-practices     # 最佳实践示例
├── .dockerignore                 # Docker 忽略文件
├── docker-compose.yml            # 多容器编排配置
├── init.sql                      # 数据库初始化脚本
├── pom.xml                       # Maven 配置
├── LEARNING_PATH.md              # 学习路线图
└── README.md                     # 本文件

快速开始

1. 构建镜像

docker build -t docker-java-demo:1.0 .

2. 运行单个容器

docker run -d -p 8080:8080 --name my-java-app docker-java-demo:1.0

3. 测试应用

# 访问首页
curl http://localhost:8080/

# 测试 hello 接口
curl http://localhost:8080/hello/World

# 健康检查
curl http://localhost:8080/health

4. 使用 Docker Compose(Java + MySQL)

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

API 端点

端点 方法 描述 示例
/ GET 首页信息 curl http://localhost:8080/
/hello/{name} GET 问候接口 curl http://localhost:8080/hello/Docker
/health GET 健康检查 curl http://localhost:8080/health

Docker 命令参考

镜像管理

# 构建镜像
docker build -t <镜像名>:<标签> .

# 查看镜像
docker images

# 删除镜像
docker rmi <镜像ID>

# 导出镜像
docker save -o app.tar docker-java-demo:1.0

# 导入镜像
docker load -i app.tar

容器管理

# 运行容器
docker run -d -p 8080:8080 --name my-app docker-java-demo:1.0

# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 停止容器
docker stop my-app

# 启动容器
docker start my-app

# 重启容器
docker restart my-app

# 删除容器
docker rm my-app

# 强制删除运行中的容器
docker rm -f my-app

日志和调试

# 查看日志
docker logs my-app

# 实时查看日志
docker logs -f my-app

# 查看最近 100 行日志
docker logs --tail 100 my-app

# 进入容器
docker exec -it my-app /bin/bash

# 在容器中执行命令
docker exec my-app ps aux

# 查看容器详细信息
docker inspect my-app

# 查看容器资源使用
docker stats my-app

数据卷

# 创建数据卷
docker volume create my-data

# 列出数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect my-data

# 删除数据卷
docker volume rm my-data

# 使用数据卷运行容器
docker run -v my-data:/app/data my-app

网络

# 创建网络
docker network create my-network

# 列出网络
docker network ls

# 查看网络详情
docker network inspect my-network

# 容器连接到网络
docker network connect my-network my-app

# 删除网络
docker network rm my-network

清理

# 删除所有停止的容器
docker container prune

# 删除所有未使用的镜像
docker image prune -a

# 删除所有未使用的数据卷
docker volume prune

# 删除所有未使用的网络
docker network prune

# 清理所有未使用的资源
docker system prune -a --volumes

# 查看磁盘使用
docker system df

技术栈

  • Java: 17
  • Spring Boot: 3.2.0
  • 构建工具: Maven 3.9
  • 基础镜像: eclipse-temurin:17-jre
  • 数据库: MySQL 8.0 (Docker Compose 示例)

学习重点

1. Dockerfile

  • 多阶段构建
  • 镜像分层和缓存
  • 健康检查
  • 环境变量

2. Docker Compose

  • 多容器编排
  • 服务依赖
  • 网络配置
  • 数据卷管理

3. 最佳实践

  • 使用 .dockerignore
  • 非 root 用户运行
  • 镜像优化
  • 安全配置

常见问题

端口已被占用

# 查看端口占用
lsof -i :8080

# 使用其他端口
docker run -p 8081:8080 docker-java-demo:1.0

容器无法启动

# 查看日志
docker logs <容器ID>

# 交互式运行(调试模式)
docker run -it docker-java-demo:1.0 /bin/bash

镜像构建失败

# 查看构建日志
docker build --no-cache -t docker-java-demo:1.0 .

# 使用 BuildKit 获取详细信息
DOCKER_BUILDKIT=1 docker build -t docker-java-demo:1.0 .

进阶资源

下一步

  1. 阅读 LEARNING_PATH.md 了解完整学习路线
  2. 尝试修改应用代码并重新构建镜像
  3. 使用 Docker Compose 添加更多服务(Redis、Nginx)
  4. 学习 Kubernetes 进行容器编排
  5. 集成 CI/CD 流程

作者

Docker Java 示例项目 - 用于学习 Docker 容器化技术

许可

MIT License

About

Docker Java Demo - Spring Boot Containerization example

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published