俺人〜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

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

今回は、Dockerのコンテナについて、理解を深めました。

Dockerのコンテナの起動の仕組みを確認し、起動に合わせてコマンドを実行したり、コンテナを停止したり削除したりできるようになりました。

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

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

www.udemy.com

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

Dockerのコンテナについて理解を深める

1.docker runコマンドについて知る

まずは、docker runを詳しく学びました。

docker runは大きく分けて、create(作成する)とstart(起動する)の2ステップの処理が行われます。

この2ステップの処理を別々に実行します。

docker create hello-world

f:id:kanriyou_h004:20200705132014p:plain

図1.docker create実行

createされた状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705132603p:plain

図2.createされた状態を確認する

hello-worldのコンテナが作成され「STATUS」が「Created」になっていることが確認できました。

次に、docker startで、コンテナを起動します。

docker start e03e9b972652 

f:id:kanriyou_h004:20200705133017p:plain

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

コンテナIDだけが返ってきます。

再度、状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705133142p:plain

図4.起動したコンテナを確認する

「STATUS」が「Exited」になっています。

hellow-worldコンテナは、起動後すぐに処理を実行した後Exitしてしまうので、なにも出力されず、「Exited」状態になってしまいます。

出力する結果を知りたい場合は、以下を使います。

docker start -a e03e9b972652

f:id:kanriyou_h004:20200705133754p:plain

図5.[-a]オプションを付けてコンテナを起動する

出力結果が確認できました。

2.コンテナ起動時にデフォルトコマンド以外を実行する

hello-worldでは、コンテナ起動時に自動的に(デフォルトコマンドで)「Hello from Docker!」という文字列を出力してExitすることを確認しました。

今度は、ubuntuのコンテナ起動時に、デフォルトコマンド以外のコマンドを実行してみます。

まず、ubuntuのコンテナをデフォルトコマンドで起動した場合にどうなるか確認します。

docker run ubuntu

f:id:kanriyou_h004:20200705134809p:plain

図6.ubuntuコンテナを起動する

何も出力されず終了します。

コンテナの状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705135000p:plain

図7.ubuntuコンテナの状態を確認する

「STATUS」が「Exited」になっており、hello-world同様に、コンテナが作成され、起動され、デフォルトコマンド実行後、Exitしています。

次に、デフォルトのコマンドではなく、「ls」を実行してみます。

docker runコマンドの2つ目の引数に実行したいコマンド、今回の場合は「ls」を指定します。

docker run ubuntu ls

f:id:kanriyou_h004:20200705135716p:plain

図8.コンテナ起動時に実行するコマンドを指定する

コンテナが起動後、「ls」コマンドを実行して、出力できました。

ただ、デフォルトコマンド同様、実行後は、コンテナからExitします。

3.コンテナ起動後にExitせずに入力可能な状態にする

先ほどは、デフォルトコマンドを実行後、Exitしてしまいましたが、コンテナ上でもろもろ処理できるように入力可能な状態にします。

[-i]オプションを付けることで、入力可能な状況になります。

また、[-t]オプションも追加した[-it]とすることで、図8.のような出力ではなく、見やすい出力になります。

docker run -it ubuntu bash

f:id:kanriyou_h004:20200705140915p:plain

図9.[-it]オプションを付けてコンテナを起動

これで、コンテナを起動後、bashを実行し、入力可能な状態となり、表示もきれいになりました。

4.コンテナを削除・停止・全削除する

まず、コンテナの状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705141552p:plain

図10.コンテナの状態を確認

「STATUS」が「Exited」になっている2つ目のコンテナを削除します。

削除するには、docker rmコマンドを使って、引数にコンテナIDを指定します。

docker rm 73abf556080e

f:id:kanriyou_h004:20200705141841p:plain

図11.コンテナを削除する

再度コンテナの状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705142125p:plain

図12.コンテナが削除されたことを確認する

2つ目のコンテナ「73abf556080e」が削除されました。

同様に、1つ目のコンテナも削除したいところですが、このコンテナは、「STATUS」が「Up」の状態なので、削除することができません。

このため、まずは、このコンテナを停止させます。

