DockerのRUNとCMDとENTORYPOINTの違いについてまとめた | 初心者向け

Docker

Shell方式がExec方式で記述する

RUN命令とCMD命令とENTORYPOINT命令はShell方式かExec方式で命令を記述します。

Shell形式

次のコードを見てください。命令をShell形式で実行した場合です。

ENV name katuo
ENTRYPOINT echo "Hello, $name"

出力は次のようになります。

Hello, katuo

ENV構文を使うと環境変数を定義することができ、Shell形式で実行すると定義した環境変数を参照することができます。

Exec形式

Exec形式で命令を実行した場合の次のコードを見てください。

ENV name katuo
ENTRYPOINT ["/bin/echo", "Hello, $name"]

出力は次のようになります。

Hello, $name

環境変数が参照されず$nameがそのまま文字として出力されていることが確認できます。だだ次のようにbashが使えるように実行すると出力は変わります。

ENV name John Dow
ENTRYPOINT ["/bin/bash", "-c", "echo Hello, $name"]

出力は次のようになります。

Hello, katuo

RUN命令について

パッケージをインストールするために使う

アプリーケションを立ち上げるために必要なパッケージをインストールするために使用します。元々のイメージに対して、インストール結果をラップします。次のコードをみてください

FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y curl nginx

ubuntu:18.04のイメージに対して、curlとnginxのイメージをラップします。最終的にカスタイマイズされたイメージは玉ねぎによく例えられます。各イメージが玉ねぎの層でベースイメージ (元のイメージ)に対してこの層を重ねていくからです。

CMD命令について

ディフォルトコマンドを設定できる

CMD命令を使えばコマンドを指定せずにイメージからコンテナを生成した時にコンテナ内で実行されるコマンドを指定することができます。逆にコマンドを指定した場合はCMD命令に記述されているコマンドは無視されます。またCMD命令が複数ある場合は最後のCMD命令しか実行されません。次のコマンドを見てください。

CMD echo "Hello world"

この命令が記述されたイメージに対してdocker run -it <image>を実行すると以下の出力が得られます。

Hello world

その一方でdocker run -it <image> /bin/bashとコマンドを指定してコンテナを生成すると以下のように

root@7de4bed89922:/#

/bin/bashが実行されます。

EONTORY命令について

パラメータが上書きされない

CMDと同様にEONTORYPOINTにはコンテナを生成した時に実行されるコマンドを記述します。ENTORYPOINTの特徴は設定したパラメータが上書きされない、無視されないという点です。次のコードを見てください。

ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["world"]

このようなDockerfileで生成されたイメージに対して、まずはdocker run -it <image>を実行すると次のようになります。

Hello world

では次にdocker run -it <image> katuoというパラメータを付与したコマンドを実行すると次のようになります。

Hello katuo

ENTORYPOINTで指定していたパラメータ、Helloは上書きされずに、CMDで指定していたパラメータが上書きされていることが確認できます。

 

今回の記事は以下のサイトを参考にしました。

Docker RUN vs CMD vs ENTRYPOINT

番外:おすすめアイテム

記事の内容とは別に自宅・オフィスでの開発がもっと快適に、楽しくなる商品を紹介します。アイテム1つで開発効率が一気に向上したり、開発のモチベーションが上がったりするので良いアイテムにはお金を投資すると良いかと。

KATUO
KATUO
今回紹介する商品は普段自分が使っているものなので自信を持ってお勧めできますー。では1つずつ紹介していきます。

おすすめアイテム①

自分はオフィス次の2点の座布団と背もたれクッションを利用してます。姿勢が安定し、お尻への負担が激減します。オフィスにいるのに自宅で作業しているような感覚になるので気に入ってます。また疲労感もかなり減るので費用対効果が非常に高いアイテムです。

おすすめアイテム②

ブックスタンドみなさん使ってますか?PCを打ちながら参考書見る時に手で抑える必要がなくなるので非常に便利です。自分も購入した時なんでいままで使ってなかたんだろうと後悔したのでまだ持ってない方は買っておくと作業効率があがります。

おすすめアイテム③

PCスタンド、magic keyboard、magic mouseを購入してから、開発効率があがり、身体的負担が減って快適に開発ができるようになりました。

エンジニアの基礎知識・教養

別の記事でエンジニアとして知っておくべき技術本についてまとめました。初心者には最低限読んでおいて欲しい技術本をまとめました。例えば「リーダブルコード」などは技術力の高いエンジニアなら必ず過去に読んでいる本だと思います。

筆者
筆者

今回の記事の内容は以上で終了です!最後まで読んでくれてありがとうございました!Twitterもやってるのでよかったらフォローしてください!

タイトルとURLをコピーしました