当前位置: 首页 > 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项目简介:构建…...

备战蓝桥杯 队列和queue详解

目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样,队列也是一种访问受限的线性表,它只能在表头位置删除,在表尾位置插入,队列是先进先出&…...

IT面试求职系列主题-Jenkins

想成功求职,必要的IT技能一样不能少,先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统,并在发生更改时启动和监视构建系统。 2)Maven、Ant和Jenkins有什么区别…...

Vue篇-06

1、路由简介 vue-rooter:是vue的一个插件库,专门用来实现SPA应用 1.1、对SPA应用的理解 1、单页 Web 应用(single page web application,SPA)。 2、整个应用只有一个完整的页面 index.html。 3、点击页面中的导航链…...

mysql binlog 日志分析查找

文章目录 前言一、分析 binlog 内容二、编写脚本结果总结 前言 高效快捷分析 mysql binlog 日志文件。 mysql binlog 文件很大 怎么快速通过关键字查找内容 一、分析 binlog 内容 通过 mysqlbinlog 命令可以看到 binlog 解析之后的大概样子 二、编写脚本 编写脚本 search_…...

ubuntu 配置OpenOCD与RT-RT-thread环境的记录

1.git clone git://git.code.sf.net/p/openocd/code openocd 配置gcc编译环境 2. sudo gedit /etc/apt/source.list #cdrom sudo apt-get install git sudo apt-get install libtool-bin sudo apt-get install pkg-config sudo apt-install libusb-1.0-0-dev sudo apt-get…...

双系统解决开机提示security Policy Violation的方法

最近,Windows系统更新后,发现电脑开机无法进入桌面,显示“Verifiying shim SBAT data failed: security Policy Violation; So mething has gone seriously Wrong: SBAT self-check failed: Security Policy Violation”的英文错误信息。为了…...

附加共享数据库( ATTACH DATABASE)的使用场景

附加共享数据库(使用 ATTACH DATABASE)的功能非常实用,通常会在以下几种场景下需要用到: 1. 跨数据库查询和分析 场景: 你的公司有两个独立的数据库: 一个存储了学生信息 (school.db)一个存储了员工信息 …...

matlab的绘图的标题中(title)添加标量以及格式化输出

有时候我们需要在matlab绘制的图像的标题中添加一些变量,这样在修改某些参数后,标题会跟着一块儿变。可以采用如下的方法: x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...

2、第一个GO 程序

引言 接下里我们就用Go Land 工具,开发第一个GO程序。大家也可以用其他的开发工具,例如 Vs Code 1、新建项目 第一个是选择你的程序保存位置 (不要有中文)。 第二个是你的Go的编译器的安装地址。 选择完毕后,就点击 …...

【Linux-多线程】-线程安全单例模式+可重入vs线程安全+死锁等

一、线程安全的单例模式 什么是单例模式 单例模式是一种“经典的,常用的,常考的”设计模式 什么是设计模式 IT行业这么火,涌入的人很多.俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化的越来越严重,为了让菜鸡们不太拖大佬的后…...

智库网站建设方案/seo综合查询什么意思

1,html5的出现,使得浏览器的功能增强,不再仅仅是一个网页,而更像是一个平台。js因为得以调用 更多的系统功能,比如图像操作,摄像头,麦克风等等 2,node.js的出现。 Node.js项目使得JavaScri…...

php零基础做网站/搜索网排名

问题描述: 使用 cropper.js 剪裁图片时, 调用 toBlob() 方法报错 $("#image").cropper(getCroppedCanvas).toBlob(function (blob){}) 报错信息: Uncaught TypeError: $(...).cropper(...).toBlob is not a function 解决方法&…...

东营seo网站推广费用/百度资源提交

总结自己的调试心得,总结如下:   1、Cisco29系列交换机可以做基于2层的端口安全,即mac地址与端口进行绑定。   2、 Cisco3550以上交换机均可做基于2层和3层的端口安全,即mac地址与端口绑定以及mac地址与ip地址绑定。   3、以…...

ecshop商城模板/短视频seo营销

文章目录缺省函数1 缺省参数的函数调用2 多文件结构3 缺省函数的特点缺省函数 一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形…...

单位网站建设/国外十大免费服务器和域名

1.8 GloVe 词向量 共现矩阵X 1.9 情绪分类 简单情绪分类模型 情绪分类RNN模型 1.10 词嵌入除偏 词嵌入中的偏见问题...

网站制作完成需要进行哪些测试/seo站外优化最主要的是什么

4.1 遍历整个列表 我们经常需要遍历列表中的所有元素,对每个列表执行相同的操作。在进行重复性的工作的时候这个很有用,重复性工作。例如,在游戏中,可能需要将每个界面元素平移相同的距离;对于包含数字的列表&#xf…...