Docker 技術ログ

DockerfileのFROM・RUN・CMD

2020年10月14日

※作成中です、すみません。

【ページ更新日:2020年10月14日】

Dockerfileに登場するFROM・RUN・CMDについて説明します。

この記事で紹介しているコマンドの内容は、次のとおりです。

記事の内容
  • Docker image layerについて
  • FROMについて
  • RUNについて
  • Docker image layerの減らし方
  • Docker imageのbuild時間短縮方法
  • CMDについて

Docker image layerについて

今回は、次のようなDockerfileを使用して説明します。

FROM ubuntu:latest

RUN apt-get update && apt-get install -y \
    curl \
    nginx

RUN apt-get install -y cvs 

CMD ["pwd"]

Docker image layerとは

Docker image layerを意識すべき理由

Dockerfileの「FROM」

「FROM」がすること

「FROM」は、DockerHub上のDocker imageを読み込みます。

ほとんどの場合、Dockerfileの最初に記述します。

今回のDockerfileでは、Dockerfile上の「ubuntu:latest」というDocker imageを読み込んでいます。

FROM ubuntu:latest

「FROM」とDocker image layer

「FROM」でDocker imageを読み込んだとき、そのDocker imageが持っているlayerをそのままセットで、読み込むことになります。

Dockerfileの「RUN」

「RUN」がすること

「RUN」は、書かれたコマンドを実行します。

使用頻度がとても多く、主にパッケージの読み込みなどに使用されます。

今回のDockerfileでは、

  • apt-get updateコマンドを実行
  • apt-get installコマンドを2回実行

という処理がRUNにより実行されます。

RUN apt-get update && apt-get install -y \
    curl \
    nginx

RUN apt-get install -y cvs 

このDockerfileを訳すと、

「パッケージを最新版にupdateします」

「パッケージcurlとnginxをインストールします」

「パッケージcvsをインストールします」

という意味になります。


それでは、より詳しくDockerfile内のコマンドを説明をします。

apt-get update
→ 『インストールするパッケージを最新版にupdateする』

apt-get install<パッケージ名>
→ 『指定したパッケージをインストールする』

apt-get installcurl
→ 『「curl」というパッケージをインストールする』

apt-get installcurl nginx
→ 『「curl」と「nginx」いうパッケージをインストールする』

apt-get install-y curl nginx
→ 『「curl」と「nginx」いうパッケージをインストールする。また、インストール中の質問に、すべてYesで答える』

&&
→ 『複数のコマンドを1つのRUNで実行させる連結係』

\
→ 『コードを途中で改行させるための改行記号』

-y
→ 『処理中の質問に、すべてYesで答える』


つまり、次の4つのDockerfileの処理結果としては同じになります。

(※ ただし、現場で使うものとしては全く異なります。次に説明します。)

#Dockerfile 1=======================
RUN apt-get update && apt-get install -y curl nginx cvs 
#================================
#Dockerfile 2=======================
RUN apt-get update && apt-get install -y \
    curl \
    nginx
RUN apt-get install -y cvs 
#================================
#Dockerfile 3=======================
RUN apt-get update
RUN apt-get install -y curl nginx
RUN apt-get install -y cvs
#================================
#Dockerfile 4=======================
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y nginx
RUN apt-get install -y cvs
#================================

この4つのDockerfileは「処理の結果」は同じですが、buildの時間が

「RUN」とDocker image layer

「RUN」によるlayerを減らす

buildをする時の時間を減らす

Dockerfileの「CMD」

「CMD」がすること

「CMD」とDocker image layer

「RUN」と「CMD」の違い

Docker image layerに関する違い

「RUN」と「CMD」の使い分け

  • この記事を書いた人
  • 最新記事

Maita Tomoya / yone

2020.4~Webアプリケーションエンジニアとして都内の企業で働き、空いている時間でブログを運営している29歳男です。本ブログは情報の整理をするため、文章を書く機会を作るために始めました。1記事でも多く「誰かのためになる記事」を書けるように頑張ります!転職前は地方の高校で働いていました。教育関係の記事も定期的に書いていきたいと思います。

-Docker, 技術ログ