停止するには、docker stopコマンドを使って、引数にコンテナIDを指定します。

docker stop afba2b1baf15

f:id:kanriyou_h004:20200705142531p:plain

図13.コンテナを停止する

再度コンテナの状態を確認します。

f:id:kanriyou_h004:20200705142635p:plain

図14.コンテナが停止されたことの確認

1つ目のコンテナも「STATUS」が「Exited」になっていることが確認できました。

これで、先ほどと同様にdocker rmコマンドでコンテナが削除できます。

最後に、停止されているコンテナを全て削除します。

コンテナを全て削除するにはdocker system pruneコマンドを実行します。

docker system prune

f:id:kanriyou_h004:20200705143200p:plain

図15.コンテナ全削除の実行

コマンドを実行すると、本当に削除してよいか確認されるので、削除して良ければ「y」を入力すると削除が実行されます。

コンテナの状況を確認します。

docker ps -a

f:id:kanriyou_h004:20200705143427p:plain

図16.全コンテナが削除されたことの確認

全てのコンテナが削除されたことが確認できました。

5.コンテナのファイルシステムの独立性の確認

コンテナのファイルシステムと、ホストのファイルシステムや別のコンテナのファイルシステムとは独立していて、何もしなければ、相互にファイルのやり取りはできません。

2つのコンテナを作って確認していきます。

まずは、コンテナを1つ作成して、そのファイルシステムの中に、「test1」というファイルを作成します。

docker run -it ubuntu bash

f:id:kanriyou_h004:20200705144233p:plain

図17.1つめのコンテナの起動

touch test1

ls

f:id:kanriyou_h004:20200705144502p:plain

図18.touchコマンドで「test1」ファイルを作成

次に同様に、もう1つコンテナを起動して、「test2」ファイルを作成します。

docker run -it ubuntu bash

touch test2

f:id:kanriyou_h004:20200705145015p:plain

図19.もう1つコンテナを起動して「test2」ファイルを作成する

コンテナが2つ起動していることを確認します。

f:id:kanriyou_h004:20200705145249p:plain

図20.コンテナが2つ起動していることを確認

次に、それぞれのコンテナのルートディレクトリのファイルを確認します。

f:id:kanriyou_h004:20200705145548p:plain

図21.1つ目のコンテナのファイル

f:id:kanriyou_h004:20200705145647p:plain

図22.2つ目のコンテナのファイル

1つ目のコンテナは「test1」のみ、2つ目のコンテナは「test2」のみが作成されていて、ファイルシステムが別々であることが確認できました。

6.コンテナに名前を付ける

これまで、コンテナを起動するときに、特にコンテナの名称は指定しませんでしたが、コンテナの名称を指定しない場合は、ランダムな名前が付けられます。

ずっと起動させ続けたり、共有サーバとして使うときや、他のプログラムで使用するときのように、決まった名前が必要となる場合には、名前を指定してコンテナを起動することができます。

docker run コマンドで、[--name]オプションを指定して、引数の1つ目にコンテナの名前、2つ目にDocker imageを指定します。

docker run --name sample_container ubuntu

f:id:kanriyou_h004:20200705150830p:plain

図23.コンテナに名前を付けて起動

コンテナの状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705150956p:plain

図24.コンテナの名前を確認

「NAMES」に先ほど指定した「sample_container」が付けられていることが確認できました。

すでに作成されているコンテナに同じ名前があった場合はエラーとなるので、注意が必要です。

7.detachedモードとforegroundモード

ずっと起動させたままにしたい場合などに、バックグラウンドでコンテナを起動させておきたい場合などは、detached モードを利用します。

また、逆に一回一回、コンテナを終了させる毎に、コンテナを削除する場合は、foregroundモードを利用します。

では、まずdetachedモードでコンテナを起動します。

detachedモードでコンテナを起動するには、[-d]オプションを使います。

docker run -it -d ubuntu bash

f:id:kanriyou_h004:20200705152316p:plain

図25.detachedモードでコンテナを起動

detachedモードで起動すると、[-it]オプションを指定しても、何も表示されずにホストのプロンプト戻ってきます。

コンテナの状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705152842p:plain

図26.detachedモードのコンテナの状態を確認

