docker部署运行jar包

CentOS部署Java应用Docker镜像
本文详细介绍了如何在CentOS8上使用Docker部署Java应用,包括上传jar包、编写Dockerfile、构建镜像、启动容器、解决常见问题等步骤。

版本: CentOS Linux release 8.0.1905 (Core)

docker version 19.03.3

1.上传jar包到服务器上

这是我上传到服务器上的jar包
在这里插入图片描述

2 在当前目录下编写Dockerfile文件

vi Dockerfile

#依赖的父镜像
FROM java:8
#作者
MAINTAINER fanzhuoxi
#jar包添加到镜像中
ADD firstjob.jar first.jar
#容器暴露的端口 即jar程序在容器中运行的端口
EXPOSE 8080
#容器启动之后要执行的命令
ENTRYPOINT ["java","-jar","first.jar"]

在这里插入图片描述

3. 构建镜像

命令最后有个点

docker build -t fzx/first .

在这里插入图片描述

4.查看镜像

fzx/first 是刚才构建的镜像
java是父镜像,是从docker官方仓库中下载来的
在这里插入图片描述

5.启动容器

#记得将宿主机的本地时间绑定到容器中去,不然因为容器中时区于服务器的不一致,出现一些问题
docker run -d --name myfirst -p 8080:8080 --privileged=true -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime fzx/first

在这里插入图片描述

6. 查看docker进程

docker ps

在这里插入图片描述

7.查看docker容器 运行日志

docker logs 容器id(就是docker ps 结果中的CONTAINER ID )

docker logs 24dc331ca975

在这里插入图片描述

8.试着访问下,没问题

在这里插入图片描述

9.可能存在问题,
(1)第5步docker run -d --name myfirst -p 8080:8080 fzx/first 执行成功了,执行第6步时没有相应进程。一般是项目代码启动有问题。可以通过 docker ps -a 命令查看所有的容器,可以找到启动的容器,然后通过docker logs 容器id 查看下日志
(2)启动出现问题,重新上传了jar包后
要执行以下操作,
先删除容器 docker rm 容器id
再删除镜像 docker rmi 镜像id (镜像id通过docker images查看)
然后重新构建镜像并启动容器(参照从第3步开始)
OK,结束!

上一篇 centos安装docker
相关操作:
idea打jar包

