当前位置: 首页 > news >正文

Docker 专栏 —— Dockerfile 指令详解

文章目录

  • ADD 复制文件
  • COPY 复制文件
  • ARG 设置构建参数
  • CMD 容器启动命令
  • ENTRYPOINT ⼊⼝点
  • ENV 设置环境变量
  • EXPOSE 声明暴露的端⼝
  • FROM 指定基础镜像
  • LABEL 为镜像添加元数据
  • MAINTAINER 指定维护者的信息
  • RUN 执⾏命令
  • USER 设置⽤户
  • VOLUME 指定挂载点
  • WORKDIR 指定⼯作⽬录

ADD 复制文件

从 src ⽬录复制⽂件到容器的 dest,其中 src 可以是 Dockerfile 所在⽬录的相对路径,可以是⼀个URL,也可以是⼀个压缩包

格式:

  • ADD src… dest
  • ADD [“src”,… “dest”]

注意:

  1. src 必须在构建的上下文内,不能使⽤例如: ADD …/somethine /something 这样的命令,因为 docker build 命令⾸先会将上下⽂路径和其⼦⽬录发送到docker daemon
  2. 如果 src 是一个URL,同时 dest 不以斜杠结尾,dest 将会被视为文件,src 对应的文件内容将会被下载到 dest
  3. 如果 src 是一个URL,同时 dest 以斜杠结尾,dest 将会被视为目录,src 对应内容将会被下载到 dest 目录
  4. 如果 src 是一个目录,那么整个目录下的内容将会被拷贝,包括文件系统元数据
  5. 如果文件是可识别的压缩包格式,则 docker 会自动解压

COPY 复制文件

复制本地端的 src 到容器的 dest。COPY指令和ADD指令类似,COPY不⽀持URL和压缩包

格式:

  • COPY src… dest
  • COPY [“src”,… “dest”]

ARG 设置构建参数

ARG指令⽤于设置构建参数,类似于ENV。和ARG不同的是,ARG设置的是构建时的环境变量,在容器运⾏时是不会存在这些变量的,例如: ARG user1=someuser

格式:

  • ARG name[=default value]

CMD 容器启动命令

CMD指令⽤于为执⾏容器提供默认值。每个Dockerfile只有⼀个CMD命令,如果指定了多个CMD命令,那么只有最后⼀条会被执⾏,如果启动容器的时候指定了运⾏的命令,则会覆盖掉CMD指定的命令

格式:

  • CMD [“executable”,“param1”,“param2”]
  • CMD [“param1”,“param2”] (为ENTRYPOINT指令提供预设参数)
  • CMD command param1 param2 (在shell中执⾏)

ENTRYPOINT ⼊⼝点

ENTRYPOINT和CMD指令的⽬的⼀样,都是指定Docker容器启动时执⾏的命令,可多次设置,但只有最后⼀个有效。ENTRYPOINT不可被重写覆盖

格式:

  • ENTRYPOINT [“executable”, “param1”, “param2”]
  • ENTRYPOINT command param1 param2

ENV 设置环境变量

例如: ENV JAVA_HOME /path/to/java

格式:

  • ENV key value
  • ENV key=value …

EXPOSE 声明暴露的端⼝

⽤于声明在运⾏时容器提供服务的端⼝

格式:

  • EXPOSE port [port…]

注意:

  1. 这只是⼀个声明,运⾏时并不会因为该声明就打开相应端⼝
  2. 该指令的作⽤主要是帮助镜像使⽤者理解该镜像服务的守护端⼝
  3. 当运⾏时使⽤随机映射时,会⾃动映射 EXPOSE 的端⼝
# 声明暴露⼀个端⼝示例
EXPOSE port1
# 相应的运⾏容器使⽤的命令
docker run -p port1 image
# 也可使⽤-P选项启动
docker run -P image
# 声明暴露多个端⼝示例
EXPOSE port1 port2 port3
# 相应的运⾏容器使⽤的命令
docker run -p port1 -p port2 -p port3 image
# 也可指定需要映射到宿主机器上的端⼝号
docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image

FROM 指定基础镜像

使⽤ FROM 指令指定基础镜像,FROM指令有点像Java⾥⾯的 “extends” 关键字。需要注意的是,FROM指令必须指定且需要写在其他指令之前,FROM指令后的所有指令都依赖于该指令所指定的镜像。

