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

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

大家好, 我是 老麦, 一个运维老兵, 现在专注于 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 <<EOF
> 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 bash
  set -ex
  apt-get update
  apt-get install -y vim
EOT

注意: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 \
    .

图片 图片

责任编辑:武晓燕 来源: 熊猫云原生Go
相关推荐

2023-09-12 09:13:24

Shell脚本Dockerfil

2009-12-25 09:55:18

LinuxShell编程Shell基本语法

2016-10-14 14:04:34

JAVA语法main

2009-06-21 13:48:05

ShellLinux运算符

2022-02-15 09:40:45

提示符Starship

2009-07-22 07:41:00

Scala函数文本占位符语法

2021-02-25 17:54:43

StarshipshellLinux

2013-11-14 11:38:20

Linux Kerne编译

2021-05-14 11:02:33

PythonShell命令

2010-03-23 15:52:41

Linux shell

2021-07-06 06:12:43

Shell语法变量

2009-06-09 21:59:13

语法高亮Javascript

2009-09-08 15:12:07

C# ListBox

2021-06-02 10:21:45

深度学习编程人工智能

2014-01-14 10:22:21

LinuxLinux命令

2010-07-20 14:52:51

Perl语法

2016-12-20 09:30:22

shell脚本linux

2011-08-11 17:25:24

MSSQL链接服务器Oracle数据库

2021-10-14 09:52:53

Dockerfile镜像容器

2017-04-07 11:45:25

CSSDIV前端
点赞
收藏

51CTO技术栈公众号