1.初めに
私が行った研究において,Dockerfileで使用されるADDコマンドについて調べていく中で,Dockerfileを記述する際には非常に手軽だがDockerの公式の公開するベストプラクティスからは使用を推奨されていないコマンドである.
このコマンドについて研究の過程で,知ったことをメモ代わりに書いていく.
2.ADDコマンドとは
ADDコマンドとは,Dockerfileにおいて記述されるコマンドでありコンテナにファイルやディレクトリをコピーする機能を持ちます.
#ファイルのコピー
ADD sample.txt.gz /tmp
#リモートURLからファイルのコピー
ADD https://www.example.com/sample_data.txt
特徴として,コンテナにファイルやディレクトリを追加する他に
- リモートURLから直接ファイルを追加することができる.
- 圧縮ファイルを自動解凍することができる.
という機能があります.
とても便利なコマンドですね.
3.どうして使用を推奨されていないか
ADDコマンドが便利なのに使用を推奨されていない理由として,だいたいこんな感じです.
-
必要以上の処理を行う可能性があるため
リモートからのファイル追加や,圧縮ファイルの自動展開などの様々な機能があるため,Dockerfileの可読性が下がったり,解凍する予定だった圧縮ファイルを展開してしまう可能性があります. -
イメージサイズの問題
ADDコマンドでファイルを追加した場合,同一命令内でファイルを削除できません.
ファイルを展開した後やイメージ内の異なるレイヤにファイルを加えないのであれば,イメージサイズの削減のため削除するべきですが,ADDコマンドを使った際に生成されたレイヤには追加したファイルが残ります.これによりイメージサイズが大きくなる可能性があります.
4.最後に
ADDコマンドはいろんな機能を持っているため,非常に便利な機能を搭載していていて,Dockerfileに柔軟性を与えてくれます.
しかし,柔軟すぎてもDockerfileが脆くなるということで便利だけど乱用は控えましょうということでした.
ADDコマンドの適切な使用ケースは,tarファイルを解凍追加する場合で,なおかつそのファイルをイメージ内に残しておきたい場合のみな気がしてます.
後,圧縮ファイルの自動展開機能でZIPファイルが展開できなかったのが印象に残ってます.