格式:

  • FROM image
  • FROM image:tag
  • FROM image@digest

LABEL 为镜像添加元数据

格式:

  • LABEL key=value key=value key=value …
# 使⽤ """和"\"转换命令⾏,示例:
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

MAINTAINER 指定维护者的信息

该指令现已过时,建议适用如下形式:
LABEL maintainer=“dsd2333”

RUN 执⾏命令

  • RUN command 在shell终端中运⾏,在 Linux 中默认是 /bin/sh -c,在 windows 中是 cmd /s/c,使⽤这种格式,就像直接在命令⾏中输⼊命令⼀样。
  • RUN [“executable”, “param1”,“param2”] 使⽤exec执⾏,这种⽅式类似于函数调⽤。指定其他终端可以通过该⽅式操作,例如: RUN [“/bin/bash”, “-c”, “echo hello”] ,该⽅式必须使⽤双引号["]⽽不能使⽤单引号['],因为该⽅式会被转换成⼀个JSON 数组。

格式:

  • RUN command
  • RUN [“executable”, “param1”, “param2”]

USER 设置⽤户

该指令⽤于设置启动镜像时的⽤户或者UID,写在该指令后的RUN、CMD以及ENTRYPOINT指令都将使⽤该⽤户执⾏命令

格式:

  • USER 用户名

VOLUME 指定挂载点

该指令使容器中的⼀个⽬录具有持久化存储的功能,该⽬录可被容器本身使⽤,也可共享给其他容器。当容器中的应⽤有持久化数据的需求时可以在Dockerfile中使⽤该指令

格式:

  • VOLUME [“/data”]
当该Dockerfile被构建成镜像后,/tmp⽬录中的数据即使容器关闭也依然存在。如果另⼀个容器也有持久化的需求,并且想使⽤以上容器/tmp⽬录中的内容,则可使⽤如下命令启动容器:
docker run -volume-from 容器ID 镜像名称  # 第⼀个容器的ID 第⼆个容器所使⽤的镜像

WORKDIR 指定⼯作⽬录

切换⽬录指令,类似于cd命令,写在该指令后的 RUN , CMD 以及 ENTRYPOINT 指令都将该⽬录作为当前⽬录,并执⾏相应的命令

格式:

  • WORKDIR /path/to/workdir

相关文章:

Docker 专栏 —— Dockerfile 指令详解

文章目录 ADD 复制文件COPY 复制文件ARG 设置构建参数CMD 容器启动命令ENTRYPOINT ⼊⼝点ENV 设置环境变量EXPOSE 声明暴露的端⼝FROM 指定基础镜像LABEL 为镜像添加元数据MAINTAINER 指定维护者的信息RUN 执⾏命令USER 设置⽤户VOLUME 指定挂载点WORKDIR 指定⼯作⽬录 ADD 复制…...

Spring Boot 项目自定义加解密实现配置文件的加密

在Spring Boot项目中, 可以结合Jasypt 快速实现对配置文件中的部分属性进行加密。 完整的介绍参照: Spring Boot Jasypt 实现application.yml 属性加密的快速示例 但是作为一个技术强迫症,总是想着从底层开始实现属性的加解密,…...

在ubuntu下对NFS做性能测试

安装NFS 首先,安装服务 sudo apt update sudo apt install nfs-kernel-server然后创建共享文件夹 # 请自定义你自己的共享目录 sudo mkdir -p /exports/nfs4/homes sudo chmod -R 777 /exports/nfs4/homes# 这个可以根据no_root_squash标致选择设置。 # 如果不设…...

Spring-Cloud-Gateway-Samples,nacos为注册中心,负载均衡

背景:本想找个简单例子看下,无奈版本依赖太过复杂,花了点时间。记录下吧 使用Spring Cloud Gateway作为网关服务,Nacos作为注册中心,实现对子服务的负载均衡访问。简单例子。 一、gateway-main-nacos服务端&#xff…...

StarRocks Awards 2024 年度贡献人物

在过去一年,StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步,其卓越的产品功能极大地简化和提升了数据分析的效率,使得"One Data,All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…...

Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)

