Shell形式
– 利点: 記述が簡単、シェル変数展開が利用できる
– 欠点: /bin/sh -c を渡して実行するため、イメージに /bin/sh が含まれてなければならない
Exce形式
– 利点: イメージに /bin/sh が必要ないため、イメージサイズと攻撃面を削減できる
– 欠点: 記述が面倒で、シェル変数展開できない
### Shell形式
Dockefile
FROM busybox ENV COUNT 3 CMD /bin/ping -c $COUNT 8.8.8.8
$ sudo docker build -t test .
$ sudo docker run –rm –name test test
FROM busybox AS source FROM scratch COPY --from=source /bin/busybox /bin/pin ENV COUNT 3 CMD /bin/ping -c $COUNT 8.8.8.8
### Exec形式
Exec形式は、指定のコマンドを直接実行するもの
Shell形式である必要はないが、JSOフォーマットで記述しないといけない
FROM busybox CMD ["/bin/ping", "-c", "3", "8.8.8.8"]
FROM busybox AS source FROM scratch COPY --from=source /bin/busybox /bin/pin CMD ["/bin/ping", "-c", "3", "8.8.8.8"]
EXECだとシェル変数展開ができないが、/bin/shは必要ないのね
ShellとExec形式の2種類があるってことはわかった。