Dockerfile : 实现多行Shell语法, 告别 && 链接符
建议点击 查看原文 查看最新内容。
原文链接: https://typonotes.com/posts/2023/09/01/dockerfile-buildkit-here-syntax/
今天在看 docker 文档的时候, 发现了一个新语法 Dockerfile - here documents 语法[1], 即 多行语法。在 Dockerfile 1.4 中添加。
如果你知道 cat 的 here document 语法, 就会很好理解。
代码语言:javascript复制cat > demo.txt <<EOF
> 123
> asdb
> EOF
该语法在使用时有一些限制条件
- 该语法只支持在
RUN
和COPY
下使用。 - 需要通过 buildkit 解析语法。简单的说, 就是
docker buildx build
构建镜像
Here-Doc 语法介绍
这是一个特性语法, 必须在 Dockerfile 申明 # syntax=docker/dockerfile:1
, 否则即使使用 buildkit 也无法解析。
# syntax=docker/dockerfile:1
其他
1. RUN
代码语言:javascript复制# syntax=docker/dockerfile:1
FROM debian
RUN <<EOT bash
set -ex
apt-get update
apt-get install -y vim
EOT
注意:
EOT
只是一个标识符, 可以换成其他任意的符号, 只要 成对 即可。例如PANDA
2. COPY
代码语言:javascript复制# 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
就行了
例如:
代码语言:javascript复制docker buildx build
-t example.com/debian:here
-f here.Dockerfile
.
参考资料
[1]
Dockerfile - here documents 语法: https://docs.docker.com/engine/reference/builder/#here-documents