1. Autoencoder 简介 Autoencoder是一种用于学习数据高效压缩表示的人工神经网络。它由两个主要部分组成: Encoder 编码器将输入数据映射到一个更小的、低维空间中的压缩表示,这个空间通常称为latent space或bottleneck。 这一过程可以看作是数据压缩,去除冗余信息,仅保留…...

深入探索 ScottPlot.WPF:在 Windows 桌面应用中绘制精美图表的利器

一、ScottPlot.WPF 简介 ScottPlot.WPF 是基于 ScottPlot 绘图库专门为 Windows Presentation Foundation (WPF) 框架量身定制的强大绘图组件。它无缝集成到 WPF 应用程序中,为开发者提供了一种简洁、高效的方式来可视化数据,无论是科学研究中的实验数据展示、金融领域的行情…...

React中的useMemo 和 useEffect 哪个先执行?

在 React 组件的渲染过程中,useMemo 和 useEffect 的执行顺序是不同的。具体来说: useMemo 先执行:useMemo 是在 渲染阶段 执行的,它的作用是缓存计算结果,确保在渲染过程中可以直接使用缓存的值。 useEffect 后执行&…...

错误修改系列---基于RNN模型的心脏病预测(pytorch实现)

前言 前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方 一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病…...

Table-Augmented Generation(TAG):Text2SQL与RAG的升级与超越

当下AI与数据库的融合已成为推动数据管理和分析领域发展的重要力量。传统的数据库查询方式,如结构化查询语言(SQL),要求用户具备专业的数据库知识,这无疑限制了非专业人士对数据的访问和利用。为了打破这一壁垒&#x…...

Stable Diffusion本地部署教程(附安装包)

想使用Stable Diffusion需要的环境有哪些呢? python3.10.11(至少也得3.10.6以上):依赖python环境NVIDIA:GPUgit:从github上下载包(可选,由于我已提供安装包,你可以不用git)Stable Diffusion安装包工具包: NVIDIA:https://developer.nvidia.com/cuda-toolkit-archiv…...

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性(五大功能域) 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …...

JuiceFS 2024:开源与商业并进,迈向 AI 原生时代

即将过去的 2024 年,是 JuiceFS 开源版本推出的第 4 年,企业版的第 8 个年头。回顾过去这一年,JuiceFS 社区版依旧保持着快速成长的势头,GitHub 星标突破 11.1K,各项使用指标增长均超过 100%,其中文件系统总…...

C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码

1 分词 分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词…...

计算机网络(六)应用层

6.1、应用层概述 我们在浏览器的地址中输入某个网站的域名后,就可以访问该网站的内容,这个就是万维网WWW应用,其相关的应用层协议为超文本传送协议HTTP 用户在浏览器地址栏中输入的是“见名知意”的域名,而TCP/IP的网际层使用IP地…...

上海亚商投顾:沪指探底回升微涨 机器人概念股午后爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天探底回升,沪指盘中跌超1.6%,创业板指一度跌逾3%,午后集体拉升翻红…...

conda相关操作

conda 是一个开源的包管理和环境管理工具,主要用于 Python 和数据科学领域。它可以帮助用户安装、更新、删除和管理软件包,同时支持创建和管理虚拟环境。以下是关于 conda 的所有常见操作: 1. 安装 Conda Conda 通常通过安装 Anaconda 或 Mi…...

使用TCP协议实现智能聊天机器人

实验目的与要求 本实验是程序设计类实验,要求使用原始套接字编程,掌握TCP/IP协议与网络编程Sockets通信模型,并根据教师给定的任务要求,使用TCP协议实现智能聊天机器人。 (1)熟悉标准库socket 的用法。 …...

PHP二维数组去除重复值

Date: 2025.01.07 20:45:01 author: lijianzhan PHP二维数组内根据ID或者名称去除重复值 代码示例如下: // 假设 data数组如下 $data [[id > 1, name > Type A],[id > 2, name > Type B],[id > 1, name > Type A] // 重复项 ];// 去重方法 $dat…...

2025年01月11日Github流行趋势

项目名称:xiaozhi-esp32 项目地址url:https://github.com/78/xiaozhi-esp32项目语言:C历史star数:2433今日star数:321项目维护者:78, MakerM0, whble, nooodles2023, Kevincoooool项目简介:构建…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...