コンテナの状態を確認すると「STATUS」が「Up」になっていて、バックグラウンドで実行状態で、Exitしていないことが分かります。

 

次にforegroundモードでコンテナを起動します。

foregroundモードでコンテナを起動するには、[--rm]オプションを使います。

docker run --rm hello-world

f:id:kanriyou_h004:20200705153400p:plain

図27.foregroundモードでhello-worldコンテナを起動する

foregroundモードでhello-worldコンテナを起動すると、これまで通り、「Hello from Docker!」が出力されて、ホストのコマンドに戻ってきました。

では、コンテナの状態を確認します。

docker ps -a

f:id:kanriyou_h004:20200705153650p:plain

図28.コンテナの状態を確認

これまでは、hello-worldを起動した後は、Exitしたコンテナが残っていましたが、コンテナが残っていません。

これは、[--rm]オプションをつけることで、コンテナ起動後、Exitして、そのあとコンテナの削除も実行してくれるからです。

一度きり起動のコンテナは、こうすることで、残骸が残っていくことが防げます。

 

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

Dockerのコンテナについて、より深く理解することができ、コンテナを起動、停止、削除、コンテナ上でのコマンドの実行などができるようになりました。

これまで、Dockerを利用するといっても、インターネット上の記事に記載されていたDockerのコマンドを丸写しして実行していただけだったのですが、今回の講座で、内容を理解して実行できるようになりました。

少しずつですが、手を動かして進歩を感じることができるのは、すごく励みになります。

 

今回受講している「米国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:20200705161439p:plain



TensorFlowで機械学習に挑戦(Pythonによるスクレイピング&機械学習テクニック)

今回は、Dockerで構築したTensorFlowの環境で、機械学習(深層学習)に挑戦しました。 

今回も Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第4章を参考にさせていただきながら、取り組んでいます。 

 TensorFlowの環境構築は、前回の記事をご参照ください。

oregin-ai.hatenablog.com

また、Dockerの詳細を勉強したい方は、かめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」が非常にわかりやすいので、おすすめです。

px.a8.net

 

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

TensorFlowで機械学習に挑戦

1.全体像

コードは以下の通りで、「mnist-train.py」というファイルに保存しました。

import tensorflow as tf

# MNIST データセットを準備する
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# データを正規化する
x_train, x_test = x_train / 255.0, x_test / 255.0

#層を積み重ねてモデルを構築する
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

#訓練のためにオプティマイザと損失関数を設定する
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

#モデルを訓練してから検証する
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

では、コードを順に振り返っていきます。

2.MNIST データセットを準備する

以前、SVM機械学習時にも利用した、MNISTのデータセットをkeras.datasetsから読み込みます。

mnist = tf.keras.datasets.mnist 

load_data()メソッドを使って、訓練データと、検証データに分割します。

(x_train, y_train), (x_test, y_test) = mnist.load_data()

3.データを正規化する

MNISTのデータは、0~255の輝度データなので、255.0で割ることで、0~1の不動点小数値に変換(正規化)します。

x_train, x_test = x_train / 255.0, x_test / 255.0 

 4.層を積み重ねてモデルを構築する

keras.modelsのSequentialメソッドを使って、モデルを構築します。

引数に、積み重ねる層(layers)をリスト型で受け渡すことで、深層学習のモデルが構築できます。

model = tf.keras.models.Sequential([

1層目のFlattenは、縦横28x28の2次元データを784個の1次元データに変換します。

  tf.keras.layers.Flatten(input_shape=(28, 28)),

2層目のDenseは、入力データに重みをかけて、128個の出力に変換します。出力は「relu」という関数で変換して出力します。

  tf.keras.layers.Dense(128, activation='relu'),

3層目のDoropoutは、学習時に出力をランダムに削ります。これは学習時に訓練データに特化した「過学習」にならないように、する対策になります。

  tf.keras.layers.Dropout(0.2),

4層目のDenseは、入力データに重みをかけて、10個の出力に変換します。この層は最後の出力となるので、0~9のどの数字だったかを判定するために「softmax」という関数で変換して出力します。0~9のどの手書き文字であったかを確率を表しています。

  tf.keras.layers.Dense(10, activation='softmax')
])

