Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Docker打包和运行Java镜像:完整指南

使用Docker打包和运行Java镜像:完整指南

作者头像
默 语
发布于 2025-01-12 02:35:36
发布于 2025-01-12 02:35:36
94301
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:1
代码可运行

默语是谁?

大家好,我是 默语,别名默语博主,擅长的技术领域包括Java运维人工智能。我的技术背景扎实,涵盖了从后端开发到前端框架的各个方面,特别是在Java 性能优化、多线程编程、算法优化等领域有深厚造诣。

目前,我活跃在CSDN、掘金、阿里云和 51CTO等平台,全网拥有超过10万的粉丝,总阅读量超过1400 万。统一 IP 名称为 默语 或者 默语博主。我是 CSDN 博客专家、阿里云专家博主和掘金博客专家,曾获博客专家、优秀社区主理人等多项荣誉,并在 2023 年度博客之星评选中名列前 50。我还是 Java 高级工程师、自媒体博主,北京城市开发者社区的主理人,拥有丰富的项目开发经验和产品设计能力。希望通过我的分享,帮助大家更好地了解和使用各类技术产品,在不断的学习过程中,可以帮助到更多的人,结交更多的朋友.

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

使用Docker打包和运行Java镜像:完整指南

在这篇文章中,我们将详细讲解如何使用Docker打包和运行一个Java应用镜像。通过此教程,即使你是一个小白,也能轻松学会如何构建Docker镜像并运行Java应用。

摘要

本教程包括以下内容:

  1. 准备Java镜像的基础环境。
  2. 编写启动脚本和Dockerfile。
  3. 使用Docker构建Java应用镜像。
  4. 启动容器运行Java应用。
  5. 可能遇到的问题及解决方案。

最后会引导大家加我的微信,方便随时交流!


引言

Docker作为一种轻量级容器化技术,可以极大地方便应用的部署和管理。通过Docker,我们可以在任何支持Docker的系统上轻松运行Java应用,而不需要单独安装Java环境。


正文

1. 准备工作

安装Docker 确保系统上已经安装了Docker。如果尚未安装,请参考官方文档进行安装。

加载基础Java镜像 使用以下命令加载Java镜像(这里假设你已经有了一个本地的Java镜像文件):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker load -i <镜像文件名>

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker load -i jdk-1.8.0_432.tar

加载成功后,可以通过以下命令查看镜像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker images
  1. 准备项目所需文件 需要准备的文件包括:
    • Java应用的JAR包(如demo-0.0.1-SNAPSHOT.jar)。
    • 应用配置文件(如application.properties)。
    • 启动脚本(start_1.sh)。
    • Dockerfile。
2. 编写启动脚本

以下是一个完整的start_1.sh脚本,用于启动Java应用。每一部分都有详细注释,帮助你理解其功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh
# 设置环境变量以支持UTF-8编码
export LANG=en_US.UTF-8
TZ='CST-8'
export TZ

# 定义JAR文件目录、JAR文件名和日志目录
JarDir="/ywc/zb/"  # JAR包的存放路径
LogDir="/ywc/zb/"  # 日志文件的存放路径
JarFile="demo-0.0.1-SNAPSHOT.jar"  # JAR文件名称
OutFile="demo.log"  # 输出的日志文件名称

# 将脚本运行信息写入日志
echo "Starting application..." > $LogDir$OutFile

# 检查是否已有运行的Java进程
ThreadID=$(ps -ef | grep $JarFile | grep -v grep | awk '{print $2}')
if [ ! -z $ThreadID ]; then
    echo "$JarFile 已在进程 $ThreadID 中运行,尝试终止..." >> $LogDir$OutFile
    kill -9 $ThreadID
    echo "已终止存在的进程 $ThreadID。" >> $LogDir$OutFile
fi

# 启动Java应用
nohup java -Dfile.encoding=UTF-8 -jar $JarDir$JarFile \
  -Xmx1024m -Xms1024m \
  --spring.config.location=${JarDir}application.yml \
  --spring.config.location=${JarDir}application.properties >> $LogDir$OutFile &

