シェルを変更したい(SHELL)
1SHELL ["/bin/bash", "-c"]
SHELLコマンドで、Dockerfile内のRUN、CMD、ENTRYPOINTコマンドを実行するシェルを変更できます。
デフォルトは、Linuxイメージだと["/bin/sh", "-c"]、Windowsイメージだと["cmd", "/S", "/C"]です。
通常はデフォルトで問題ありませんが、Bashの高度な機能(配列、条件分岐など)が必要な場合や、Windowsコンテナでcmd.exeではなくPowerShellを使いたい場合にSHELLを指定します。
Bashしたい
1FROM ubuntu:22.04
2SHELL ["/bin/bash", "-c"]
3
4RUN apt-get update && \
5 apt-get install -y curl git
デフォルトのshではBashの高度な機能(配列、関数など)が使えません。
Bashが必要な場合はSHELLで明示的に指定します。
PowerShellしたい
1FROM mcr.microsoft.com/windows/servercore:ltsc2022
2SHELL ["powershell", "-Command"]
3
4RUN Write-Host "Using PowerShell"
Windowsコンテナでcmd.exeではなくPowerShellを使いたい場合に指定します。
シェル形式とexec形式
SHELLコマンドが影響するのは、シェル形式で書かれたコマンドのみです。
1# シェル形式(SHELLの影響を受ける)
2RUN echo "test"
3CMD echo "test"
4
5# exec形式(SHELLの影響を受けない)
6RUN ["/bin/echo", "test"]
7CMD ["/bin/echo", "test"]
exec形式を使う場合、SHELLの設定に関わらず直接コマンドを実行します。