俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

Dockerfileについて理解を深める(米国AI開発者がゼロから教えるDocker講座)

今回は、Dockerfileについて、理解を深めました。

これまでは、DockerHubからPullしたDocker imageからコンテナを起動したり、起動したコンテナでの更新を反映したDocker imageとして保存したりしてきましたが、今度は、Dockerfileを使ってDocker image自体を作成できるようになりました。

今回もかめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」をUdemyで受講しながら進めています。

とても分かりやすく解説いただけますし、ハンズオン形式で講座が進むので、まさに「手で覚える」ことができるので、おすすめです!

www.udemy.com

では、振り返っていきたいと思います。

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リポジトリをクリックします。

f:id:kanriyou_h004:20200707215204p:plain

図1.ubuntuリポジトリを検索する

ubuntuリポジトリには、「Supported tags and respective Dockerfile links」と記載されたセクションがあるので、今回は一番上の「18.04」を選択します。

f:id:kanriyou_h004:20200707215738p:plain

図2.Dockerfileを選択する

Dockerfileを選択すると、Dockerfileが保存されているGitHubのページに移動します。

f:id:kanriyou_h004:20200707220226p:plain

図3.Dockerfileが保存されたGitHubのページ

この画面の下の方に、実際のDockerfileの内容が記載されています。

赤字で記載されたINSTRUCTION(命令)と、arguments(引数)で構成され、命令に応じた引数を渡すことで、Docker imageが作成されます。

また、このファイルの中身を確認することで、どんなDocker imageが作成されるかを把握できるようになります。

f:id:kanriyou_h004:20200707221327p:plain

図4.Dockerfileの中身

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 .

f:id:kanriyou_h004:20200711100613p:plain

図5.docker buildを実行する

無事、「af093da89a5e」というDocker imageが作成されました。

docker imagesコマンドで確認します。

docker images

f:id:kanriyou_h004:20200711100927p:plain

図6.作成されたDocker imageを確認する

「af093da89a5e」というDocker imageが作成できていることが確認できました。

まだ、リポジトリ名やタグ名を指定していないので、<none>となっています。

 

名前を指定してDocker imageを作成するためには、「-t」オプションで指定します。

以下のコマンドでは、「new-ubuntu」というリポジトリ名で、「latest」というタグ名を指定しています。

docker build -t new-ubuntu:latest .

f:id:kanriyou_h004:20200711101641p:plain

図7.名前を付けてdocker buildを実行する

 こんどは、「new-ubuntu:latest」というDocker imageが作成できました。

docker imagesコマンドで確認します。

docker images

f:id:kanriyou_h004:20200711101925p:plain

図8.作成されたDocker imageに名前が設定されたことを確認する

リポジトリ名に「new-ubuntu」、タグ名に「latest」が設定されたことが確認できました。

4.コンテナを起動してDocker imageの中身を確認する

 先ほど作成したDocker imageからコンテナを起動して、testファイルが作成されていることを確認します。

まずはコンテナを起動します。

docker run -it new-ubuntu bash

f:id:kanriyou_h004:20200711102616p:plain

図9.コンテナを起動する

コンテナが起動出来たらtestファイルが作成されていることを確認します。

ls

f:id:kanriyou_h004:20200711102759p:plain

図10.「test」ファイルが作成されていることを確認する

ちゃんと「test」ファイルが作成されていることが確認できました。

 

今回の振り返りは以上になります。

Dockerfileの使い方の基本を理解して、DockerfileからDocker imageを作成し、コンテナを立ち上げることができるようになりました。

前回までに実施してきた、コンテナを編集してcommitする方法でも、Docker imageは、作成できるのですが、どういった変更を加えたかを、別途記録しておかないと、どのようなDocker imageなのかがわかりませんでした。

今回学習した、DockerfileからDocker imageを作成する方法の場合、元のDocker imageにどのような変更を加えたかは、Dockerfileを確認することで知ることができます。

それぞれ、一長一短があると思いますので、使い分けていきたいと思います。

(実際は、併用していく感じでしょうか?)

 

今回受講している「米国AI開発者がゼロから教えるDocker講座」では、もっと詳しくわかりやすくご説明いただけているので、ほんとうに良い勉強になります。

今後も、継続して受講して、もっと、Dockerを使いこなせるようになりたいと思います! 

www.udemy.com

 【過去記事】

2019年8月31日(土)にE資格を受験して、合格しました!

E資格対策として勉強の進め方や、参考書などをまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

oregin-ai.hatenablog.com 

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

 【E資格対策に使った参考書】

 

f:id:kanriyou_h004:20200711103812p:plain