※作成中です、すみません。
【ページ更新日: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の時間が