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

相关推荐
小Pawn爷20 分钟前
实战演练:玩转k8s
云原生·容器·kubernetes
春日见3 小时前
E2E自驾规控30讲:环境搭建
开发语言·驱动开发·matlab·docker·计算机外设
.生产的驴3 小时前
1Panel实战|SpringColud微服务部署生产环境一键部署Docker+Nacos+MySQL 数据定时备份 控制台 安全高效易维护
服务器·后端·mysql·spring cloud·docker·微服务·信息可视化
Exquisite.4 小时前
Docker容器技术
docker·容器·eureka
ai产品老杨4 小时前
异构计算时代的架构突围:基于 Docker 的 AI 视频平台如何实现 X86/ARM 与 GPU/NPU 全兼容(源码交付)
人工智能·docker·架构
Riemann~~4 小时前
dockerfile解析
docker·dockerfile
Sephiroth.Ma5 小时前
Mac 提示“Docker 已损坏,无法打开”?我这样排查后 10 分钟修好
macos·docker·容器
是店小二呀6 小时前
Docker部署EasyNode+内网穿透:轻松实现服务器远程管理
服务器·docker·容器
一招定胜负6 小时前
在 Windows 11 家庭版安装 Docker Desktop解决虚拟化问题
运维·docker·容器
i建模6 小时前
Docker API 版本冲突问题
运维·docker·容器