使用Dockerfile打包java项目生成镜像部署到Linux

news2024/12/23 19:42:15

1、Dockerfile 介绍

如果说容器就是“小板房”,镜像就是“样板间”。那么,要造出这个“样板间”,就必然要有一个“施工图纸”,由它来规定如何建造地基、铺设水电、开窗搭门等动作。这个“施工图纸”就是“Dockerfile”。

比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤,最后就会创建出一个新的镜像出来。

2、编写java项目对应的Dockerfile

# 使用 OpenJDK 8 作为基础镜像
FROM openjdk:8-jdk-alpine

# 作者信息
LABEL maintainer="flgb"

# 设置环境变量
ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
    JAVA_OPTS="-Xms2048m -Xmx2048m -Dspring.profiles.active=prod -Dserver.port=6088"\
    PORT=6088
# spring-boot-admin.jar相对于Dockerfile的路径
COPY /spring-boot-admin.jar /spring-admin.jar

# sh shell -c 执行后面命令
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /spring-admin.jar"]

#通过 EXPOSE 命令暴露外部访问容器端口
EXPOSE $PORT

注意点

ADD 和COPY 的区别

COPY 和 ADD 都是用于将文件从主机复制到 Docker 容器内部的命令,但它们之间有一些区别:

  1. COPY 命令只能复制本地主机上的文件或目录到容器内部,不能从 URL 或者其他网络资源复制文件。而 ADD 命令可以从本地主机、URL
    或者其他网络资源复制文件。
  2. ADD 命令支持自动解压缩 tar 类型的文件(如压缩文件
    .tar、.tar.gz、.tar.bz2、.tar.xz),并将解压后的内容复制到容器内。而 COPY
    命令则只是简单地复制文件,不会自动解压缩。
  3. 由于 ADD 命令的功能更多,因此在复制文件时,建议优先使用 COPY 命令,除非需要 ADD 的特殊功能。

CMD 和 ENTRYPOINT的区别

CMD 指令

  • CMD 用于指定容器启动时要执行的命令。
  • 可以有多个 CMD 指令,但只有最后一个生效。
  • 如果 Dockerfile 中没有 CMD 指令,则默认会执行容器启动时所用的镜像的 CMD 命令。
  • CMD 指令可以被 Docker run 命令中的参数覆盖。

ENTRYPOINT 指令

  • ENTRYPOINT 用于指定容器启动时要执行的可执行文件或脚本。
    只需要运行该镜像,就会自动执行 ENTRYPOINT 指定的命令

  • 如果 Dockerfile 中存在多个 ENTRYPOINT 指令,则只有最后一个生效。

  • 在运行容器时,可以通过在 docker run 命令中指定参数来覆盖 ENTRYPOINT 中的内容。

  • 如果 Dockerfile 中同时存在 ENTRYPOINT 和 CMD 指令,则 CMD 的内容会被作为参数传递给 ENTRYPOINT
    所指定的可执行文件或脚本。

3、构建java项目镜像

docker build [OPTIONS] PATH | URL | -

其中,PATH 可以是本地文件系统上 Dockerfile 文件所在的路径,也可以是 URL,或者是 -(表示使用标准输入)。OPTIONS 是一些可选参数,常用的参数包括:

  • -t, --tag:为镜像设置一个标签,格式为 :。例如,-t myimage:1.0。
  • -f, --file:指定要使用的 Dockerfile 文件的路径。如果不指定,默认为当前目录下的 Dockerfile 文件。
  • 其他选项包括 --build-arg、–pull、–no-cache 等,可以根据需要进行设置。

例如,如果 Dockerfile 文件位于当前目录下,可以使用以下命令构建镜像并设置标签:

docker build -t spring-boot:1.0 .

上传dockerfile和spring-boot-admin jar到对应路径/data/java/spring-boot下

在这里插入图片描述

构建镜像

docker build -t spring-boot:1.0 

Build的路径问题

