docker部署jar包项目(看这一篇入门)

我用于记录命令和流程
 

1部署流程

 1.1maven打包
        这个没啥可说的,正常打可运行jar包就行

1.2上传服务地址
        将jar不管啥方式传到要部署的服务器上,一般都是xshell,xftp
1.3建立dockerfile
        在上传的jar包位置创建Dockerfile文件

        这里要注意:
        文件名字一定是首字母大写并且保持一致,不要创新!!!!!
        Dockerfile和jar包一定在一个层级目录!!!!!!!!!!

这里建议最好是新建一个文件夹
如下图:


Dockerfile内容:

 

# 基础镜像使用java
FROM java:8
# 作者 名字 邮箱 (可以不写)
MAINTAINER lixilin <15133119533@163.com>  
# 将jar包添加到容器中并更名为app.jar
ADD network-0.0.1-SNAPSHOT.jar app.jar 
# 运行端口
EXPOSE 11530 
# 启动命令,加载指定路径的配置文件
ENTRYPOINT ["java","-jar","app.jar","--spring.config.location=/config/application.yml"]
## 设置所属时区
ENV TZ=Asia/Shanghai
## 创建本地和容器的连接
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

PS:

(1)这里会出现一个镜像去多个客户部署的情况,这种就需要动态修改配置文件

这个时候需要加上指定配置路径

ENTRYPOINT ["java","-jar","app.jar","--spring.config.location=/config/application.yml"]

(2)设置时区,如果不设置时区,查看日志的时候你会发现时间相差八小时。。原因是因为默认使用的0时区的时间。

所以需要指定时区和时间

正常情况下面这个配置就可以生效

ENV TZ=Asia/Shanghai   

如果上面配置不生效可以使用下面

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

将服务器的时间目录复制到容器内部

1.4打包镜像

必须要有docker环境才能打包啊,这肯定是前提

一般你去部署都是有docker的,也有别人去部署你提供镜像的情况

这个时候就需要在本地安装一个docker,然后去自己打包成镜像然后给部署的人

默认是有docker环境

前提:cd /usr/local/java_project/network 目录下

命令:注意不要少后边的 '.' 不然会报错

docker build -t  你的镜像名称(一般是你的项目名+版本).


docker build -t network-0.0.1 .

不出意外的话就是下图

docker会一层一层去执行。这里会有一种情况,当你的docker没有java8的基础镜像时候需要等docker下载之后再执行时间会长一些。第二次就不会出现了
1.5运行镜像

 命令:

使用内部配置文件的启动命令

#--restart=always  [docker重启之后自动启动]
# --name network-0.0.1 [运行时候的名字,docker ps能查到的]
# -p 10530:11530 [外部请求的端口:容器内部端口dockerfile规定的端口]
# network-0.0.1:latest  是你上一步打包镜像时候的名字:是你的镜像版本(默认)
docker run -d --restart=always --name network-0.0.1 -p 10530:11530 network-0.0.1:latest

使用指定目录下的配置文件启动命令(就是多一个挂载目录)把目录映射出来

#--restart=always  [docker重启之后自动启动]
# --name network-0.0.1 [运行时候的名字,docker ps能查到的]
# -p 10530:11530 [外部请求的端口:容器内部端口dockerfile规定的端口]
# network-0.0.1:latest  是你上一步打包镜像时候的名字:是你的镜像版本(默认)
docker run -d --restart=always --name network-0.0.1 -p 10530:11530  -v /usr/local/java_project/network:/config -v /etc/localtime:/etc/localtime network-0.0.1:latest

后边的挂载是防止打包镜像时的时区不生效,再次将时间改成当前时间

运行顺利的话就会是返回这个运行镜像的id

不确定的话用docker ps 看一下

2.这里会有几个常见问题

1.端口占用

 如图所示他会告诉你那个镜像用的这个端口

解决办法:换个端口就行,如果不知道具体那些端口占用的话

docker ps 查看一下运行的镜像的信息,找一个没用的就行,容器内部端口不用管,只需要宿主机的端口唯一就行

2.重名问题

如图会告诉你这个名字已经被用了

解决方法:改个名字加上版本号就行(简单暴力)

还有一个方法就是你能确定这个同名镜像是自己的直接把镜像停了。(一定确定是自己管理的项目)

docker stop 镜像id/名字

3.如何查询项目日志

使用docker的查看容器日志命令

docker logs --tail 300 -f efe348fc21e1

还有个方法是将日志文件映射到外部来

