本文目录导读:

我来详细介绍Java容器(Docker容器)的启动方法:
基础Java容器启动案例
单文件Java应用
# Dockerfile FROM openjdk:11-jre-slim COPY HelloWorld.java /app/ WORKDIR /app RUN javac HelloWorld.java CMD ["java", "HelloWorld"]
# 构建和启动 docker build -t java-hello . docker run java-hello
Spring Boot应用
# Dockerfile FROM openjdk:11-jre-slim COPY target/myapp.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]
# 构建镜像 docker build -t my-spring-app . # 启动容器 docker run -d -p 8080:8080 --name my-app my-spring-app
交互式运行
运行Java交互shell
# 以交互模式运行 docker run -it openjdk:11-jre-slim /bin/bash # 在容器内执行Java命令 $ java -version $ jshell
运行带参数的Java程序
# 传递JVM参数 docker run -e JAVA_OPTS="-Xmx512m -Xms256m" -p 8080:8080 my-java-app # 传递应用参数 docker run my-java-app --server.port=9090 --spring.profiles.active=prod
完整项目案例
多阶段构建
# 第一阶段:编译 FROM maven:3.8-openjdk-11 AS build COPY pom.xml /app/ COPY src /app/src/ RUN mvn clean package -DskipTests # 第二阶段:运行 FROM openjdk:11-jre-slim COPY --from=build /app/target/*.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"]
docker-compose启动
# docker-compose.yml
version: '3.8'
services:
java-app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydb
- JAVA_OPTS=-Xmx512m
volumes:
- ./logs:/app/logs
depends_on:
- db
restart: unless-stopped
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
# 使用docker-compose启动 docker-compose up -d # 查看日志 docker-compose logs -f java-app
调试模式启动
开启远程调试
# Dockerfile FROM openjdk:11-jre-slim COPY app.jar /app.jar EXPOSE 8080 5005 ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-jar", "/app.jar"]
# 启动调试 docker run -d -p 8080:8080 -p 5005:5005 debug-java-app
使用Volume热部署
# 开发环境使用Volume挂载 docker run -d \ -p 8080:8080 \ -v $(pwd)/target:/app \ -e SPRING_DEVTOOLS_REMOTE_SECRET=mysecret \ java-app:dev
生产环境启动优化
资源限制
# 限制CPU和内存 docker run -d \ --cpus="1.5" \ --memory="1g" \ --memory-swap="2g" \ -p 8080:8080 \ --restart=always \ my-java-app
健康检查
# Dockerfile中添加健康检查 HEALTHCHECK --interval=30s --timeout=3s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1
快速启动脚本
#!/bin/bash
# start-java-container.sh
APP_NAME="myapp"
APP_VERSION="1.0.0"
JAR_FILE="target/${APP_NAME}-${APP_VERSION}.jar"
# 构建镜像
docker build -t ${APP_NAME}:${APP_VERSION} .
# 停止旧容器
docker stop ${APP_NAME} 2>/dev/null || true
docker rm ${APP_NAME} 2>/dev/null || true
# 启动新容器
docker run -d \
--name ${APP_NAME} \
-p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
-e JAVA_OPTS="-Xms256m -Xmx512m" \
-v /var/log/${APP_NAME}:/app/logs \
--restart=always \
${APP_NAME}:${APP_VERSION}
# 查看日志
docker logs -f ${APP_NAME}
常见问题排查
# 查看容器日志 docker logs -f <container_id> # 进入容器内部 docker exec -it <container_id> /bin/bash # 检查进程 docker exec <container_id> ps aux | grep java # 查看内存使用 docker stats <container_id> # 查看JVM信息 docker exec <container_id> jcmd 1 VM.info
启动命令汇总
| 场景 | 命令 |
|---|---|
| 前台运行 | docker run my-java-app |
| 后台运行 | docker run -d my-java-app |
| 端口映射 | docker run -p 8080:8080 my-java-app |
| 带环境变量 | docker run -e KEY=VALUE my-java-app |
| 限制资源 | docker run --memory="512m" --cpus="1" my-java-app |
| 自动重启 | docker run --restart=unless-stopped my-java-app |
| 交互模式 | docker run -it openjdk:11 /bin/bash |
根据你的具体需求选择合适的启动方式即可。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播