<think>首先,用户的问题是关于在Docker容器中部署Java应用的JAR。我需要根据系统级指令来构建我的回答。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户的问题:"我想在Docker容器中部署Java应用的JAR 请问如何使用Docker容器部署Java JAR" 参考站内引用: - 引用[1]: 展示了Dockerfile的示例,使用Java 8镜像,添加JAR,暴露端口,入口点运行JAR。 - 引用[2]: 类似,添加JAR,暴露端口,入口点。 - 引用[3]: 提到了处理多个JAR的情况。 - 引用[4]: 使用openjdk:8镜像,复制JAR,暴露端口运行JAR。 这些引用提供了Dockerfile的示例,我应该参考这些来构建我的回答。 回答结构: 1. **介绍**:简要解释为什么使用Docker部署Java应用。 2. **步骤**:逐步指导如何创建Dockerfile、构建镜像、运行容器。 3. **示例**:提供一个完整的Dockerfile示例和命令。 4. **注意事项**:提及常见问题,如端口映射、文件复制。 5. **相关问题**:生成相关问题。 使用中文回答。 在回答中,如果引用段落,末尾添加引用标识。但用户提供的引用是站内的,所以我应该自然地引用它们。 步骤: 1. 创建Dockerfile。 2. 编写Dockerfile内容。 3. 构建Docker镜像。 4. 运行Docker容器。 确保LaTeX语法正确:由于是Docker部署,可能没有数学表达式,但如果有任何数学相关内容,用$...$格式。这里可能不涉及数学,所以可能不需要。 生成相关问题:在回答末尾,添加相关问题部分。 完整回答: - **标题**:使用Docker部署Java JAR - **步骤**: 1. 准备Dockerfile。 2. 构建镜像。 3. 运行容器。 - **示例代码**:提供Dockerfile和命令。 - **引用**:自然地引用提供的引用。 相关问题: 1. 如何处理多个JAR? 2. 如何优化Docker镜像大小? 3. 如何配置环境变量? 基于引用[3],提到了多个JAR。 最终回答结构: - 开头介绍。 - 详细步骤。 - 示例。 - 注意事项。 - 相关问题。</think>### 使用Docker部署Java JARDocker容器中部署Java应用的JAR是一种高效、可移植的解决方案。它通过容器化技术隔离应用环境,确保在不同系统上一致运行。以下是基于最佳实践的逐步指南,参考了站内相关资源[^1][^2][^4]。整个过程括创建Dockerfile、构建镜像和运行容器,我们以部署一个名为`app.jar`的Java应用为例(应用端口为8080)。 #### 步骤1: 准备Dockerfile Dockerfile是定义容器环境的脚本文件。创建一个新文件`Dockerfile`(无后缀名),并添加以下内容。关键点括: - **基础镜像**:使用Java运行时环境(如`openjdk:8`或`java:8`),确保与你的Java版本兼容。 - **复制JAR**:将本地的JAR文件复制到容器内指定路径。 - **暴露端口**:指定应用在容器内监听的端口(如8080)。 - **入口点**:定义容器启动时自动执行的命令(`java -jar`运行JAR)。 示例Dockerfile: ```dockerfile # 使用Java 8作为基础镜像 FROM openjdk:8 # 设置工作目录(可选,但推荐) WORKDIR /app # 复制宿主机当前目录下的JAR到容器内(假设JAR名为app.jar) COPY app.jar /app/app.jar # 暴露容器端口(应用端口) EXPOSE 8080 # 容器启动时运行JAR ENTRYPOINT ["java", "-jar", "/app/app.jar"] ``` **说明**: - `COPY`指令将本地JAR复制到容器内(路径如`/app/app.jar`),确保JARDockerfile同一目录下[^1][^4]。 - `EXPOSE`定义容器内部端口,但需在运行时映射到宿主机端口[^2][^3]。 - `ENTRYPOINT`使用数组格式指定命令,避免shell解析问题[^1][^4]。 #### 步骤2: 构建Docker镜像 在终端中,导航到Dockerfile所在目录,运行构建命令。镜像名称(如`my-java-app`)可自定义: ```bash docker build -t my-java-app . ``` - `-t my-java-app`:为镜像指定标签(名称)。 - `.`:表示当前目录(Dockerfile位置)。 - **输出**:成功构建后,使用`docker images`验证镜像是否列出。 #### 步骤3: 运行Docker容器 基于镜像启动容器,将容器端口映射到宿主机端口(如宿主机8080映射到容器8080): ```bash docker run -d -p 8080:8080 --name java-container my-java-app ``` - `-d`:后台运行容器(detached模式)。 - `-p 8080:8080`:端口映射(宿主机端口:容器端口)。 - `--name java-container`:指定容器名称(可自定义)。 - **验证**:使用`docker ps`检查容器状态;访问`http://localhost:8080`测试应用。 #### 注意事项 - **JAR路径**:确保`COPY`指令中的JAR文件名与实际一致(如`app.jar`)。如果JAR在子目录,需调整路径[^1][^4]。 - **端口冲突**:如果宿主机端口8080被占用,修改`-p`参数(如`-p 8090:8080`)。 - **多JAR处理**:如果应用依赖多个JAR,使用`COPY`指令复制整个目录(如`COPY libs/ /app/libs/`),并在`ENTRYPOINT`中指定类路径[^3]。 - **镜像优化**:使用多阶段构建(multi-stage build)减小镜像大小,例如从基础镜像编译后复制JAR到轻量镜像。 - **环境变量**:可通过`ENV`指令设置环境变量(如`ENV JAVA_OPTS="-Xmx512m"`),并在`ENTRYPOINT`中引用[^2]。 - **日志查看**:运行`docker logs java-container`调试应用输出。 此方法确保Java应用在隔离环境中运行,便于扩展和维护。参考示例基于实际部署案例[^1][^2][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值