前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dockerfile : 实现多行Shell的语法, 告别 && 链接符

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

作者头像
老麦
发布2023-09-07 10:04:17
6000
发布2023-09-07 10:04:17
举报
文章被收录于专栏:Go与云原生Go与云原生

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

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

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

Here-Doc 语法介绍

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

代码语言:javascript
复制
# 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dockerfile : 实现多行Shell语法, 告别 && 链接符
    • Here-Doc 语法介绍
      • 1. RUN
      • 2. COPY
    • 使用 buildx 执行
      • 参考资料
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档