Docker 入门:容器化开发的强大工具
Docker 入门:容器化开发的强大工具
今天我们来深入探讨 Docker,一个彻底改变软件开发和部署方式的容器化平台。Docker 以其轻量、便携和高一致性的特性,成为现代 DevOps 和微服务架构的核心工具。本文将带你从零搭建一个简单的 Docker 应用,结合 Spring Boot 部署一个 Web 服务,适合初学者快速上手,同时为有经验的开发者提供进阶建议和优化思路。
Docker 通过容器技术将应用及其依赖打包,确保开发、测试和生产环境一致。本文基于 Docker 26.x(最新稳定版),使用 Maven 构建一个 Spring Boot 项目,并通过 Docker 容器运行。让我们开始吧!
前置准备
在开始之前,确保开发环境已就绪:
- 操作系统:Linux(如 Ubuntu)、MacOS 或 Windows(推荐 WSL2)。
- Docker:安装 Docker Desktop(Windows/Mac)或 Docker Engine(Linux)。
- JDK:推荐 JDK 17(Spring Boot 3.x 要求 JDK 17+,2.x 支持 JDK 8+)。
- Maven:用于构建 Spring Boot 项目,确保配置好环境变量。
- IDE:IntelliJ IDEA 或 VS Code,方便编辑代码和 Dockerfile。
- 项目结构:创建一个 Spring Boot 项目,目录如下:
docker-demo ├── src │ ├── main │ │ ├── java │ │ │ └── com.example.demo │ │ │ ├── controller │ │ │ └── DemoApplication.java │ │ ├── resources │ │ │ └── application.properties │ └── test ├── Dockerfile └── pom.xml
安装 Docker:
- Linux:
sudo apt update && sudo apt install docker.io - MacOS:
brew install docker - Windows:下载 Docker Desktop(启用 WSL2)。
- 验证:运行
docker --version确认安装成功。
推荐使用 Spring Initializr 生成 Spring Boot 项目:
- 项目:Maven
- 语言:Java
- Spring Boot 版本:3.3.x
- 依赖:Spring Web
步骤 1: 创建 Spring Boot 项目
生成一个简单的 Spring Boot 项目,包含一个 REST 端点。
Maven 依赖
在 pom.xml 中配置:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>docker-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
<dependencies>
<!-- Spring Boot Web 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
说明:
spring-boot-starter-web:包含嵌入式 Tomcat 和 Spring MVC。spring-boot-maven-plugin:生成可执行 JAR。
REST 控制器
在 com.example.demo.controller.HelloController 创建控制器:
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Docker!";
}
}
配置文件
在 src/main/resources/application.properties 中配置端口(可选):
server.port=8080
步骤 2: 创建 Dockerfile
在项目根目录创建 Dockerfile:
# 使用官方 OpenJDK 镜像作为基础
FROM openjdk:17-jdk-slim
# 设置工作目录
WORKDIR /app
# 复制 JAR 文件
COPY target/docker-demo-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口
EXPOSE 8080
# 运行应用
ENTRYPOINT ["java", "-jar", "app.jar"]
说明:
openjdk:17-jdk-slim:轻量级 JDK 17 镜像。COPY:将构建的 JAR 复制到容器。EXPOSE:声明应用端口。ENTRYPOINT:启动 Spring Boot 应用。
步骤 3: 构建和运行 Docker 容器
-
构建 JAR 文件:
mvn clean package生成
target/docker-demo-0.0.1-SNAPSHOT.jar。 -
构建 Docker 镜像:
docker build -t docker-demo . -
运行容器:
docker run -d -p 8080:8080 docker-demo -
测试:
- 访问
http://localhost:8080/hello,应返回Hello, Docker!。 - 验证容器状态:
docker ps。
- 访问
步骤 4: 使用 Docker Compose(可选)
为多容器场景(如 Spring Boot + MySQL),创建 docker-compose.yml:
version: '3.8'
services:
app:
image: docker-demo
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: demo_db
ports:
- "3306:3306"
运行:
docker-compose up -d
说明:
- 定义两个服务:Spring Boot 应用和 MySQL 数据库。
depends_on:确保数据库先启动。
步骤 5: 测试和调试
-
验证应用:
- 访问
http://localhost:8080/hello。 - 若使用 MySQL,需在 Spring Boot 项目中添加 JPA 和 MySQL 依赖,并配置
application.properties。
- 访问
-
调试技巧:
- 容器日志:
docker logs <container_id>。 - 构建失败:检查
Dockerfile语法或依赖。 - 端口冲突:确保宿主机 8080 端口未被占用。
- 清理容器:
docker rm -f $(docker ps -aq)。
- 容器日志:
进阶与最佳实践
- 多阶段构建:优化镜像大小:
FROM maven:3.8.6-openjdk-17 AS builder WORKDIR /app COPY . . RUN mvn clean package -DskipTests FROM openjdk:17-jdk-slim WORKDIR /app COPY --from=builder /app/target/docker-demo-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] - Docker Compose 高级配置:添加网络、健康检查和卷挂载。
- 镜像优化:使用
.dockerignore排除不必要文件。 - CI/CD 集成:结合 GitHub Actions 或 Jenkins 自动化构建和部署。
- 监控:使用 Prometheus 和 Grafana 监控容器性能。
- 资源推荐:Docker 官网(docker.com)、《Docker Deep Dive》。多实践多容器应用和编排。
总结
通过这个 Docker 示例,你学会了创建 Spring Boot 项目、编写 Dockerfile、构建和运行容器。Docker 的容器化技术简化了开发和部署流程,适合微服务和 DevOps 场景。
更多推荐



所有评论(0)