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

相关推荐
东方未明01081 小时前
docker(一)前言:高并发服务端技术架构的演进
docker·性能优化·高并发·虚拟化·容器化
yt948324 小时前
Docker-基础(数据卷、自定义镜像、Compose)
运维·docker·容器
Hfc.5 小时前
docker-daemon.json
docker·容器·json
和计算机搏斗的每一天5 小时前
k8s之探针
云原生·容器·kubernetes
项目題供诗11 小时前
黑马k8s(四)
云原生·容器·kubernetes
杰克逊的日记11 小时前
大项目k8s集群有多大规模,多少节点,有多少pod
云原生·容器·kubernetes
小张童鞋。11 小时前
k8s之k8s集群部署
云原生·容器·kubernetes
luck_me511 小时前
k8s v1.26 实战csi-nfs 部署
linux·docker·云原生·容器·kubernetes
邪恶的贝利亚11 小时前
《Docker 入门与进阶:架构剖析、隔离原理及安装实操》
docker·容器·架构
一直学下去12 小时前
K8S中构建双架构镜像-从零到成功
容器·kubernetes·cicd·多架构