5.訓練のためにオプティマイザと損失関数を設定する

訓練を実施するにあたり、compileメソッドを使って、各種設定を実施します。

optimizerでモデルを学習する際に重みの更新をする手法(最適化手法)を指定します、今回は「adam」を指定します。

model.compile(optimizer='adam',

 optimizerについては、以下もご参照ください。

oregin-ai.hatenablog.com

 損失関数(loss)には、'sparse_categorical_crossentropy'を設定して、'accuracy'(精度)で評価します。

loss='sparse_categorical_crossentropy', metrics=['accuracy'])

6.モデルを訓練して、評価する

fitメソッドでモデルを訓練します。引数は、1つ目が説明変数、2つ目が目的変数、三つ目にエポック数(訓練データ全体を訓練する回数)を指定します。

model.fit(x_train, y_train, epochs=5) 

評価は、evaluateメソッドで行います。引数は、1つ目、2つ目は、fitと同様に検証データの説明変数と目的変数を渡します。三つ目のverboseは、進捗表示をOnにします。

model.evaluate(x_test, y_test, verbose=2)

6.コマンドラインから実行する。

先ほど作成したファイルを実行してみます。

python3 mnist-train.py

f:id:kanriyou_h004:20200704215407p:plain

図1.mnist-train.py実行結果

実行した結果、accuracy(精度、正解率)が、0.9782とかなり高い精度で分類するモデルとすることができました。

以前SVMにて分類した際には、accuracy(精度、正解率)が、0.88程度でしたので、結構精度があがったようです。

SVMでの画像分類については、以下をご参照ください。

oregin-ai.hatenablog.com

今回は、TensorFlowで実際に、機械学習(深層学習)を実施してきました。

深層学習って難しそうだなぁと思っていましたが、TensorFlowを使うことで、意外と簡単に構築できたのは、うれしかったです。

(実際の業務やコンペとかで使いこなせるようになるには、まだまだ修行が必要ですが・・・。)

 

 今後も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピング機械学習開発に取り組んでいきたいと思います。

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

 

DockerでコンテナからDocker imageを作成してDockerHubにpushする(米国AI開発者がゼロから教えるDocker講座)

今回は、DockerでコンテナからDocker imageを作成して、DockerHubにpushするところまでを学習しました。

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

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

www.udemy.com

 

Dockerのインストールについては、以下もご参照ください。

oregin-ai.hatenablog.com

DockerでコンテナからDocker imageを作成してDockerHubにpushする

1.コンテナを起動して確認する(復習)

まずは、前回(Dockerでコンテナを操作する)で作成した「text.txt」ファイルを作成したコンテナの起動げを復習します。

起動するために、コンテナIDを確認します。

docker ps -a

f:id:kanriyou_h004:20200630212811p:plain

図1.docker ps でコンテナIDを確認する

コンテナIDは、「726e0cde1ac2」とわかったので、restartします。

docker restart 726e0cde1ac2 

f:id:kanriyou_h004:20200630213146p:plain

図2.コンテナをrestartする

restartした後、execすることで、コンテナを起動します。

docker exec -it 726e0cde1ac2 bash

f:id:kanriyou_h004:20200630213531p:plain

図3.docker execでコンテナを起動する

前回作成した「text.txt」があることを確認します。

ls

f:id:kanriyou_h004:20200630214023p:plain

図4.「text.txt」があることを確認する

前回更新した内容が確認できたので、このコンテナからDocker imageを作成していきます。

2.コンテナをcommitする

先ほど確認したコンテナからDocker imageを作成するために、exitコマンドで、コンテナを終了させます。

exit

f:id:kanriyou_h004:20200630215054p:plain

図5.exitでコンテナを終了する

終了後、docker commitコマンドにて、コンテナからDocker imageを作成します。

引数の1つ目がコンテナIDで、2つ目がDocker imageの名前になります。

「:」の後にタグをつけることができます。

今回は、もとのDocker imageの名前がubuntuなので、更新版は、ubuntu:updatedとします。

docker commit 726e0cde1ac2 ubuntu:updated

