今回は、前回学んだDockerfileのINSTRUCTION(命令)についてさらに理解を深めました。INSTRUCTIONは、FROM、RUN、CMDの三つになります。
今回もかめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」をUdemyで受講しながら進めています。
とても分かりやすく解説いただけますし、ハンズオン形式で講座が進むので、まさに「手で覚える」ことができるので、おすすめです!
では、振り返っていきたいと思います。
DockerfileのINSTRUCTION(FROM,RUN,CMD)を学ぶ
1.FROMについて理解を深める
Dockerfileにおいて、FROMは、Docker imageを作成する際に、もとにするDocker imageを何にするかを指定するINSTRUCTION(命令)になります。Dockerfileの一番最初に、指定する必要があります。
ここで指定したDocker imageをもとに環境が構築されるので、OSのDocker imageか、OSを含むDocker imageを指定することになります。
たとえば、Docker fileに以下を記述することで、ubuntuの最新版のDocker imageからDocker imageを作成できます。
FROM ubuntu:latest
2.RUNについて理解を深める
RUNは、コマンドを実行するINSTRUCTION(命令)になります。
コマンドを実行することで、Docker imageに、任意の変更を加えていくことができます。また、RUNを1行追加するごとに、Docker imageのLayer(層)が追加されていくことになります。
たとえば、以下を記述することで、testというファイルを作成し、ファイルの中に'hello world'という文字列を書き込みます。
RUN touch test
RUN echo 'hello world' > test
先ほどの、FROMと合わせて、以下のDockerfileを作成します。
FROM ubuntu:latest
RUN touch test
RUN echo 'hello world' > test
作成したDockerfileのディレクトリに移動して、以下のコマンドを実行します。
docker build .
作成されたDokcer image(bda713f6179f)からコンテナを起動して中身を確認します。
まずは、コンテナを起動します。
docker run -it bda713f6179f
起動したコンテナでに、「test」ファイルが作成され、「hello world」が書き込まれていることを確認します。
cat test
無事、「hello world」と書き込まれた「test」ファイルが作成されていることが確認できました。
3.Docker imageのサイズを小さくする工夫
先ほど、Docker fileにRUNを2行記載しましたが、RUNが実行されるたびに、Layerが追加されていくため、RUNを記述し続けるとDocker imageのサイズがどんどん大きくなってしまいます。
Dokcer imageをなるべく小さくするためには、Layer数を小さくするための工夫が必要になります。この工夫のために「&&」を使います。
たとえば、先ほどのDockerfileは、以下の通りRUNで実行する2つのコマンドを「&&」でつなげて記述することで、Layerをひとつ少なくすることができます。
FROM ubuntu:latest
RUN touch test && echo 'hello world' > test
4.Docker image上にパッケージをインストールする
Dokcer image上にパッケージをインストールするためには、apt-getコマンドを使います。updateオプションで、パッケージのリストを更新し、installオプションでインストールするパッケージを指定します。例えば、「curl」、「nginx」をインストールする場合は以下の通りのDockerfileを作成します。
また、「-y」オプションを指定することで、インストールの際に、入力を求められた際に、すべて[y]で入力することができます。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl nginx
上記のDockerfileからDokcer imageをbuildします。
docker build .
<中略>
なお、今回は最初の実行だったので、インストールに時間がかかりましたが、一度、Docker image のLayerが作成されている場合は、cacheが使われるため、以下のように時間が短縮できます。
docker build .
5.CMDについて理解を深める
CMDは、コンテナが実行するデフォルトのコマンドを指定するINSTRUCTION(命令)になります。原則、Dockerfileの最後に一つだけ記載します。
記載方法は、CMD["実行するコマンド","引数1","引数2"]となります。
では、先ほどのDockerfileに、デフォルトのコマンドに「ls」コマンドを指定してみます。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl nginx
CMD ["ls"]
上記のDockerfileからDokcer imageをbuildします。
docker build .
この状態で、Docker imageから、コンテナを立ち上げます。
docker run b5597893e556
コンテナ起動時にlsが実行されて、ホームディレクトリのファイルが表示されることが確認できました。
なお、RUNとCMDは、どちらもコマンドを実行するINSTRUCTION(命令)になります。この2つのINSTRUCTIONの大きな違いは、RUNは実行後のDokcer imageのLayerが作成されますが、CMDはLayerが作成されないという点になります。
今回の振り返りは以上になります。
前回、基本を理解したDockerfileの記載し方について、掘り下げて理解することができました。
FROM、RUN、CMDを利用して、基にするDokcer imageに、パッケージをインストールして、コンテナを起動時にデフォルトで実行するコマンドを指定することができました。また、Dokcer imageのサイズをなるべく小さくするために、Layer数を少なくする記述方法についても学びました。
Dokcerを知れば知るほど、早く環境構築をしたくなってきました。自分の環境構築にも活用していきたいと思います。
今回受講している「米国AI開発者がゼロから教えるDocker講座」では、もっと詳しくわかりやすくご説明いただけているので、ほんとうに良い勉強になります。
今後も、継続して受講して、もっと、Dockerを使いこなせるようになりたいと思います!
【過去記事】
2019年8月31日(土)にE資格を受験して、合格しました!
E資格対策として勉強の進め方や、参考書などをまとめました。
これから受験される方がいらっしゃいましたらご参考まで。
2019年3月9日(土)にG検定を受験し、見事合格できました!
受験の体験記や勉強法などを別のブログにまとめました。
これから受験される方がいらっしゃいましたらご参考まで。
【E資格対策に使った参考書】
- 人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書) [ 松尾豊 ]
- 深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト (EXAMPRESS) [ 一般社団法人日本ディープラーニング協会 ]
- 徹底攻略ディープラーニングG検定ジェネラリスト問題集 [ 明松真司 ]
- 実践機械学習システム [ ウィリ・リチャート ]
- アルゴリズムクイックリファレンス 第2版 [ George T. Heineman ]
- 深層学習【電子書籍】[ 岩澤 有祐 ]
- 入門Python 3 [ ビル・ルバノビック ]
- PythonによるWebスクレイピング 第2版 [ Ryan Mitchell ]
- Think Stats第2版 プログラマのための統計入門 [ アレン・B.ダウニー ]
- 集合知プログラミング [ トビー・セガラン ]
- ITエンジニアのための機械学習理論入門 [ 中井悦司 ]