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

相关推荐
星火s漫天31 分钟前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
MonkeyKing_sunyuhua2 小时前
docker compose up -d --build 完全使用新代码打包的方法
docker·容器·eureka
醇氧3 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
技术路上的探险家3 小时前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker
70asunflower7 小时前
用Docker创建不同的容器类型
运维·docker·容器
小Pawn爷7 小时前
3.Dockerfile
docker
CodeGolang7 小时前
Docker容器化部署Zabbix监控系统完整指南
docker·容器·zabbix
忆~遂愿8 小时前
Runtime 上下文管理:计算实例的生命周期、延迟最小化与上下文切换优化
java·大数据·开发语言·人工智能·docker
lpruoyu18 小时前
【Docker进阶-03】存储原理
docker·容器
文静小土豆19 小时前
Docker 与 containerd 代理配置详解:镜像拉取速度慢的终极解决方案
运维·docker·容器