f:id:kanriyou_h004:20200630215720p:plain

図6.コンテナからDocker imageを作成する

docker imagesコマンドで作成したDocker imageを確認します。

docker images

f:id:kanriyou_h004:20200630220028p:plain

図7.Docker imageの確認

もとのubuntuに加えて、タグ(TAG)が「updated」となった新しいDocker imageを作成することができました。

3.DockerHubにリポジトリを作成する

次に、先ほどのDocker imageを、DockerHubに保存して共有するための自分用のリポジトリを作成します。リポジトリとは、DockerHub上のDocker imageを格納する箱になります。

リポジトリを作成するためには、DockerHubのサイト(Docker Hub)にログインします。

ログインしたら、「Create a Repository」をクリックします。

 

f:id:kanriyou_h004:20200630222115p:plain

図8.リポジトリの作成

リポジトリの作成画面では、リポジトリ名と公開範囲を設定します。

以下の画面では、リポジトリ名を「my-first-repo」、公開範囲を「Public」に指定して、「Create」ボタンをクリックして作成しました。

f:id:kanriyou_h004:20200630223317p:plain

図9.リポジトリ作成画面

作成されると以下のような画面が表示されます。

f:id:kanriyou_h004:20200630223553p:plain

図10.リポジトリ作成完了

4.Docker imageの名前を変更する。

次に、先ほどのリポジトリにDocker imageを保存するために、Docker imageの名前を変更します。リポジトリに保存するためには、Docker imageとリポジトリを合わせる必要があります。

名前を変更するためには、docker tagコマンドを利用します。

引数の一つ目に、変更前のDocekr imageの名前を指定し、二つ目に変更後の名前を指定します。変更後の名前は先ほど設定したリポジトリに合わせてユーザ名/my-first-repoにします。

docker tag ubuntu:updated oregin/my-first-repo:

f:id:kanriyou_h004:20200701223750p:plain

図11.Docker imageの名前を変更

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

Repository名が「ユーザ名/my-first-repo」となっているDocker imageができていることが確認できます。ポイントは、ファイルなどの扱いと異なり、変更前のDocker imageは残ったまま、名前が変更されたDocker imageが作成される点です。(IMAGE IDを見ると、同じIDとなっています。) 

f:id:kanriyou_h004:20200701234440p:plain

図12.名前の変更結果を確認

5.DockerHubにpushする

今度は、DockerHubにDocker imageをアップロード(push)します。

ダウンロードがpullだったので、反対のpushがアップロードになります。

docker pushコマンドで、先ほど名前を変更したDocker imageを引数に指定します。

docker push oregin/my-first-repo

f:id:kanriyou_h004:20200701235314p:plain

図13.DockerHubにpushする

ポイントは、Docker imageのすべての層がpushされるわけではなく、pullしてきたDocker image(今回の場合ubuntu)の層は、すでにDockerHub上に存在しているので、今回更新した「81e20eb10401」という層のみがPushされている点です。

こうすることで、DockerHubの容量が節約されています。

DockerHubを確認すると、Tagsに、「latest」が追加されていることが確認できます。

f:id:kanriyou_h004:20200702000043p:plain

図14.DockerHubに保存されたDocker image

6.DockerHubからpullする

最後に、PushしたDocker imageをPullしてみます。

先ほど作成したDocker imageが残っているとPullできたかどうかわからないので、一旦、docker rmi コマンドで削除します。

docker rmi oregin/my-first-repo

f:id:kanriyou_h004:20200702213803p:plain

図15.docker imageを削除する

次にdocker pullコマンドを使って、自分のリポジトリからDocker imageをpullします。

docker pull oregin/my-first-repo:latest

f:id:kanriyou_h004:20200702214215p:plain

図16.自分のリポジトリからDocker imageをPullする

docker imagesコマンドで、Pullできていることを確認します。

docker images

f:id:kanriyou_h004:20200702214440p:plain

図17.Docker imageがPullできたことの確認

oregin/my-first-repoがPullできていることが確認できました。

次にPullしたimageからコンテナを立ち上げます。

docker run -it oregin/my-first-repo:latest

f:id:kanriyou_h004:20200702214827p:plain