经常会遇到如下报错:
COPY failed: stat xxxx: no such file or directory

1、Dockerfile 文件查找不到
如果dockerfile不在当前目录,则需要指定dockerfile 目录构建

docker build -f "/data/java/spring-boot/Dockerfile" -t spring-boot:1.0 

2、Copy /spring-boot-admin.jar文件找不到的问题

COPY 命令中指定的源路径应该是相对于 Dockerfile 的路径

  • 如果 spring-boot-admin.jar 文件位于与 Dockerfile 同级的目录下,应该将 COPY 命令修改为:
COPY spring-boot-admin.jar /spring-admin.jar
  • 如果 spring-boot-admin.jar 文件位于 Dockerfile 的上级目录中,可以使用 … 来指定父级目录
COPY ../spring-boot-admin.jar /spring-admin.jar

  • PS:一开始把COPY 的路径设置成了/data/java/spring-boot/spring-boot-admin.jar一直找不到,报错:
failed to walk /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: lstat /var/lib/docker/tmp/buildkit-mount2576932656/data/java/spring-boot: no such file or directory

查看已经构建成功的镜像

docker images

4、生成容器

  • 执行命令
docker run -p 6088:6088 --name springboot --restart always \
> -d spring-boot:1.0

查看项目启动日志,启动成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySql实战--日志系统:一条SQL更新语句是如何执行的?】

前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条更新语句的执行流程又是怎…

Apache Superset

前言 最近在准备一个小的项目,需要对 Hive 的数据进行展示,所以想到了把 Hive 的数据导出到 MySQL 然后用 Superset 进行展示。 Superset 1.1 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接…

基于WTR096-28SS芯片方案的宠物喂食器实现智能化喂食功能

一、简介 本方案宠物喂食器采用了WTR096-28SS芯片方案来实现智能化的喂食功能。该方案结合了先进的技术和设计理念,提供了便捷、智能和个性化的宠物喂食解决方案。 该宠物喂食器具备定时、定量喂食功能,可以根据主人设定的时间和食物量,自动…

AI大模型与ChatGPT:开启智慧科研新篇章丨ChatGPT在地学、GIS、气象、农业、生态、环境科学等领域应用

目录 专题一 开启大模型 专题二 基于ChatGPT大模型提问框架 专题三 基于ChatGPT大模型的论文助手 专题四 基于ChatGPT大模型的数据清洗 专题五 基于ChatGPT大模型的统计分析 专题六 基于ChatGPT的经典统计模型 专题七 基于ChatGPT大模型的机器学习 专题八 ChatGPT的二次…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-ADC

ADC简介 ADC,英文全称是Analog to Digital Convert,意为模拟数字转换器,简称模数转换器,或者叫AD转换器,STM32主要是数字电路,数字电路只有高低电平,没有几V电压的概念,如果想读取电…

AI大模型额外学习一:斯坦福AI西部世界小镇笔记(包括部署和源码分析)

文章目录 一、简单介绍1)项目代码介绍2)重新播放模拟3)适当修改分叉模拟 二、部署斯坦福小镇Demo1)准备工作2)解决遇到的bug3)启动服务器和前端 三、源码剖析1)主题顺序 github链接 一、简单介…

排序算法:快速排序(非递归)

