docker compose の dockerfile_inline の変数エスケープ

Docker Compose v2.17.3 から、 dockerfile_inline 構文compose.yaml の中に Dockerfile をインライン記述できるようになった。
compose.yaml ファイル一つで複数のコンテナを立ち上げられるので、地味に便利。

さて、この機能における変数の扱いについての理解に関して…、
突然だが Docker クイズ!!

以下の compose.yaml をビルドしたら、 /out.txt には何が出力されているだろうか?

services:
  inline:
    build:
      context: .
      dockerfile_inline: |
        FROM alpine
        ARG arg3="dockerfile"
        ARG argDupl="dockerfile"
        RUN  export arg2=buildcontainer \
          && export argDupl=buildcontainer \
          && cat <<EOS > /out.txt
        --------
        arg2=$arg2
        arg3=$arg3
        arg2=\$arg2
        arg3=\$arg3
        --------
        EOS
        RUN cat /out.txt

docker compose --progress=plain build --no-cache オプションを付けてビルドし、 /out.txt のダンプがどうなるか見てみよう。
果たして、正解は…?

ドロドロドロドロドロドロ (ドラムロール音)

 

\デーン!!!/

#6 [inline 3/3] RUN cat /out.txt
#6 0.496 --------
#6 0.496 arg2=
#6 0.496 arg3=
#6 0.496 arg2=arg3=--------
#6 DONE 0.5s

正解できただろうか?

解説

続きを読む

YAML の細かい仕様の話

YAML の細かい仕様の話

趣味アカウントのほうでバズった… ってほどでは無いけど、割と反響があったので、 YAML に関する話をいくつか。

YAML 1.2 では Boolean として扱うのは true, false だけ

https://yaml.org/type/bool.html

続きを読む