図18.コンテナを立ち上げる

立ち上げたコンテナでlsコマンドを実行すると、自身で作成した「text.txt」ファイルが入ったコンテナとなっていることが確認できます。

ls

f:id:kanriyou_h004:20200702215148p:plain

図19.「text.txt」ができていることを確認

以上で、コンテナからDocker imageを作成して、DockerHubにpushして、pullすることができるようになりました。

これで、すでに作成された環境をDockerを利用して構築できるようになり、自分で更新した環境も保存して、好きな時に好きな環境を構築できるようになりました。

機械学習をするにあたっては、課題ごとにいろいろな環境を切り替えながら対応することもあるので、Dockerはすごいツールだと感じました!

 

今回受講している「米国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:20200702215937p:plain

Dockerでコンテナを操作する(米国AI開発者がゼロから教えるDocker講座)

今回は、DockerでUbuntuのコンテナを起動し、ホストに戻ったり、再度コンテナにもどったりする、コンテナの操作方法を学習しました。

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

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

www.udemy.com

 

今回は、セクション4の「Dockerを使ってみる。」のうち、Ubuntuの環境構築について受講しました。

Dockerのインストールについては、以下もご参照ください。

oregin-ai.hatenablog.com

DockerでUbuntuを使ってみる

1.UbuntuのDocker imageをrunする

まずは、UbuntuのDocker imageをrunしてコンテナを立ち上げます。

また、runする際に、シェル(bash)を実行できるようにします。

docker run -it ubuntu bash

UbuntuのDocker imageが、ダウンロード(Pull)されていない場合は、以下の通り、docker pullも合わせて実行されてダウンロード後、コンテナが起動します。

f:id:kanriyou_h004:20200628172130p:plain

図1.Ubuntuのコンテナを立ち上げてbashを起動する

前回の、’hello-world’とは、異なりbashを起動しているので、bashのプロンプトが表示されます。

「Pull complete」の右に表示されているランダムな英数字は、「image layer」というものを表していて、今回のDocker imageが4層のimage layerの層で構成されていることになります。

また、プロンプトの右に表示されているランダムな英数字(726e0cde1ac2)は、上記の4層に、今回、さらに上乗せするimage layerを表しています。

コンテナ上で作業を行うと、この上乗せしたimage layerを更新していくことになります。

2.Ubuntuのコンテナを更新する

 今度は、先ほどのUbuntuのコンテナをに変更を加えて、新しいコンテナを作ります。

まずは、コンテナに変更を加えます。

具体的にはtouchコマンドを使って「text.txt」というファイルを作成するという変更を加えます。

ファイルを作成したらlsコマンドでファイルが作成されていることを確認します。

touch text.txt

ls

f:id:kanriyou_h004:20200628174719p:plain

図2.コンテナに変更を加える(text.txtファイルを作成する)

次に、exitコマンドを使って、コンテナを終了し、ホストに戻ります。

exit

コンテナを終了すると、ホストのコマンドプロンプトに戻ってきます。

f:id:kanriyou_h004:20200628175117p:plain

図3.コンテナを終了し、ホストに戻る

ホストに戻ってきたらdocker psコマンドで、Ubuntuのコンテナを確認することができます。注意点としては、すでに終了させているので、-aオプションを付けて確認する必要がある点です。

docker ps -a

コマンドを実行すると、コンテナの状態が確認できます。

f:id:kanriyou_h004:20200628175802p:plain

図4.docker ps -aの実行

3.コンテナを再度起動する

先ほど終了させたUbuntuのコンテナを再度起動するためには、docker restartコマンドを実行します。再度起動するコンテナを指定するためには、docker ps -a コマンドで確認した「CONTAINER ID」を使います。

CONTAINER IDは、[726e0cde1ac2]だったので、以下の通り実行します。

docker restart 726e0cde1ac2

f:id:kanriyou_h004:20200628182748p:plain

図5.docker restartの実行

また、docker execコマンドを実行することで、立ち上げたコンテナのコマンドプロンプトに入れます。

docker exec -it 726e0cde1ac2 bash

f:id:kanriyou_h004:20200628183040p:plain