echo "启动 $JarFile..." >> $LogDir$OutFile
sleep 3s

# 实时显示日志
tail -f $LogDir$OutFile

3. 编写Dockerfile

下面是Dockerfile的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 基于指定版本的Java镜像
FROM jdk:1.8.0_432  # Java版本

# 添加Java应用的JAR包到容器中
ADD demo-0.0.1-SNAPSHOT.jar /ywc/zb/demo-0.0.1-SNAPSHOT.jar

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

# 添加配置文件
ADD application.properties /ywc/zb/application.properties

# 添加启动脚本
ADD start_1.sh /ywc/zb/start_1.sh

# 设置工作目录
WORKDIR /ywc/zb

# 暴露应用端口
EXPOSE 18080

# 赋予启动脚本可执行权限
RUN chmod +x /ywc/zb/start_1.sh

# 指定启动容器时运行的命令
ENTRYPOINT ["./start_1.sh"]

4. 构建镜像并运行容器

文件名字:demo-api

版本: 1.0

  1. 构建Docker镜像
  2. 使用以下命令构建镜像:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t demo-api:1.0 .

运行Docker容器

18080 端口 运行容器并映射端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -p 18080:18080 demo-api:1.0

如果需要进入容器调试,可以运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   docker run -it demo-api:1.0 /bin/bash

5. 验证应用运行

访问容器暴露的端口,确保应用正常运行。例如,如果应用监听在18080端口,可以通过浏览器访问 http://<服务器IP>:18080

总结

通过以上步骤,你已经成功使用Docker打包并运行了一个Java应用镜像。这种方式可以极大地简化应用部署流程,并提高运行环境的稳定性。

参考资料

