Docker部署(3)——Dockerfile文件参数

news2024/11/25 0:53:57

一、Dockerfile文件参数    

        Dockerfile 是用于构建 Docker 镜像的文件(之前的项目就是将jar包通过Dockerfile文件(D要记得大写!!),打包成一个镜像,当然后面也有一键化部署,使用插件来完成,方式有很多,之前的项目先使用Dockerfile文件来完成),其中可以定义一些参数以方便定制化镜像。常见的 Dockerfile 参数包括:

  • FROM:指定基础镜像(除了from其他命令都是非必须的)。
  • MAINTAINER:指定作者信息。
  • RUN:在容器构建时就要执行的命令(就是运行shell语句)。
  • CMD:指定容器启动时(真正运行时)默认运行的命令(脚本),可以以shell语句的方式来指定,也可以通过json数组的方式来指定。
  • LABEL:为镜像添加元数据,比如版本号、描述等。
  • EXPOSE:声明容器要监听的端口。
  • ENV:设置环境变量。
  • ADD/COPY:将本地(宿主机)上的文件或目录复制到容器中。
  • WORKDIR:设置工作目录,指定shell语句工作在哪个路径下。
  • USER:设置容器运行时的用户。
  • ARG:定义构建时使用的变量,在 build 时传递进去。
  • ONBUILD:定义在当前镜像基础上构建新镜像时需要执行的操作。
  • STOPSIGNAL:指定容器停止时发送的信号。
  • HEALTHCHECK:定义容器健康检查指令。

通过使用这些参数,可以更加灵活地构建 Docker 镜像,满足不同应用场景的需求。

二、相似参数指令辨析

  ①ADDCOPY 都是 Dockerfile 中用于将文件从构建上下文(本地主机或外部镜像)复制到容器内部的命令,但是它们之间有一些区别:

  1. ADD 命令支持将构建上下文中的 URL(涉及到网络资源)、压缩包等资源添加到容器中,并且在进行复制时进行解压操作,而 COPY 则无法对文件进行解压操作。
  2. ADD 命令会自动处理 URL 以及压缩包的文件复制操作,因此使用起来更加方便,但是当传输的是纯文件时,COPY 命令比 ADD 更节省空间和时间,因为 COPY 命令只复制指定文件而不执行额外的操作。
  3. COPY 命令可以指定多个源文件和目标路径,而 ADD 命令不支持指定多个源文件。
  4. COPY 复制文件进入镜像(只能用相对路径,不能用绝对路径)ADD 复制文件进入镜像(可以用绝对路径,假如是压缩文件会解压)

        因此,如果你只需要简单地复制文件而不需要执行额外的操作,请使用 COPY 命令;如果需要下载远程文件、自动解压缩文件等操作,请使用 ADD 命令。当然根据够用就好的原则,建议在能满足功能的情况下一般使用copy就行。

   ②:CMDENTRYPOINT 均为定义容器启动后执行的命令指令。它们之间的主要区别如下:

  1. ENTRYPOINT 定义了容器启动后始终会执行的命令(或脚本),而 CMD 则可以覆盖 ENTRYPOINT 定义的命令,默认情况下 CMD 指定的命令会作为参数传递给 ENTRYPOINT 定义的命令中。
  2. ENTRYPOINT 指定的命令会被视为容器的主要命令,而 CMD 则会被视为该命令的默认参数。换句话说,ENTRYPOINT 定义了容器的主要进程,而 CMD 则是为这个主进程提供默认参数的。
  3. 在 Dockerfile 中可以同时存在 CMD 和 ENTRYPOINT,实际上 ENTRYPOINT 通常都会搭配一个默认的 CMD。这样,在启动容器时,如果给 docker run 命令传入了参数,那么这些参数会覆盖默认的 CMD 参数,但是始终不会影响 ENTRYPOINT 定义的命令。

        因此,在选择使用 CMD 还是 ENTRYPOINT 时,应根据实际情况进行判断,如果需要始终执行某个命令,就使用 ENTRYPOINT;如果需要执行具体的命令,并且允许在启动容器时修改这个命令的参数,就使用 CMD

三、Dockerfile文件实例

        这是一份基于 dockette/jdk8 镜像构建的 Dockerfile 文件,它将一个 Java 应用打包成一个名为 jx-system-0.0.1-SNAPSHOT.jar 的可执行 jar 包,并将其复制到容器内部的 /test 目录下。然后使用 CMD 命令指定了镜像启动后默认执行的命令为 java -jar jx-system-0.0.1-SNAPSHOT.jar -Dfile.encoding=utf-8,其中 -Dfile.encoding=utf-8 是指定编码为 UTF-8。

