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”]
注意:
- src 必须在构建的上下文内,不能使⽤例如: ADD …/somethine /something 这样的命令,因为 docker build 命令⾸先会将上下⽂路径和其⼦⽬录发送到docker daemon
- 如果 src 是一个URL,同时 dest 不以斜杠结尾,dest 将会被视为文件,src 对应的文件内容将会被下载到 dest
- 如果 src 是一个URL,同时 dest 以斜杠结尾,dest 将会被视为目录,src 对应内容将会被下载到 dest 目录
- 如果 src 是一个目录,那么整个目录下的内容将会被拷贝,包括文件系统元数据
- 如果文件是可识别的压缩包格式,则 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…]
注意:
- 这只是⼀个声明,运⾏时并不会因为该声明就打开相应端⼝
- 该指令的作⽤主要是帮助镜像使⽤者理解该镜像服务的守护端⼝
- 当运⾏时使⽤随机映射时,会⾃动映射 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服务端ÿ…...
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项目简介:构建…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集
目录 一、引言:当爬虫遭遇"地域封锁"二、背景解析:分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计:Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...
SQLSERVER-DB操作记录
在SQL Server中,将查询结果放入一张新表可以通过几种方法实现。 方法1:使用SELECT INTO语句 SELECT INTO 语句可以直接将查询结果作为一个新表创建出来。这个新表的结构(包括列名和数据类型)将与查询结果匹配。 SELECT * INTO 新…...
