成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

云計算 云原生
這就是 一個Shell腳本 了。 換句話說, 在本地測試完成之后, 可以直接復(fù)制到 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 是雞肋語法 的 謬論, 我仔細分析了一下, 有以下幾個原因。

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

太久沒寫 基礎(chǔ)鏡像 了, 因此沒有復(fù)雜的 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 上找到對應(yīng)的 redis 官方 dockerfile[4]

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

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

劃重點:這就是 一個Shell腳本 了。 換句話說, 在本地測試完成之后, 可以直接復(fù)制到  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

符合預(yù)期

沒有 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

2022-02-16 10:07:07

IDEA斷點技巧

2012-02-08 17:35:47

iPhoneiTunes

2024-06-28 10:29:18

異常處理Python

2020-11-26 07:48:24

Shell 腳本內(nèi)置

2024-10-16 16:30:14

ShellShell腳本

2011-06-30 21:09:26

2025-06-16 08:54:01

macOS模式版本

2024-08-21 08:43:53

Python技巧鍵值

2020-09-18 14:27:26

GitHub代碼開發(fā)者

2021-11-15 05:37:19

Linux 符號鏈接命令

2024-11-27 09:19:25

2019-08-09 13:50:08

shellLinux

2025-01-07 12:30:00

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

2023-02-06 17:49:35

Linux符號鏈接

2023-02-13 11:26:03

符號鏈接Linux

2010-05-04 13:09:21

Unix操作系統(tǒng)

2011-04-06 10:25:52

Windows 8
點贊
收藏

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

主站蜘蛛池模板: 国产一级淫片a直接免费看 免费a网站 | 日本人做爰大片免费观看一老师 | 国产 日韩 欧美 中文 在线播放 | 精品一区二区在线观看 | 日韩毛片在线观看 | 国产精品久久久久久亚洲调教 | 中文二区| 日韩中文在线观看 | 亚洲欧美日韩系列 | 欧美在线| 特级黄一级播放 | 国产 日韩 欧美 制服 另类 | 日本欧美在线视频 | 婷婷综合久久 | 成人精品毛片国产亚洲av十九禁 | 国产精品高清一区二区三区 | 日日碰碰| 剑来高清在线观看 | 欧美一级久久 | 亚洲福利一区 | 欧美日韩一区二区三区在线观看 | 亚洲视频中文 | 欧美一级特黄aaa大片在线观看 | 酒色成人网 | 久操福利 | 国产一区精品在线 | 久久曰视频 | 国产精品欧美日韩 | 国产91丝袜在线播放 | 久久精品福利 | 国产免费一区二区三区 | 99久久成人 | 精品久久久久久亚洲精品 | 国产一级片在线观看视频 | 欧美一级电影免费观看 | 一区二区不卡 | 一区二区成人 | 久久激情网 | www.久久久久久久久久久久 | 欧美一区二区在线播放 | 99re视频在线观看 |