Ubuntu 系统安装与配置 Java 容器详细教程
Ubuntu 上使用 Ja va 容器的三种实用方式
在 Ubuntu 环境中部署 Ja va 应用,容器化无疑能带来环境一致性和部署便捷性。今天,我们就来聊聊三种最接地气的实现方式,你可以根据实际场景灵活选用。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
方式一:直接使用官方 OpenJDK 镜像运行 JAR
适用场景:追求快速启动、维护成本低的简单应用。
这种方式最直接,核心思路就是“拿来即用”。具体操作分三步走:
- 准备应用包:首先,确保你的
app.jar文件已经放在项目目录下。 - 运行容器:通过一条命令,将 JAR 文件挂载到官方 OpenJDK 镜像中并启动。例如,将宿主机的 8080 端口映射到容器的 8080 端口:
docker run -d --name myapp \ -p 8080:8080 \ -v "$PWD/app.jar:/app.jar:ro" \ openjdk:11 \ ja va -jar /app.jar - 查看日志与进入容器:启动后,你可以随时查看运行日志,或者进入容器内部进行调试:
docker logs -f myapp docker exec -it myapp bash
这里有个小技巧:如果对镜像体积敏感,可以考虑使用 openjdk:8-jre 这类只包含运行环境的标签,能有效减小镜像体积。总的来说,这个流程和在 Ubuntu 宿主机上直接使用 Docker 启动 JAR 包几乎一模一样,学习成本极低。
方式二:基于 Ubuntu 自制 JDK 镜像
适用场景:需要特定 JDK 版本、自定义系统工具链,或者需要从内部仓库拉取依赖。
当官方镜像无法满足定制化需求时,自己动手构建一个专属镜像就成了最佳选择。流程同样清晰:
- 编写 Dockerfile:在项目根目录创建一个 Dockerfile 文件。以下是一个安装 OpenJDK 11 的示例:
FROM ubuntu:22.04 RUN apt-get update && apt-get install -y --no-install-recommends \ openjdk-11-jdk wget ca-certificates unzip && \ rm -rf /var/lib/apt/lists/* ENV JA VA_HOME=/usr/lib/jvm/ja va-11-openjdk-amd64 ENV PATH=$JA VA_HOME/bin:$PATH WORKDIR /app COPY app.jar /app/app.jar CMD ["ja va","-jar","/app/app.jar"] - 构建并运行:使用 Docker 命令构建镜像并启动容器:
docker build -t ubuntu-jdk11-app . docker run -d --name myapp -p 8080:8080 ubuntu-jdk11-app
如果需要使用 Oracle JDK,思路也是类似的:在 Dockerfile 中通过 wget 或 curl 下载指定版本的安装包,并正确设置 JA VA_HOME 环境变量。当然,务必注意 Oracle 的许可证条款以及确保下载地址的有效性。
方式三:在运行的 Ubuntu 容器内安装 Ja va 并启动 JAR
适用场景:已经存在一个正在运行的 Ubuntu 容器,需要临时为其加入 Ja va 运行环境。
这种方式更像是一种“热插拔”操作,适合临时调试或对现有容器进行功能扩展。
- 进入容器并安装 OpenJDK:首先,连接到目标容器内部,然后像在普通 Ubuntu 系统上一样安装 Ja va:
docker exec -it <容器名> bash apt-get update && apt-get install -y openjdk-11-jdk ja va -version - 运行 JAR:安装完成后,就可以启动你的 Ja va 应用了。建议使用绝对路径,并将日志重定向到文件,方便后续排查:
mkdir -p /app/logs nohup ja va -Dfile.encoding=UTF-8 -Xms512m -Xmx1024m \ -jar /app/app.jar >/app/logs/app.log 2>&1 &
为了让操作更规范,你还可以在容器内准备一个启动脚本(例如 run.sh),以后台方式执行,这样既便于管理,也方便复用。
关键注意事项与最佳实践
无论选择哪种方式,下面这些实践要点都值得关注,它们能帮你避开不少“坑”。
- 选择合适的基础镜像:生产环境优先考虑
openjdk:这类仅包含运行环境的镜像,体积更小,安全性更高。如果是需要编译或深度调试的场景,则可以使用完整的-jre openjdk:或基于 Ubuntu 自制的镜像。 - 时区与编码:这是容器化应用的一个经典问题。务必在 Dockerfile 中统一设置时区和字符编码,避免日志时间错乱和中文乱码:
ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV LANG=C.UTF-8 - 日志与数据持久化:务必将容器内的日志目录(如
/app/logs)、配置文件以及重要数据目录,通过卷(Volume)挂载到宿主机。这样既能防止数据丢失,也极大方便了日志查看和问题排查。 - 资源与健康检查:为容器设置合理的内存和 CPU 限制,防止单个应用耗尽主机资源。同时,配置健康检查探针,让编排工具(如 Docker Compose, Kubernetes)能够感知应用状态,提升整体稳定性。
- 最小权限原则:尽量避免使用
–privileged=true这种赋予容器全部权限的危险操作。应该按需授予特定能力,例如使用–cap-add参数,严格遵守最小权限原则,这是保障容器安全的重要防线。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Ubuntu系统下Golang程序打包成功但运行失败的解决方法
在Ubuntu上使用Golang进行开发:编译成功但运行出错的排查指南 在Ubuntu环境下用Go语言搞开发,有时候会遇到一个挺让人挠头的情况:代码明明编译通过了,可一运行就报错。这种“编译一时爽,运行火葬场”的体验,确实影响效率。别急,这通常不是玄学问题,而是有一些常见的“坑”可以系统性地排查。下
Ubuntu系统下Golang程序打包体积压缩方法
在Ubuntu上使用Golang打包应用程序时,如何有效减小二进制文件体积? 对于在Ubuntu环境下进行Golang开发的工程师来说,生成的应用二进制文件体积有时会超出预期。尤其是在容器化部署或资源受限的环境中,一个精简的可执行文件往往能带来更快的分发速度和更低的资源占用。那么,有哪些经过验证的方
Ubuntu系统下Go语言打包后的版本管理实践指南
在Ubuntu上使用Golang进行版本管理 对于在Ubuntu环境下工作的Golang开发者来说,一套清晰高效的版本管理流程至关重要。这不仅关乎代码的版本追踪,更直接影响到依赖管理的可靠性与团队协作的顺畅度。下面就来聊聊几种主流的方法。 1 使用Go Modules(推荐) 自Go 1 11版本
Ubuntu系统下Golang项目打包依赖管理指南
在Ubuntu上使用Golang进行项目打包时,处理依赖关系是非常重要的。以下是处理依赖关系的步骤: 安装Go模块支持(如果尚未安装):首先,确保你的Go环境已经启用了模块支持。在终端中运行以下命令即可开启: go env -w GO111MODULE=on 这一步是基础,它让Go能够以模块化的方式
Linux系统下Golang日志记录实现方法与最佳实践
在Linux系统中为Golang应用程序集成日志记录功能,是开发过程中一项基础且重要的任务。Go语言标准库内置的log包提供了简洁高效的日志记录能力,足以满足大多数基础应用场景的需求。本文将详细介绍如何利用标准库,在Linux环境下快速构建一个稳定可靠的日志系统。 首先,我们需要创建Go程序文件。在
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

