Java容器运行案例如何启动

wen java案例 26

本文目录导读:

Java容器运行案例如何启动

  1. 基础Java容器启动案例
  2. 交互式运行
  3. 完整项目案例
  4. 调试模式启动
  5. 生产环境启动优化
  6. 快速启动脚本
  7. 常见问题排查
  8. 启动命令汇总

我来详细介绍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

根据你的具体需求选择合适的启动方式即可。

抱歉,评论功能暂时关闭!