具体解释如下:

  • FROM dockette/jdk8 指定了基础镜像为 dockette/jdk8。
  • WORKDIR /test 切换当前工作目录到 /test 目录。
  • COPY jx-system-0.0.1-SNAPSHOT.jar /test/jx-system-0.0.1-SNAPSHOT.jar 将本地的 jx-system-0.0.1-SNAPSHOT.jar 复制到容器内的 /test 目录下。
  • CMD ["java","-jar","jx-system-0.0.1-SNAPSHOT.jar","-Dfile.encoding=utf-8"] 指定镜像启动后默认执行的命令,即运行 jx-system-0.0.1-SNAPSHOT.jar 这个可执行文件,使用 -Dfile.encoding=utf-8 可以指定编码为 UTF-8。

        在完成上述 Dockerfile 编写后,可以使用以下命令构建 Docker 镜像:

docker build -t your-image-name .

         your-image-name 是你要给构建出来的镜像起的名字,. 表示当前目录,即 Dockerfile 所在的目录。构建完成后,使用以下命令启动容器:

docker run -d -p 8080:8080 --name your-container-name your-image-name

         your-container-name 是你要给启动的容器起的名字,-p 指定将容器内部的 8080 端口映射到宿主机的 8080 端口,这样在宿主机中就可以通过浏览器访问应用程序了。

        最后总结一份基本的 Dockerfile 模板文件来构建基于 Java 程序打包成的 Jar 包的镜像:

# 使用官方提供的 openjdk 作为基础镜像
FROM openjdk:8-jdk-alpine 
# 复制 jar 文件到容器中 
# ADD 和copy一样,复制文件到指定目录,但是copy不能解压,add自动解压
ADD target/demo.jar /app.jar 
# 暴露容器端口 
EXPOSE 8080 
# 配置容器启动后执行的命令 
ENTRYPOINT ["java", "-jar", "/app.jar"]

上述 Dockerfile 文件的解释如下:

  • FROM 指定了使用官方提供的openjdk作为基础镜像。
  • ADD 指定将编译好的 Jar 文件添加到容器内。
  • EXPOSE 告诉 Docker 哪个端口应该开放。
  • ENTRYPOINT 它为即将运行的容器设置默认的应用程序及其参数。

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

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

相关文章

Benewake(北醒) TF-LC02 (TTL) 雷达不使用TTL转USB转接板在Arduino Uno上的运用

目录 前言Benewake(北醒) TF-LC02产品简要说明Arduino开发板介绍Benewake(北醒) TF-LC02 接口及通讯协议说明接口定义串口协议说明通讯协议说明功能码说明 接线示意图例程说明配置软硬串口定义获取TOF数据的结构获取雷达距离数据的协议解析通过主循环发送获取距离指令&#xff…

信号AWGN噪声添加及SNR计算(matlab完整代码)

SNR(Signal-to-Noise Ratio,信噪比)是与信号质量相关的重要指标。它衡量了信号与噪声之间的相对强度,在计算 SNR之前,通常需要进行校准和对齐,以确保接收到的信号与理想信号具有相同的参考点和相位&#xf…

第三方库介绍——zlib库

