构建自定义Docker镜像部署Jar包

简介: 构建自定义Docker镜像部署Jar包

为了能正常地使用Docker容器,需要先安装Docker和Docker compose,如何安装可以查看Docker、Docker compose的安装

文件布局

在相关工具都安装完毕后,为了顺利构建自定义Docker镜像,我们需要准备以下文件:

  • JDK11,可在oracle官网下载,需要注册oracle账号。百度网盘自取 密码:6lo7
  • Dockerfile,这个需要我们自己编写,用来构建自定义容器
  • Jar包,对应的应用程序Jar包,需要自己打好
  • docker-compose,用来运行容器,相当于包装了docker命令的工具

以上四个文件全部在同一个文件夹下面。

编写Dockerfile文件

Dockerfile

# 基础镜像
FROM centos:7
# 作者,建议写自己的邮箱
LABEL maintainer="zouwei"
# 把jar包拷贝进镜像内指定路径下
COPY jtt808-server.jar /root
# 把jdk拷贝到指定路径下
COPY jdk-11.0.16_linux-x64_bin.tar.gz /usr/local/
# 执行tar解压缩命令,把jdk解压缩到/usr/local/路径下
RUN tar -zxvf /usr/local/jdk-11.0.16_linux-x64_bin.tar.gz -C /usr/local/
# 配置java环境变量
ENV JAVA_HOME /usr/local/jdk-11.0.16/
ENV PATH $JAVA_HOME/bin:$PATH
# 设置容器启动命令
ENTRYPOINT ["nohup","java","-jar","-Dfile.encoding=UTF-8","/root/jtt808-server.jar","&"]
复制代码

上面的文件名称默认就是"Dockerfile",没有任何后缀。

文件内容中的"jtt808-server.jar"可以替换成自己的jar文件;对应的作者也请改成自己。在启动命令中,可以根据自己的实际情况补充其他参数,比如jvm的配置参数等等。

编写docker-compose.yml

docker-compose.yml

version: "3.2"
services:
  jt808:
    # build表示需要构建自己的镜像,.代表从当前文件夹中查找Dockerfile文件
    build: .
    # 容器名称
    container_name: "jt808_server"
    ports:
      # 容器需要对外透露的端口
      - "8000:8000"
      - "7611:7611"
      - "7612:7612"
    # 容器挂了是否重启
    restart: always
    volumes:
      #设置系统时区
      - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
      #设置时区
      - "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"
复制代码

构建镜像

docker-compose.yml编写完毕后,需要通过以下命令先构建自定义的Docker镜像:

docker-compose build
复制代码

该命令一定要在docker-compose.yml所在文件夹的路径执行。任何修改了Dockerfile文件的操作都需要重新构建该镜像。

启动服务

镜像构建完毕后,我们可以通过下面的命令把对应的容器实例启动起来:

docker-compose up
复制代码

此时控制台会打印应用程序的启动日志。

如果需要让该应用程序在后台线程启动,可以使用以下命令:

docker-compose up -d
复制代码

完成上面步骤,我们就完成了通过自定义构建的镜像部署了自己的jar包。

思路2

在上面这个方案当中,我们发现每次构建镜像都要把jdk拷贝进去,本质上jdk是永远不需要我们手动修改的,所以在思路2中我们需要做的优化就是:

  • 通过Dockerfile构建一个只有jdk的镜像,暂时先不把jar包放进去;
  • 把构建好的镜像上传到云端仓库;可上传阿里云或私人仓库;
  • 通过Dockerfile基于云端仓库镜像构建新镜像,这个新镜像每次构建只需要COPY jar包进去;
  • docker-compose.yml可不修改

通过提前构建好的java镜像,我们以后都可以在任意网络允许的服务器上运行jar包,不再需要去下载jdk安装包了。


相关文章
|
5天前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
152 91
|
6天前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
13天前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
72 44
|
21天前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
25天前
|
SQL Java Maven
docker部署apollo
docker部署apollo步骤
|
Linux Docker Windows
Docker概述:什么Docker如此特别,它是如何构建的
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
1384 0
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
131 15
|
6天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
41 23
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
225 93
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
63 17