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

Dockerfile 支持內置Shell腳本, 從此告別 && 鏈接符號

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

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

重新看了 docker 官網文檔關于 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) 。

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

基于以上幾點, 我做了一些優化。

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

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

一句話總結:不僅指支持多行語法, 是直接支持內置 Shell 腳本

超級棒的 Dockerfile Here-Document Syntax 語法

首先, 按照官網文檔將 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 內容雖然沒有通過 && 鏈接, 但是都是使用 ; 和 \ 進行 分段,換行 管理的, 還是有一定不便。

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

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

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

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

直接使用 docker build 命令構建鏡像, 看看執行結果

Troubleshooting

變量傳遞問題

關于以下兩種模式, 官網文檔并沒有說明為什么。僅從對比實驗效果上推測, 具體實現還沒有研究。

模式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, 在多行內容中 首行 指定解釋器 #!/bin/bash, 則所有內容整體被看作一個 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
相關推薦

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 腳本內置

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代碼開發者

2025-06-16 08:54:01

macOS模式版本

2025-01-07 12:30:00

C++參數傳遞代碼

2021-11-15 05:37:19

Linux 符號鏈接命令

2025-06-04 11:09:02

PromptLangGPT架構

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技術棧公眾號

主站蜘蛛池模板: 亚洲第一天堂 | 中文在线а√在线8 | 综合精品 | 国产精品久久久久久久免费观看 | 黄色播放 | 日韩欧美国产一区二区三区 | 天天射美女 | 日韩在线小视频 | 国产精品久久久久久久久久尿 | 久久r免费视频 | av网站在线免费观看 | 久久人体 | 久久婷婷国产麻豆91 | 久久综合香蕉 | 国产精品久久久久久久久久久久久久 | 欧美一级片在线 | 亚洲最大av网站 | 欧美激情在线精品一区二区三区 | 美女久久视频 | 在线观看视频h | 国产亚洲一区精品 | 欧美日韩成人一区二区 | 日韩中文一区二区三区 | 在线一区二区三区 | 成人亚洲视频 | av色在线 | 99综合| 欧美日韩在线一区二区 | 精品一二三区 | japan25hdxxxx日本| 逼逼视频 | 亚洲高清视频一区 | 久久精品国产一区二区电影 | 欧美精品日韩精品国产精品 | 国产欧美久久一区二区三区 | av片在线观看 | 欧美综合视频 | 一级黄色片日本 | 91精品国产美女在线观看 | 国产成人在线视频 | h网站在线观看 |