図6.docker execの実行

これで、先ほどの、Ubuntuのコンテナに戻ってきました。

lsコマンドを実行すると、作成した「text.txt」が作成されていることが確認できます。

ls

f:id:kanriyou_h004:20200628183419p:plain

図7.text.txtがあることの確認

最後にdetach(Ctrlキー+p+q)で、コンテナからホストに戻ります。

f:id:kanriyou_h004:20200628183248p:plain

図8.detach(Ctrlキー+p+q)でホストに戻る

ホストに戻ったあと、docker ps -aで、状態を確認します。

f:id:kanriyou_h004:20200628184442p:plain

f:id:kanriyou_h004:20200628184316p:plain

図9.コンテナの状態の確認

exitコマンドでホストに戻った時と異なり、「STATUS」が、「Exited」にならず「Up」のままです。
また、exitコマンドと異なり、再度起動するためにdocker restartの実行が必要なく、docker attachコマンドを実行するだけで再度プロンプトに入れます。

docker attach 726e0cde1ac2

f:id:kanriyou_h004:20200628185211p:plain

図10.docker attachで再度起動

今回は、Dockerのコンテナを起動し、コンテナを更新後ホストに戻ったり、再度コンテナを起動したりできるようになりました。

また、exitとdetachの違いも学習することができました。

 

今回受講している「米国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:20200628190331j:plain

TensorFlowで簡単な計算を実行する(Pythonによるスクレイピング&機械学習テクニック)

今回は、DockerでTensorFlowが実行できる環境を構築し、簡単な計算を実行しました。

(TensorFlowを使った機械学習(深層学習)は次回以降に実践していきたいと思います。)

 

TensorFlowは、機械学習の一分野である深層学習を実施するにあたり、大規模な数値計算を実施しやすくするライブラリです。

TensorFlowを導入することで、多次元の行列計算が容易・高速になります。

また、NumpyでできなかったGPUの利用も可能です。

 

今回も Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第4章を参考にさせていただきながら、取り組んでいます。 

 

今回の環境構築では、Dockerを使いました。

Dockerのインストールについては、以下の記事をご参照ください。

oregin-ai.hatenablog.com

また、Dockerの詳細を勉強したい方は、かめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」が非常にわかりやすいので、おすすめです。

px.a8.net

 

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

TensorFlowで簡単な計算を実行する

1.TensorFlowの環境を構築する

まず、DockerHubにログインします。

以下のコマンドを実行するとUsernameとPasswordを聞かれるので、DockerHubで登録したアカウントのUsernameとPasswordを入力します。

