今回は、Dockerfileについて、理解を深めました。
これまでは、DockerHubからPullしたDocker imageからコンテナを起動したり、起動したコンテナでの更新を反映したDocker imageとして保存したりしてきましたが、今度は、Dockerfileを使ってDocker image自体を作成できるようになりました。
今回もかめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」をUdemyで受講しながら進めています。
とても分かりやすく解説いただけますし、ハンズオン形式で講座が進むので、まさに「手で覚える」ことができるので、おすすめです!
では、振り返っていきたいと思います。
Dockerfileについて理解を深める
1.Dockerfileとは何か
Dockerfileは、Docker imageを作成するための設定ファイルになります。設定内容は、テキストにて記述します。
DockerfileからDocker imageを作成する場合と、コンテナを起動して必要な更新を実施後にDocker imageとして保存する場合の大きな違いは、更新内容が把握できるという点になります。
コンテナから更新して保存されたDocker imageは、更新した人以外(場合によっては更新した人も)は、更新内容を把握することが困難ですが、Dockerfileから作成されたDocker imageは、Dockerfileの内容を確認することで、把握することができます。
2.Dockerfileの中身を見てみる
まずは、DockerHubからubuntuのDockerfileをダウンロードして中身を見てみます。
DockerHubのサイト(Docker Hub)にアクセスして、一番上のテキストボックスに「ubuntu」と入力してubuntuのリポジトリを検索します。
ubuntuのリポジトリには、「Supported tags and respective Dockerfile links」と記載されたセクションがあるので、今回は一番上の「18.04」を選択します。
Dockerfileを選択すると、Dockerfileが保存されているGitHubのページに移動します。
この画面の下の方に、実際のDockerfileの内容が記載されています。
赤字で記載されたINSTRUCTION(命令)と、arguments(引数)で構成され、命令に応じた引数を渡すことで、Docker imageが作成されます。
また、このファイルの中身を確認することで、どんなDocker imageが作成されるかを把握できるようになります。
3.Dockerfileを作ってみる
実際に、Dockerfileを作っています。
Dockerfileは、「Dockerfile」という名前でファイルを作成する必要があります。
テキストファイルで作成することができます。
任意のディレクトリに以下の内容を記載した「Dockerfile」というファイルを作成します。
FROM ubuntu:latest
RUN touch test
1行目は、FROMというINSTRUCTION(命令)に、ubuntu:latestというarguments(引数)を渡します。これは、「ubuntu:latest」というDoceker imageをもとにDocker imageを作ることを意味します。
2行目は、RUNというINSTRUCTION(命令)に、touch testというarguments(引数)を渡します。これは、「touch test」(testというファイルを作成する)というコマンドを実行することを意味します。
4.DockerfileをからDocker imageを作る
先ほど作ったDockerfileを使ってDocker imageを作成します。
Dockerfileが保存されたディレクトリに移動して、docker buildコマンドを実行します。
引数にはDockerfileが保存されたディレクトリを指定します。
「.」は、今いるディレクトリを表しています。Dockerfileの保存されたディレクトリに移動しているので、今回は「.」でディレクトリを指定しています。
docker build .
無事、「af093da89a5e」というDocker imageが作成されました。
docker imagesコマンドで確認します。
docker images
「af093da89a5e」というDocker imageが作成できていることが確認できました。
まだ、リポジトリ名やタグ名を指定していないので、<none>となっています。
名前を指定してDocker imageを作成するためには、「-t」オプションで指定します。
以下のコマンドでは、「new-ubuntu」というリポジトリ名で、「latest」というタグ名を指定しています。
docker build -t new-ubuntu:latest .
こんどは、「new-ubuntu:latest」というDocker imageが作成できました。
docker imagesコマンドで確認します。
docker images
リポジトリ名に「new-ubuntu」、タグ名に「latest」が設定されたことが確認できました。
4.コンテナを起動してDocker imageの中身を確認する
先ほど作成したDocker imageからコンテナを起動して、testファイルが作成されていることを確認します。
まずはコンテナを起動します。
コンテナが起動出来たらtestファイルが作成されていることを確認します。
ls
ちゃんと「test」ファイルが作成されていることが確認できました。
今回の振り返りは以上になります。
Dockerfileの使い方の基本を理解して、DockerfileからDocker imageを作成し、コンテナを立ち上げることができるようになりました。
前回までに実施してきた、コンテナを編集してcommitする方法でも、Docker imageは、作成できるのですが、どういった変更を加えたかを、別途記録しておかないと、どのようなDocker imageなのかがわかりませんでした。
今回学習した、DockerfileからDocker imageを作成する方法の場合、元のDocker imageにどのような変更を加えたかは、Dockerfileを確認することで知ることができます。
それぞれ、一長一短があると思いますので、使い分けていきたいと思います。
(実際は、併用していく感じでしょうか?)
今回受講している「米国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エンジニアのための機械学習理論入門 [ 中井悦司 ]