文章目录 一、先建立一个栈二、代码编写 !](https://img-blog.csdnimg.cn/direct/870dd101173d4522862e4459b32237a3.png) 先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;^ _ ^<3 ❤️ ❤️ ❤️ 码字不易&#xff0c;大家的支持就是我坚持下去的动力…

鸿蒙开发之导航栏tabs(类似Android tablayout)

当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的信息量…

ES的集群节点发现故障排除指南(1)

本文是ES官方文档关于集群节点发现与互联互通的问题排查指南内容。 英文原文&#xff08;官网&#xff09; 集群节点发现是首要任务 集群互连&#xff0c;重中之重&#xff01; 在大多数情况下&#xff0c;发现和选举过程会迅速完成&#xff0c;并且主节点会长时间保持当选状…

3个Tips,用“AI”开启新生活

相信最近&#xff0c;很多朋友们都回归到了忙碌的生活节奏中。生活模式的切换&#xff0c;或多或少会带来身体或情绪状况的起伏。新技术正在为人们生活的方方面面带来便利。3个小Tips或许能让你也从新技术中获益&#xff0c;从身到心&#xff0c;用“AI”开启新生活。 关”A…

【研究僧总结】回顾第1095个创作日

目录 前言一. 机缘二. 日常三. 展望 前言 感觉刚过1024不久&#xff0c;现在又来个1095创作日 一. 机缘 研究僧一直在找平台做笔记&#xff0c;方便之后的回顾总结&#xff0c;也让各位网友见证你我的成长&#xff0c;相互学习 止不住的写文止不住的成长&#xff0c;大家共同…

流畅的 Python 第二版(GPT 重译)(十二)

第五部分&#xff1a;元编程 第二十二章&#xff1a;动态属性和属性 属性的关键重要性在于&#xff0c;它们的存在使得将公共数据属性作为类的公共接口的一部分完全安全且确实可取。 Martelli、Ravenscroft 和 Holden&#xff0c;“为什么属性很重要” 在 Python 中&#xff0…

腾讯云优惠券怎么领?谁知道?分享一下

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

Mysql——基础命令集合

目录 前期准备 先登录数据库 一、管理数据库 1.数据表结构解析 2.常用数据类型 3.适用所有类型的修饰符 4.使用数值型的修饰符 二、SQL语句 1.SQL语言分类 三、Mysql——Create,Show,Describe,Drop 1.创建数据库 2.查看数据库 3.切换数据库 4.创建数据表 5.查看…

Linux信号补充——信号发送和保存

三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号&#xff0c;因为他是管理者&#xff1b; ​ 信号给进程的task_struct发送信号&#xff0c;在task_struct中维护了一个整数signal有0-31位&#xff0c;共32个bit位&#xff1b;对于信号的管理使用的是位图结…

阿里云2核4G服务器支持多少人在线?2C4G多少钱一年?

2核4G服务器支持多少人在线&#xff1f;阿里云服务器网账号下的2核4G服务器支持20人同时在线访问&#xff0c;然而应用不同、类型不同、程序效率不同实际并发数也不同&#xff0c;2核4G服务器的在线访问人数取决于多个变量因素。 阿里云2核4G服务器多少钱一年&#xff1f;2核4…

Python 深度学习第二版(GPT 重译)(三)

七、使用 Keras&#xff1a;深入探讨 本章涵盖 使用 Sequential 类、功能 API 和模型子类创建 Keras 模型 使用内置的 Keras 训练和评估循环 使用 Keras 回调函数自定义训练 使用 TensorBoard 监控训练和评估指标 从头开始编写训练和评估循环 您现在对 Keras 有了一些经…

水泊梁山108小坛酒之黑旋风 李逵

李逵是中国古典小说《水浒传》中的重要人物&#xff0c;李逵生的粗壮黝黑&#xff0c;绰号“黑旋风”。臂力过人&#xff0c;善使一双板斧&#xff0c;他也是一百零八将之一&#xff0c;梁山排座次时&#xff0c;位列第二十二位&#xff0c;是梁山第五位步军头领。

按面积筛选填充二值图中的孔洞-python源码

目录 &#x1f64b;&#x1f64b;需求 &#x1f345;&#x1f345;解决方案 &#x1f64b;&#x1f64b;需求 前提条件是二值图中0是背景&#xff0c;255是前景。 二值化后的影像中有很多小孔洞&#xff0c;现在需要按孔洞面积进行筛选&#xff0c;填充面积小于阈值的孔洞&…

华为综合案例-普通WLAN全覆盖配置(2)

组网图 结果验证 在AC_1和AC_2上执行display ap all命令&#xff0c;检查当前AP的状态&#xff0c;显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…