docker部署可执行的jar

1.将项目打包,上传到服务器的指定目录

2.在该目录下创建Dockerfile文件

3.Dockerfile写入如下指令

复制代码
# 基于哪个镜像
FROM java:8
# 拷贝文件到容器,也可以直接写成ADD xxxxx.jar /app.jar
ADD springboot-file-0.0.1.jar file.jar
RUN bash -c 'touch /file.jar'
# 声明需要暴露的端口
EXPOSE 8018
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/file.jar"]

其中指令的含义:

  • FROM:基础镜像,FROM java:8 指的是拉取一个jdk1.8的镜像
  • MAINTAINER:作者,MAINTAINER demo 作者是demo
  • ADD: 将打包的可执行jar包复制到镜像中并重命名(用 COPY 也可),ADD springboot-file-0.0.1.jar file.jar 将pringboot-file-0.0.1.jar 复制到镜像中并重命名为 file.jar
  • EXPOSE: 声明端口
  • ENTRYPOINT : 容器启动之后执行的命令,java -jar file.jar 即启动jar

4.创建好Dockerfile文件之后,执行命令构建镜像

注意:-t 后面的文件名与Dockerfile中重命名后的文件名保持一致

docker build -t file .

构建成功后可以使用docker images命令查看镜像。

5.镜像构建成功之后,就可以运行容器

docker run -d --restart=always --name file -p 8080:8080 file

其中参数的含义:

  • -d :后台运行容器,并返回容器ID
  • --restart=always :容器在停止或服务器开机之后会自动重新启动
  • -p :指定端口映射
  • 最后的 file指定镜像
  1. 启动容器后可以使用 docker ps命令查看启动的容器
  2. docker logs --tail 300 -f 容器id ,可以查看服务的日志。
  3. 如果想更新jar包,只需要使用docker cp file-0.0.1-SNAPSHOT.jar 容器ID:/file.jar,就可以将file-0.0.1-SNAPSHOT.jar拷贝进容器并重命名,然后 docker restart 容器ID 重启容器。

6.在浏览器访问测试的url

指定端口映射为8018

访问探针接口http://192.168.110.105:8018/test/say

到这里,docker 部署可执行文件就成功了

7.注意事项

7.1.推荐的删除镜像和容器的方法

**优雅地删除镜像的最佳做法是:先停止容器,再删除容器,最后删除镜像

优雅地删除容器的最佳做法是:先停止容器,再删除容器。**

复制代码
#查看容器
docker ps
#停止容器
docker stop 容器名称或ID
#删除容器
docker rm 容器名称或容器ID

#查看镜像
docker images
#删除镜像
docker rmi 镜像id

7.2. 端口问题

注意Dockerfile文件中的端口与docker run保存一致,最好与jar包的端口一致

7.3.因运存不足无法给进程分配更多的文件句柄数而异常退出

docker 启动报错 library initialization failed - unable to allocate file descriptor table - out of memory

因运存不足无法给进程分配更多的文件句柄数而异常退出

原运行指令

docker run -d --restart=always --name file -p 8018:8018 file

1

改为

docker run --ulimit nofile=1024 -d --restart=always --name file -p 8018:8018 file

相关推荐
代码小学僧28 分钟前
通俗易懂:给前端开发者的 Docker 入门指南
前端·docker·容器
运维潇哥29 分钟前
k8s业务程序联调工具-KtConnect
云原生·容器·kubernetes
欧先生^_^34 分钟前
让 Kubernetes (K8s) 集群 使用 GPU
云原生·容器·kubernetes
饺子大魔王的男人2 小时前
Docker环境下FileRise私有云盘在飞牛NAS的部署与穿透实践
运维·docker·容器
Lw老王要学习4 小时前
Linux容器篇、第一章_02Rocky9.5 系统下 Docker 的持久化操作与 Dockerfile 指令详解
linux·运维·docker·容器·云计算
橙子小哥的代码世界4 小时前
【大模型RAG】Docker 一键部署 Milvus 完整攻略
linux·docker·大模型·milvus·向量数据库·rag
颜淡慕潇6 小时前
【K8S系列】Kubernetes 中 Pod(Java服务)启动缓慢的深度分析与解决方案
容器·kubernetes·pod
默心6 小时前
华为云上的K8S怎么使用对象存储配置pod文件持久化。
容器·kubernetes·华为云
955.6 小时前
k8s从入门到放弃之DaemonSet控制器
云原生·容器·kubernetes