Dockerfile : 实现多行Shell的语法, 告别
创始人
2025-06-30 16:31:24
0

大家好, 我是 老麦, 一个运维老兵, 现在专注于 Golang,DevOps,云原生基础设施建设。

Dockerfile : 实现多行Shell语法, 告别 && 链接符

图片图片

建议点击 查看原文 查看最新内容。

原文链接: https://typonotes.com/posts/2023/09/01/dockerfile-buildkit-here-syntax/

今天在看 docker 文档的时候, 发现了一个新语法 Dockerfile - here documents 语法[1], 即 多行语法。在 Dockerfile 1.4 中添加。

如果你知道 cat 的 here document 语法, 就会很好理解。

cat > demo.txt < 123
> asdb
> EOF

该语法在使用时有一些限制条件

  1. 该语法只支持在 RUN 和 COPY 下使用。
  2. 需要通过 buildkit 解析语法。简单的说, 就是 docker buildx build 构建镜像

Here-Doc 语法介绍

这是一个特性语法, 必须在 Dockerfile 申明 # syntax=docker/dockerfile:1 , 否则即使使用 buildkit 也无法解析。

# syntax=docker/dockerfile:1

其他

1. RUN

# syntax=docker/dockerfile:1
FROM debian
RUN <

注意:EOT 只是一个标识符, 可以换成其他任意的符号, 只要 成对 即可。例如 PANDA

2. COPY

# syntax=docker/dockerfile:1
FROM alpine
COPY <<-"EOT" /app/script.sh
 echo hello ${FOO}
EOT
RUN FOO=abc ash /app/script.sh

注意:这里使用的是符号 <<-

使用 buildx 执行

还是很简单的, 直接使用 docker buildx build 就行了

例如:

docker buildx build \
    -t example.com/debian:here \
    -f here.Dockerfile \
    .

图片 图片

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...