前言
作为一名 Java 工程师,掌握 Docker 已经成为现代软件开发中的必备技能。无论是用于本地开发环境搭建、微服务部署,还是 CI/CD 流程的构建,Docker 都能显著提升我们的开发效率和部署一致性。本文将重点介绍 Java 开发人员在日常工作中最需要掌握的 Docker 命令,并结合实际开发场景进行详细解析。
一、镜像构建与管理:打造 Java 应用容器
1. 多阶段构建优化 Java 镜像
对于 Java 应用,多阶段构建可以大幅减小镜像体积,消除不必要的依赖。
dockerfile
# Dockerfile 示例
FROM maven:3.8.4-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package -DskipTests
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
构建命令:
bash
# 构建镜像
docker build -t my-java-app:1.0 .
# 查看镜像层大小
docker history my-java-app:1.0
# 扫描镜像安全漏洞
docker scan my-java-app:1.0
重要参数解释:
-t
:指定镜像名称和标签.
:构建上下文路径--no-cache
:禁用缓存构建,确保依赖最新
2. 镜像管理技巧
bash
# 列出镜像
docker images
# 过滤显示 Java 相关镜像
docker images | grep -E '(openjdk|java|maven)'
# 删除特定镜像
docker rmi my-java-app:1.0
# 清理悬空镜像
docker image prune
二、容器运行与调试:Java 应用实践
1. 运行 Java 应用容器
bash
# 基本运行
docker run -d --name java-app -p 8080:8080 my-java-app:1.0
# 带环境变量配置(Spring Boot 配置)
docker run -d \
--name spring-app \
-p 8080:8080 \
-e "SPRING_PROFILES_ACTIVE=prod" \
-e "JAVA_OPTS=-Xmx512m -Xms256m" \
my-spring-app:1.0
# 挂载配置文件目录
docker run -d \
--name java-app \
-p 8080:8080 \
-v $(pwd)/config:/app/config \
my-java-app:1.0
# 使用特定网络
docker run -d \
--name java-app \
--network my-network \
my-java-app:1.0
关键参数说明:
-e
:设置环境变量,用于配置应用参数-v
:挂载卷,用于配置文件、日志持久化--network
:指定容器网络,用于微服务通信
2. 容器调试与监控
bash
# 查看容器日志(Spring Boot 应用)
docker logs java-app
# 实时日志跟踪
docker logs -f java-app
# 查看特定时间后的日志
docker logs --since 10m java-app
# 过滤错误日志
docker logs java-app | grep -i error
# 进入容器内部调试
docker exec -it java-app /bin/bash
# 查看容器资源使用
docker stats java-app
# 检查容器详细配置
docker inspect java-app
三、开发环境实用技巧
1. 数据库容器化
bash
# 运行 MySQL 用于开发
docker run -d \
--name mysql-db \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=appdb \
-v mysql_data:/var/lib/mysql \
mysql:8.0
# 运行 Redis
docker run -d \
--name redis-cache \
-p 6379:6379 \
-v redis_data:/data \
redis:6.2-alpine
2. Docker Compose 编排开发环境
yaml
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=dev
- DATABASE_URL=jdbc:mysql://mysql:3306/appdb
depends_on:
- mysql
volumes:
- ./logs:/app/logs
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: appdb
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
常用命令:
bash
# 启动开发环境
docker-compose up -d
# 重新构建并启动
docker-compose up -d --build
# 查看服务状态
docker-compose ps
# 查看应用日志
docker-compose logs app
# 停止环境
docker-compose down
四、生产环境注意事项
1. 资源限制与优化
bash
# 运行容器时限制资源
docker run -d \
--name java-app \
--memory=1g \
--cpus=2 \
--memory-swap=1g \
my-java-app:1.0
# 更新运行中容器的资源限制
docker update --memory=2g --cpus=3 java-app
2. 健康检查配置
在 Dockerfile 中添加健康检查:
dockerfile
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8080/actuator/health || exit 1
五、常用故障排查命令
bash
# 查看容器进程
docker top java-app
# 检查容器网络
docker exec java-app netstat -tulpn
# 分析容器性能
docker exec java-app jcmd 1 VM.version
# 复制文件到容器
docker cp application.properties java-app:/app/config/
# 从容器复制文件
docker cp java-app:/app/logs/app.log ./
六、CI/CD 集成命令
bash
# 为镜像打标签
docker tag my-java-app:1.0 myregistry.com/java-app:1.0
# 推送镜像到仓库
docker push myregistry.com/java-app:1.0
# 从仓库拉取镜像
docker pull myregistry.com/java-app:1.0