(なお、DockerHubのアカウント登録は、こちら→Docker Hub

docker login

f:id:kanriyou_h004:20200628120752p:plain

図1.docker login実行

次に、以下のコマンドを実行して、TensorFlowのDocker imageをダウンロード(pull)します。

docker pull tensorflow/tensorflow

f:id:kanriyou_h004:20200627205347p:plain

図2.docker pullの実行

ダウンロードが完了したら、以下のコマンドを実行して、コンテナを起動します。

(AAロゴがかっこいい!)

docker run -it tensorflow/tensorflow

f:id:kanriyou_h004:20200627205548p:plain

図3.コンテナの起動

TensorFlowのコンテナが起動出来たら、簡単な計算を実行してみます。

2.TensorFlowで簡単な計算を実行する

TensorFlowのコンテ上で、python3を実行します。

python3

f:id:kanriyou_h004:20200627225522p:plain

図4.python3の実行

プロンプトが表示されたらTensorFlowをインポートします。

import tensorflow as tf

f:id:kanriyou_h004:20200627230207p:plain

図5.tensorflowのインポート

次に、add()メソッドを使って足し算を実行します。

数値同士の足し算はもちろん、リスト同士の足し算もできます。

また、square()メソッドを使って2乗を算出したり、reduce_sum()メソッドを使って合計を求めたりもできます。

1点注意事項としては、出力はTensor(Numpyのndarrayのような多次元配列)となり、形状(shape)と、データ型(dtype)を属性情報として持っています。

print(tf.add(1,2))

print(tf.add([1,2], [3,4]))

print(tf.square(5))

print(tf.reduce_sum([1,2,3]))

f:id:kanriyou_h004:20200628002516p:plain

図6.簡単な計算を実行

今回は、機械学習自体には触れませんでしたが、これから実施する深層学習を 実践する上で、避けて通れないTensorFlowの環境を構築しました。

これまで、環境構築は、PCの構成やOSのバージョン、設定、入っているミドルウェアなど、環境依存で悩まされ続けていましたが、Dockerを使うことで、ほんの数行のコマンドで環境構築できてしまうのは、感動です。

 

 今後も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピング機械学習開発に取り組んでいきたいと思います。

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

 

Dockerでhello-worldをやってみる(米国AI開発者がゼロから教えるDocker講座)

今回は、Dockerの基本的な使い方を学習しました。

私の中で超話題のかめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」をUdemyで受講しています。

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

px.a8.net

 

今回は、セクション4の「Dockerを使ってみる。」を受講しました。

Dockerのインストールについては、以下もご参照ください。

oregin-ai.hatenablog.com

Dockerを使ってみる

1.hello-worldをpullする

まずは、プログラミングの最初といったらお決まりの「hello world」です。

環境構築で「hello world」ってどういうことだろうと思ったら、なんと「」と文字列を出力するだけのために、OSインストールから、開発環境、そして文字列出力の実行までワンセットになった環境が用意されていました。

こんな贅沢なことができるのもDockerならではですね。

では、順に実行していきます。

以下のコマンドを実行するとUsernameとPasswordを聞かれるので、DockerHubで登録したアカウントのUsernameとPasswordを入力します。

(なお、DockerHubのアカウント登録は、こちら→Docker Hub

docker login

f:id:kanriyou_h004:20200628120752p:plain

図1.docker login実行

次に、以下のコマンドを実行して、DockerHubからhello-worldというDocker imageをダウンロード(pull)します。

Pull completeと出力されれば完了です。

docker pull hello-world

f:id:kanriyou_h004:20200627101530p:plain

図2.docker pullの実行

Docker imagesを実行することで、これまでのPullできたイメージの一覧を確認することができます。

docker images

f:id:kanriyou_h004:20200627102513p:plain

図3.docker imagesの実行

「REPOSITORY」は、そのDocker imageの名前になります。

「TAG」は、バージョンになりますlatestは最新版を表していて、特に何も指定せずPullした場合は、最新版となります。

「IMAGE ID」は、このイメージのIDとなります。

「CREATED」は、このイメージがいつ作成されたか、「SIZE」は、このイメージの容量になります。

2.hello-worldのコンテナを作ってみる

 今度は、先ほどPullしてきたDocker imageからコンテナを作ってみます。

このコンテナが環境の実体となります。

実体を作るためには、以下のコマンドを実行します。

docker run hello-world

実行すると以下の通り「Hello from Docker!」と表示された後、表示されるまでに実行されたステップなどが表示されます。

そして、このコンテナは、文字を出力だけ行って、終了します。

f:id:kanriyou_h004:20200627154524p:plain

図3.docker run hello-worldの実行

現在、立ち上がっているコンテナを確認するためには、以下のコマンドを実行します。

docker ps

ただし、先ほどの「hello-world」のコンテナは、実行後終了してしまうので、上記コマンドを実行しただけでは、表示されません。

過去に実行されたコンテナを含めて表示させるには、以下のとおり「-a」オプションを付けて実行します。

f:id:kanriyou_h004:20200627155017p:plain

図4.docker psの実行

こうすることで、コンテナの一覧を表示することができます。

「STATUS」が、Exitedとなっているのが、実行後、すでに終了していることを表しています。

 

今回は、単純に「Hello from Docker!」と文字列を表示させるだけの環境を構築いたしました。

この環境を構築するためには、本来であれば、OSインストール、プログラムの実行環境の構築、文字列を出力するためのプログラムなどなどを全て実施する必要があるのですが、Dockerを使えば、ほんの数行コマンドを打つだけで、実現可能でした。

たった数行で、Dockerの凄さを実感させられました。

 

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

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

px.a8.net

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 f:id:kanriyou_h004:20200627160354p:plain