今回は、DockerでコンテナからDocker imageを作成して、DockerHubにpushするところまでを学習しました。
かめ@usdatascientistさんの「米国AI開発者がゼロから教えるDocker講座」をUdemyで受講しながら進めています。
とても分かりやすく解説いただけますし、ハンズオン形式で講座が進むので、まさに「手で覚える」ことができるので、おすすめです!
Dockerのインストールについては、以下もご参照ください。
DockerでコンテナからDocker imageを作成してDockerHubにpushする
1.コンテナを起動して確認する(復習)
まずは、前回(Dockerでコンテナを操作する)で作成した「text.txt」ファイルを作成したコンテナの起動げを復習します。
起動するために、コンテナIDを確認します。
docker ps -a
コンテナIDは、「726e0cde1ac2」とわかったので、restartします。
docker restart 726e0cde1ac2
restartした後、execすることで、コンテナを起動します。
docker exec -it 726e0cde1ac2 bash
前回作成した「text.txt」があることを確認します。
ls
前回更新した内容が確認できたので、このコンテナからDocker imageを作成していきます。
2.コンテナをcommitする
先ほど確認したコンテナからDocker imageを作成するために、exitコマンドで、コンテナを終了させます。
exit
終了後、docker commitコマンドにて、コンテナからDocker imageを作成します。
引数の1つ目がコンテナIDで、2つ目がDocker imageの名前になります。
「:」の後にタグをつけることができます。
今回は、もとのDocker imageの名前がubuntuなので、更新版は、ubuntu:updatedとします。
docker commit 726e0cde1ac2 ubuntu:updated
docker imagesコマンドで作成したDocker imageを確認します。
docker images
もとのubuntuに加えて、タグ(TAG)が「updated」となった新しいDocker imageを作成することができました。
3.DockerHubにリポジトリを作成する
次に、先ほどのDocker imageを、DockerHubに保存して共有するための自分用のリポジトリを作成します。リポジトリとは、DockerHub上のDocker imageを格納する箱になります。
リポジトリを作成するためには、DockerHubのサイト(Docker Hub)にログインします。
ログインしたら、「Create a Repository」をクリックします。
リポジトリの作成画面では、リポジトリ名と公開範囲を設定します。
以下の画面では、リポジトリ名を「my-first-repo」、公開範囲を「Public」に指定して、「Create」ボタンをクリックして作成しました。
作成されると以下のような画面が表示されます。
4.Docker imageの名前を変更する。
次に、先ほどのリポジトリにDocker imageを保存するために、Docker imageの名前を変更します。リポジトリに保存するためには、Docker imageとリポジトリを合わせる必要があります。
名前を変更するためには、docker tagコマンドを利用します。
引数の一つ目に、変更前のDocekr imageの名前を指定し、二つ目に変更後の名前を指定します。変更後の名前は先ほど設定したリポジトリに合わせてユーザ名/my-first-repoにします。
docker tag ubuntu:updated oregin/my-first-repo:
docker images コマンドで結果を確認します。
Repository名が「ユーザ名/my-first-repo」となっているDocker imageができていることが確認できます。ポイントは、ファイルなどの扱いと異なり、変更前のDocker imageは残ったまま、名前が変更されたDocker imageが作成される点です。(IMAGE IDを見ると、同じIDとなっています。)
5.DockerHubにpushする
今度は、DockerHubにDocker imageをアップロード(push)します。
ダウンロードがpullだったので、反対のpushがアップロードになります。
docker pushコマンドで、先ほど名前を変更したDocker imageを引数に指定します。
docker push oregin/my-first-repo
ポイントは、Docker imageのすべての層がpushされるわけではなく、pullしてきたDocker image(今回の場合ubuntu)の層は、すでにDockerHub上に存在しているので、今回更新した「81e20eb10401」という層のみがPushされている点です。
こうすることで、DockerHubの容量が節約されています。
DockerHubを確認すると、Tagsに、「latest」が追加されていることが確認できます。
6.DockerHubからpullする
最後に、PushしたDocker imageをPullしてみます。
先ほど作成したDocker imageが残っているとPullできたかどうかわからないので、一旦、docker rmi コマンドで削除します。
docker rmi oregin/my-first-repo
次にdocker pullコマンドを使って、自分のリポジトリからDocker imageをpullします。
docker pull oregin/my-first-repo:latest
docker imagesコマンドで、Pullできていることを確認します。
docker images
oregin/my-first-repoがPullできていることが確認できました。
次にPullしたimageからコンテナを立ち上げます。
docker run -it oregin/my-first-repo:latest
立ち上げたコンテナでlsコマンドを実行すると、自身で作成した「text.txt」ファイルが入ったコンテナとなっていることが確認できます。
ls
以上で、コンテナからDocker imageを作成して、DockerHubにpushして、pullすることができるようになりました。
これで、すでに作成された環境をDockerを利用して構築できるようになり、自分で更新した環境も保存して、好きな時に好きな環境を構築できるようになりました。
機械学習をするにあたっては、課題ごとにいろいろな環境を切り替えながら対応することもあるので、Dockerはすごいツールだと感じました!
今回受講している「米国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エンジニアのための機械学習理論入門 [ 中井悦司 ]