【Docker11,12】Dockerfileの書き方について詳しくみてみる

前回はDockerfileの記述方法、そしてDockerfile⇨Docker imageの作成方法について解説しました。

今回は、docker context(フォルダ)の中にある何かファイル等をDocker imageに組み込むことができるRUN,ADDの記述方法をみていきます。

また、よくごっちゃで理解してしまっているENTRYPOINTとCMDの違い、その他のインストラクションとしてENV, WORKDIRについて解説していきます。

本記事の対象者

○プログラミング初心者

○Dockerの基礎の基礎部分を勉強したい人

ADDとCOPYの違いについて

DockerfileでのCOPY,ADDの使い方

$ COPY <src> <dest> : <src>を<dest>にコピーする

$ ADD <src> <dest> : <src>を<dest>にコピーする

⚠️COPYとADDの違い
 ✔️ファイルやフォルダをコピーするだけの場合はCOPY
 ✔️圧縮ファイル(tar)をコピーして解凍したい場合はADD

★COPYの例(/docker内にsamethingファイルを作り、Dockerfileのnew_dirにコピーする)
★ADDの例(/docker内にcomperssed.tarファイルを作り、Docker buildにて解凍してimage内に保存する)

ENTRYPOINT:上書き不可能なコマンドの設定

ENTRYPOINTの特徴

✅docker run時に上書きすることはできない(❌ dokcker run ubuntu ls : lsで上書きできない)
“CMD”は上書き可能
✅CMD[“executable”, “param1”, “param2”, …]
 ⇨ENTRYPOINT [“executable”] CMD [“param1”, “param2”, …]という形をとる
✅docker run時に上書きできるのはCMDの部分のみ
✅コンテナをコマンドみたいに使いたい時

ENVについて:環境変数を設定

下記のどの書き方でも問題ないです(好みの問題)

特にこだわりがない場合は、ENV <key> <value> と書きましょう。

WORKDIRについて:Docker instructionの実行dirを変更する

どちらも/root直下にsample_folderを作成し、その中でsample_fileを作成しています。

書き方は、WORKDIR <絶対path> です。相対パスでもいいですが、分かりやすいよう絶対パスで書くようにしよう。

以上となります。Dockerfileにおける”ADD”と”COPY”、”CMD”と”ENTRYPOINT”の違いについての解説と、ENV、WORDIRコマンドについての解説をしましたが、いかがだったでしょうか?

次回はDockerfileがフォルダ内に複数ある場合、Dockerfileを指定してビルドする方法について解説して行きたいと思います。

今回はこの辺で、バイバイ👋