偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Dockerfile 支持內(nèi)置Shell腳本, 從此告別 && 鏈接符號

云計算 云原生
這就是 一個Shell腳本 了。 換句話說, 在本地測試完成之后, 可以直接復制到 Dockerfile 中了。而之前, 還需要使用 && 鏈接整理命令。

前幾天, 我測試 Dockerfile 的 Here-Doc 語法[1], 說其是 雞肋語法, 是我 淺薄 了。

重新看了 docker 官網(wǎng)文檔關(guān)于 buildkit[2] 的介紹, 從 docker engine 23.0 開始就是默認 builder 了。

BuildKitopen_in_new is an improved backend to replace the legacy builder. BuildKit is the default builder for users on Docker Desktop, and Docker Engine as of version 23.0.

換句話說, 我們上一篇文章說的的諸多不便, 都自然消失了。

之所以得出 HereDoc 是雞肋語法 的 謬論, 我仔細分析了一下, 有以下幾個原因。

我測試服務器上的 docker 版本過低, (20.x) 。

太久沒寫 基礎(chǔ)鏡像 了, 因此沒有復雜的 RUN 和 COPY 命令。

基于以上幾點, 我做了一些優(yōu)化。

  1. 于是我根據(jù)官網(wǎng)文檔,重新安裝 docker engine, 將版本升級到了 24.0.5,
  2. 找到了在 Docker Hub 上的 redis 官方 dockerfile 重新測試。

得到的結(jié)論是, Here-Doc 語法真的是 太香了。

一句話總結(jié):不僅指支持多行語法, 是直接支持內(nèi)置 Shell 腳本

超級棒的 Dockerfile Here-Document Syntax 語法

首先, 按照官網(wǎng)文檔將 docker engine 版本升到最新。以 ubuntu - docker[3] 為例

sudo apt-get install docker-ce docker-ce-cli containerd.io \
    docker-buildx-plugin docker-compose-plugin

其次, 在 Docker Hub 上找到對應的 redis 官方 dockerfile[4]

可以看到, RUN 內(nèi)容雖然沒有通過 && 鏈接, 但是都是使用 ; 和 \ 進行 分段,換行 管理的, 還是有一定不便。

稍微改造一下, (1) 刪除所有 鏈接作用 的 ; \, (2) 取消 RUN 的所有縮進。 

劃重點:這就是 一個Shell腳本 了。 換句話說, 在本地測試完成之后, 可以直接復制到  Dockerfile 中了。而之前, 還需要使用 && 鏈接整理命令。

注意: 這里必須使用以下格式, 否則 局部變量向下無法傳遞。

RUN <<EOT
#!/bin/bash
# statment
EOT

直接使用 docker build 命令構(gòu)建鏡像, 看看執(zhí)行結(jié)果

Troubleshooting

變量傳遞問題

關(guān)于以下兩種模式, 官網(wǎng)文檔并沒有說明為什么。僅從對比實驗效果上推測, 具體實現(xiàn)還沒有研究。

模式1 bash 直接根在 EOT 后面。

RUN <<EOT bash
dist=$(uname -s)
wget -O example.com/app-${dist} app-${dist}
EOT

這種模式下, 第一行的變量 dist 在第二行 wget 中無法使用。因此 wget 行實際解析出來的命令為

wget -O example.com/app- app-

模式2, 在多行內(nèi)容中 首行 指定解釋器 #!/bin/bash, 則所有內(nèi)容整體被看作一個 Shell 腳本。

RUN <<EOT
#!/bin/bash
dist=$(uname -s)
wget -O example.com/app-${dist} app-${dist}
EOT

這種模式下, wget 行實際解析出來的命令為

wget -O example.com/app-Linux app-Linux

符合預期

沒有 buildkit 配置文件

ls: cannot access '/root/.docker/buildx/instances/default': No such file or directory

找不到默認的 buildx 配置, 使用如下即可。

{
    "Name": "localbuilder",
    "Driver": "docker-container",
    "Nodes": [
        {
            "Name": "localbuilder0",
            "Endpoint": "unix:///var/run/docker.sock",
            "Platforms": [
                {
                    "architecture": "amd64",
                    "os": "linux"
                },
                {
                    "architecture": "arm64",
                    "os": "linux"
                }
            ],
            "Flags": null,
            "ConfigFile": "",
            "DriverOpts": {}
        }
    ],
    "Dynamic": false
}

責任編輯:武曉燕 來源: 熊貓云原生Go
相關(guān)推薦

2023-09-05 09:59:37

docker語法Dockerfile

2025-03-05 09:20:00

Shell腳本Linux

2009-02-10 09:34:00

2012-02-08 17:35:47

iPhoneiTunes

2022-02-16 10:07:07

IDEA斷點技巧

2024-06-28 10:29:18

異常處理Python

2020-11-26 07:48:24

Shell 腳本內(nèi)置

2011-06-30 21:09:26

2024-10-16 16:30:14

ShellShell腳本

2024-08-21 08:43:53

Python技巧鍵值

2020-09-18 14:27:26

GitHub代碼開發(fā)者

2025-06-16 08:54:01

macOS模式版本

2025-01-07 12:30:00

C++參數(shù)傳遞代碼

2021-11-15 05:37:19

Linux 符號鏈接命令

2025-06-04 11:09:02

PromptLangGPT架構(gòu)

2024-11-27 09:19:25

2019-08-09 13:50:08

shellLinux

2011-04-06 10:25:52

Windows 8

2023-02-06 17:49:35

Linux符號鏈接
點贊
收藏

51CTO技術(shù)棧公眾號