文章目录 zlib1. zlib库介绍2. zlib库的应用3. 下载地址4. 函数使用教程4.1 compress 与 uncompress4.3 使用过程解析4.2 infate、deflate、z_stream 5. 交叉编译zlib库 zlib 1. zlib库介绍 zlib是一套通用的解压缩开源库,提供了内存(in-memory&#x…

SpringBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表

SpringBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表 更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。 一、背景 因业务发展需要,需要对接kafka,快速批量接收消息日志,避免消息日志累积过多&a…

客服岗位必备的在线工具:内部知识库

随着互联网的快速发展,越来越多的企业开始将客户服务转移到在线平台上,以便更好地满足客户需求。在线客服是这一趋势中的重要组成部分,它不仅能够提高客户满意度,还能够提高客户忠诚度和品牌形象。但是在进行在线客服工作时&#…

Vault从入门到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密钥,详细整理部署Vault的详细步骤

Vault从入门到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密钥,详细整理部署Vault的详细步骤 一、深入了解安全工具Vault二、Vault根令牌和解封密钥的含义和作用三、centos7上部署和启动Vault的流程四、vault下载地址五、安装vault六、启动V…

爬虫程序采集网络数据

目录 一、Xampp搭建本地网站 二、认识Html标签 三、爬虫程序范例 (一)调用模块 (二)加载需要爬虫的网址 (三)爬取内容选取 (四)爬取内容保存 (五) 完整爬…

【MySQL】不就是多表查询

前言 嗨!小伙伴们大家好呀,忙碌的一周就要开始!在此之前我们学习的MySQL数据库的各种操作都是在一张表之中,今天我们学习要对多张表进行相关操作,相比较于单一的表来说,多张表操作相对复杂一些,…

GaussDB云数据库SQL应用系列—分区表管理

目录 前言 一、分区表基本原理 二、分区表主要优势 三、分区表常见场景 四、GaussDB分区表管理(示例) 示例一:创建范围分区表(RANGE) 示例二:创建哈希分区表(HASH) 示例三:创建列表分区…

Python基础(8)——转换数据类型

Python基础(8)——转换数据类型 文章目录 Python基础(8)——转换数据类型目标一. 转换数据类型的作用二. 转换数据类型的函数三. 快速体验四. 实验总结 目标 数据类型转换的必要性数据类型转换常用方法 一. 转换数据类型的作用 …

【数据库原理与实践】DS系的期末考题(2023)

前排感谢 感谢在数据库期末考试中进行截图保存题目的大数据同学,给隔壁计算机同学一些小安慰呜呜 选择题 由于顺序其实无关紧要,这里遂不再按题号进行整理 答案仅是本人初步作答,可能存在错误,欢迎指出 8:B 数据的定义:数据库中存储的基本对象 9:ABC 数据库系统DBS组…

神经网络中的损失函数

在《神经网络中常见的激活函数》一文中对激活函数进行了回顾,下图是激活函数的一个子集—— 而在神经网络领域中的另一类重要的函数就是损失函数,那么,什么是损失函数呢? 损失函数是将随机事件或其有关随机变量的取值映射为非负实…

网络安全学术顶会——CCS '22 议题清单、摘要与总结(上)

注意:本文由GPT4与Claude联合生成。 按语:ChatGPT在计算机领域的翻译质量还是欠缺一些,翻译出来的中文有的不够自然,经常完全按照英文的表达方式来,导致中文特别长,很绕。GPT4的翻译效果相对ChatGPT效果要好…

第38步 深度学习图像识别:VGG19建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 (1)预训练模型和迁移学习 预训练模型就像是一个精心制作的省力工具,它是在大量的数据上进行训练,然后将学习到的模型参数保存下来。然后,我们可以直接使用这些参数&#xff0…

gitlab_ci.yml展示单元测试报告 (FREE)

CI/CD 流水线通常包含验证您的代码的测试作业。 如果测试失败,流水线将失败并通知用户。处理合并请求的人必须检查作业日志并查看测试失败的地方,以便可以修复它们。 您可以将作业配置为使用单元测试报告,极狐GitLab 会显示有关合并请求的报…

一种实现Spring动态数据源切换的方法 | 京东云技术团队

1 目标 不在现有查询代码逻辑上做任何改动,实现dao维度的数据源切换(即表维度) 2 使用场景 节约bdp的集群资源。接入新的宽表时,通常uat验证后就会停止集群释放资源,在对应的查询服务器uat环境时需要查询的是生产库…

SegNeXt:重新思考语义分割中卷积注意力设计

论文链接:https://arxiv.org/abs/2209.08575 github: https://github.com/Visual-Attention-Network/SegNeXt 参考视频:【翻译成中文带你读】SegNext论文逐行精读,30分钟就能快速了解其奥秘!-人工智能/深度学习/计算…

Triton教程---存储代理

Triton教程—存储代理 存储库代理使用在加载或卸载模型时运行的新功能扩展了 Triton。 您可以在加载模型时引入自己的代码来执行身份验证、解密、转换或类似操作。 测试版:存储库代理 API 是测试版质量,并且会针对一个或多个版本进行非向后兼容的更改。…

牛客网 2023 最新 “Java 面试八股文+各大厂的面试真题“出炉,面面俱到,太全了

一转眼 2023 年已经过了大半了,不知道你金三银四上岸了,还是等着秋招呢?大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多,Java 岗位的招聘薪酬天差地别,人才要求也是五花八门。而很多 Java 工程师求职过…

css3 grid 布局

特别声明:这篇博客转载于阮一峰老师,转载是为了方便日后复习,实在写的太棒了。 目录 一、概述 二、基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三、容器属性 3.1 display 属性 3.2grid-template-columns 属性&#x…