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

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

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