4.删除镜像 (慎用

当你第二次部署同一个项目的时候你也不想打那么多的同名类似的镜像时候使用(慎用

docker rmi e4d5e864dc86

如非必要不要使用,一定要看清楚id是不是自己的镜像别删错了就等着挨枪子把。

名字重名了直接加个版本号或者时间都是可以的如非必要不要乱用

5.比较重要的一点导出自己的镜像

使用场景:项目需要迁移,或者去用户现场部署,或者交给运维人员部署都要用到

先查询自己的镜像的id

docker images

 复制id并导出

docker save -o network-0.0.1.tar network-0.0.1:latest

如果没有报错的情况下去你的物理机上看下是不是已经导出了

 6.导入加载镜像

进入到你导出的镜像目录,或者直接写全路径

docker load -i my.tar
或者
docker load -i /home/my.tar

再看一下镜像列表 docker images 

<think>好的,我现在需要帮助用户了解如何将Java项目部署Docker容器中。首先,我需要回顾用户提供的引用内容,确保回答准确。 用户提供了四个引用,主要涉及Dockerfile的编写、构建镜像、部署时的参数设置以及可能出现的错误。例如,引用[1]提到使用Docker构建Java镜像并部署,引用[2]提到上传jarDockerCompose文件,引用[3]涉及构建错误,引用[4]有关于运行时的JVM参数设置。 用户的问题是“如何将Java项目构建镜像并部署Docker”,所以需要分步骤说明。首先,准备阶段需要确保项目可打jar,安装Docker环境。然后,编写Dockerfile,基础镜像选择openjdk,拷贝jar,设置入口点。可能还需要处理依赖和资源文件,如引用[3]中的路径问题,要确保路径正确。 接下来,构建镜像的命令是docker build,可能需要注意上下文路径,避免出现文件找不到的错误,如引用[3]提到的路径错误。然后,运行容器时,可能需要映射端口、挂载日志目录,设置JVM参数,如引用[4]中的例子。用户可能还需要使用Docker Compose来简化多容器管理,如引用[2]提到的DockerCompose文件。 此外,常见问题比如构建失败,需要检查Dockerfile的路径和文件是否存在,挂载目录的权限是否正确。同时,优化镜像大小,比如使用多阶段构建,或者选择更小的基础镜像,比如alpine版本。 需要确保回答结构清晰,分步骤说明,每个步骤给出示例代码,并引用相关引用内容。例如,在编写Dockerfile时引用[4]中的JVM参数设置,或者在构建镜像时提到引用[3]中的错误避免方法。 最后,生成相关问题,可能涉及优化方法、部署参数、错误解决等,参考用户提供的引用内容中的问题点,如性能优化、Docker Compose使用等。</think>### 分步指南:Java项目构建Docker镜像并部署 #### 一、环境准备 1. **项目** 确保Java项目使用Maven/Gradle生成可执行的`jar`,例如`target/app.jar`[^2][^4]。 2. **安装Docker** 在Linux服务器或本地开发环境安装Docker引擎,验证安装: ```bash docker --version ``` --- #### 二、编写Dockerfile 在项目根目录创建`Dockerfile`文件,内容示例如下: ```dockerfile # 使用OpenJDK作为基础镜像 FROM openjdk:17-jdk-slim # 设置工作目录 WORKDIR /app # 复制项目jar和配置文件 COPY target/app.jar ./app.jar COPY src/main/resources/application.properties ./config/ # 暴露端口(与项目配置一致) EXPOSE 8080 # 启动命令(可注入JVM参数) ENTRYPOINT ["java", "-jar", "app.jar"] ``` **关键点说明** - 基础镜像推荐使用`openjdk:17-jdk-slim`或`alpine`版本减小体积 - 若需自定义JVM参数,可通过`-e "JAVA_OPTS=..."`注入 - 配置文件建议通过挂载卷(`-v`)实现动态修改[^2] --- #### 三、构建Docker镜像 在`Dockerfile`所在目录执行构建命令: ```bash docker build -t my-java-app:1.0.0 . ``` **注意事项** - 确保`COPY`指令中的路径与项目实际路径一致,否则会报`no such file or directory`错误[^3] - 镜像标签建议遵循`名称:版本`格式 --- #### 四、运行容器 ```bash docker run -d \ --name java-app \ -p 8080:8080 \ -v /host/logs:/app/logs \ -e "JAVA_OPTS=-Xms512m -Xmx1024m" \ my-java-app:1.0.0 ``` **参数说明** - `-p`:映射容器端口到宿主机 - `-v`:挂载日志目录(避免容器删除后日志丢失) - `-e`:传递JVM参数(覆盖`Dockerfile`中的默认配置) --- #### 五、使用Docker Compose(可选) 创建`docker-compose.yml`简化多容器管理: ```yaml version: '3' services: java-app: image: my-java-app:1.0.0 ports: - "8080:8080" volumes: - /host/logs:/app/logs environment: - JAVA_OPTS=-Xms512m -Xmx1024m ``` 启动服务: ```bash docker-compose up -d ``` --- #### 六、验证与调试 1. **查看容器状态** ```bash docker ps -a ``` 2. **查看日志** ```bash docker logs java-app ``` 3. **进入容器排查问题** ```bash docker exec -it java-app /bin/sh ``` --- ### 常见问题解决 1. **构建失败:文件路径错误** 错误信息如`failed to walk /var/lib/docker/tmp/...`时,检查`Dockerfile`中`COPY`路径是否正确。 2. **JVM参数未生效** 确保`ENTRYPOINT`使用`exec`格式(JSON数组),例如: ```dockerfile ENTRYRYPOINT ["java", "${JAVA_OPTS}", "-jar", "app.jar"] ``` 3. **镜像体积过大** 使用多阶段构建: ```dockerfile # 构建阶段 FROM maven:3.8.6 AS build COPY . . RUN mvn package # 运行阶段 FROM openjdk:17-jdk-slim COPY --from=build /target/app.jar ./app.jar ENTRYPOINT ["java", "-jar", "app.jar"] ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值