如果你在操作中遇到任何问题,欢迎随时加我的微信(默语小助手),一起交流学习!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Jenkins使用pipeline自动打包Docker镜像
使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发Jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好。
别团等shy哥发育
2023/03/01
2.8K0
Jenkins使用pipeline自动打包Docker镜像
Spring boot(4)-应用打包部署
Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。
黄规速
2022/04/14
1.5K0
Spring boot(4)-应用打包部署
怎么把一个Java应用打包成Docker镜像
怎么把Java应用打包成Docker镜像?对熟悉Docker的同学这应该是一个很简单的问题,把项目打包成JAR包然后在Dockerfile里用ADD命令把JAR文件放到镜像里,启动命令设置执行这个JAR文件即可。
KevinYan
2021/09/02
2K0
Docker化Spring Boot3应用:从镜像构建到部署
随着容器化技术的发展,越来越多的应用采用了容器化部署的方式。容器化部署极大地减少了因部署环境不同带来的差异,实现了一次构建、随处运行的效果。此外,容器化还具有版本管理、快速启动、持续集成等优点。今天,我们将介绍如何在Linux上通过命令行构建和运行Spring Boot 3服务的镜像。
修己xj
2024/05/22
7620
Docker化Spring Boot3应用:从镜像构建到部署
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
程序员鹏磊
2018/01/11
1.5K0
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
Docker下ELK三部曲之二:细说开发
本章是《Docker下ELK三部曲》的第二篇,之前的《Docker下ELK三部曲之一:极速体验》部署了ELK,还有一个web应用可以将日志上报到ELK,然后在Kibana提供的页面查询到了日志,今天我们一起深入细节,看看上述服务是如何实现的;
程序员欣宸
2022/05/09
7250
Docker下ELK三部曲之二:细说开发
Spring boot with Docker
本文节选自 《Netkiller Linux 手札》 163.6.1. Spring boot with Docker 163.6.1.1. 获取 CentOS 7 镜像 docker pull centos:7 # docker pull centos:7 7: Pulling from library/centos 343b09361036: Pull complete Digest: sha256:bba1de7c9d900a898e3cadbae040dfe8a633c06bc104a0df7
netkiller old
2018/03/05
7120
Docker学习笔记(2):使用Dockerfile构建镜像
Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本。每条指令都必须为大写字母且后面要跟随至少一个参数,每条指令都会创建一个新的镜像层,并对镜像进行提交。
布禾
2020/10/29
5980
Docker学习笔记(2):使用Dockerfile构建镜像
【Dockerfile】将自己的项目构建成镜像部署运行
常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。
陶然同学
2023/11/27
2.5K0
【Dockerfile】将自己的项目构建成镜像部署运行
K8s 集群使用 ConfigMap 优雅加载 Spring Boot 配置文件
我们知道 Spring Boot 工程默认的配置文件名称为 application.properties,SpringApplication 将从以下位置加载 application.properties 文件,并把它们添加到 Spring Environment 中:
哎_小羊
2019/05/25
6.2K0
Docker快速入门到项目部署
run 就是子命令。docker下面有很多子命令,run是其中一个。创建并运行一个容器。
用户11288958
2025/01/17
3110
Docker快速入门到项目部署
从0到1实现项目Docker编排部署
在深入讨论 Docker 编排之前,首先让我们了解一下 Docker 技术本身。Docker 是一个开源平台,旨在帮助开发者自动化应用程序的部署、扩展和管理。自 2013 年推出以来,Docker 迅速发展成为现代软件开发和运维领域不可或缺的重要工具。
努力的小雨
2024/10/18
2800
【Docker】自定义镜像与Compose
1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像
陶然同学
2023/02/27
2.3K0
【Docker】自定义镜像与Compose
docker镜像多阶段构建的原理以及好处
Docker是一种流行的容器化技术,可用于构建和部署应用程序。Docker镜像是一种轻量级、可移植和自包含的应用程序打包方式。Docker多阶段构建是一种构建Docker镜像的高效方式,可以减少镜像大小并提高构建速度。本文将讨论Docker多阶段构建的原理、好处以及给出例子。
堕落飞鸟
2023/03/26
3.6K0
【Java】程序制作Docker镜像 推荐方案
随着我们分布式的观念在各个领域使用,docker容器也逐渐的背大家所认可和使用,那么我们想制作容器就得有镜像如何制作镜像呢?请往下看,Dockerfile就是制作镜像的原始武器: Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。
瑞新
2021/12/06
2K0
【Java】程序制作Docker镜像 推荐方案
容器 & 服务:一个 Java 应用的 Docker 构建实战
系列文章的前面几篇,介绍了一些基础概念和Jenkins的docker部署、构建实例,本篇将开始做第一个demo应用,使用idea的docker插件对Java应用执行构建、发布。
程序员架构进阶
2021/03/04
4530
容器 & 服务:一个 Java 应用的 Docker 构建实战
IDEA 打包docker镜像详解
1.下载docker 插件 2.配置连接docker Edit Configurations 添加Dockerfile 后面那个是容器端口 3.编写Dockerfile 放在项目根目录 FROM java:8 #作者 MAINTAINER xu #声明一个挂载点,容器内此路径会对应宿主机的某个文件夹 VOLUME /tmp #复制上下文目录下的target/demo-1.0.0.jar 到容器里 COPY target/demo-0.0.1.jar demo-0.0.1.jar #ba
smallmayi
2022/05/12
1.4K0
IDEA 打包docker镜像详解
SpringAI+Ollama三部曲之二:细说开发
程序员欣宸
2024/05/26
2.6K0
SpringAI+Ollama三部曲之二:细说开发
03. 自定义镜像 & Dockerfile
在前面章节中docker部署的nginx或者tomcat都是镜像仓库中已有的镜像,或是别人已经开发好的镜像。那么,在实际项目中,我们除了使用已有的镜像外,还有我们自己构建的镜像,比如项目的基础服务应用等等。
有一只柴犬
2023/08/23
2320
03. 自定义镜像 & Dockerfile
用docker部署jar包_docker run 参数
我们构建的是运行bash文件命令的镜像,而不是构建jar包的镜像。好处就是,jar包有更新,只需替换jar包或者bash文件,而无须重新构建镜像。
全栈程序员站长
2022/11/10
1.9K0
相关推荐
Jenkins使用pipeline自动打包Docker镜像
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验