Lesson 3
Docker Hub
Lesson 3
Chapter 1
Docker Hub
これまでのLessonでは、Dockerの概要と環境構築について学びました。Lesson3ではコンテナ環境を構築するためのイメージの取得方法について学んでいきます。
コンテナ・イメージ・レジストリ
Lesson2のdocker run hello-world
の実行では、Docker Hubから取得したイメージからコンテナを起動しました。一行のコマンドで実行は簡単であるものの、初めはいろいろな用語が出てきて意味が分からず、混乱するかと思います。
そこで、ここではDockerを学習していく上で最低限頭に入れて欲しい内容である、イメージ・コンテナ・レジストリの関係について整理したいと思います。
・コンテナ
コンテナとは、Lesson1でも解説しましたが、ホストOS上で隔離されたアプリの実行環境のことです。イメージを元に作成され、Docker CLI clientから起動・停止・削除などの操作をすることができます。
・イメージ
イメージとは、そのコンテナがどのようなものであるかを指示する為のテンプレートです。例えば、コンテナのベースとなるOSは何か、どのようなアプリをインストールするかという内容を指定します。
・レジストリ
レジストリとはイメージを保存しておく場所です。Dockerの公式レジストリサービスとして、Docker HubがありDockerではデフォルトで使用されています。
それぞれの関係はこのようなイメージを考えて下さい。
コンテナ・イメージ・レジストリの関係
上記の概略図の例では
- レジストリから「ubuntu」という名前のイメージを取得
- そのイメージを元にしてGitとVimをインストールしたコンテナを起動
という流れでコンテナを起動しています。
ここではあえて詳細を省略している箇所もあるのでまだ理解がぼやけている部分もあるかもしれせんが、まずはコンテナとイメージとレジストリの関係をなんとなく理解いただければと思います。
Docker Hubについて
コンテナ・イメージとレジストリの関係について確認してもらったところで、Docker Hubに関しての補足事項を紹介します。
Docker Hubで公開されているイメージには、Docker公式によって提供されているOfficial Imagesとベンダーが公開しているVerified Publisher Imagesというイメージがあります。
Docker official Imagesの意義
Docker Official Imagesは以下のような観点から作成されています。
- 開発のベースとなるOSを提供する
- メジャーなプログラミング言語の実行環境を提供する
- イメージ作成の手本を示し、明快なドキュメントを提供する
- セキュリティに関するアップデートを適宜行う
また、自分で作成したイメージをアップロードする際にはレポジトリを作成し、その中にイメージをアップロードすることになります。
そのレポジトリにはpublic repository(一般公開されるレポジトリ)とprivate repository(所有者のみに公開されるレポジトリ)の2種類があります。
次のchapterでは、実際にDocker Hubに公開されているイメージを取得してみましょう。

Lesson 3
Chapter 2
イメージのダウンロード
ubuntuイメージのダウンロード
それでは実際にDocker Hubに公開されているイメージをダウンロードしてみましょう。
Docker HubのWebサイトにアクセスし、①Exploreをクリックして下さい。

イメージの一覧が表示されたと思いますが、ここではubuntuイメージのダウンロードをしてみましょう。一覧の中から探すか②検索バーにubuntuと入力して検索して下さい。見つかれば③ubuntuをクリックして詳細ページに行きます

Docker公式によって公開されている④Docker Official Imageだということが分かります。その他にもいろいろな情報が書かれていますが、まずは⑤で示されているdocker pull ubuntu
コマンドで実際にイメージをダウンロードしてみましょう。

PowerShellを立ち上げてdocker pull ubuntu
コマンドを実行して下さい。

コマンドが終了したら、Docker Desktopのダッシュボード画面からイメージがダウンロードされているか確かめてみましょう。

確かにダウンロードできていることが確認できます。また、dockerコマンドでも同じように確認してみましょう。
docker image ls
コマンドはローカルに存在しているイメージの一覧を表示します。

⑥ここでも同様にubuntuイメージのダウンロードができていることがわかりました。
Docker Desktopのダッシュボード画面について
以後の内容ではdockerコマンドでの操作に慣れるため、あえてダッシュボード画面の確認は行いませんが、ダッシュボード画面とdockerコマンドのどちらでもイメージやコンテナの一覧を確認できることを覚えておいて下さい。
タグの指定
docker image ls
の出力を見てみると⑦TAGというカラムがあります。tagとはイメージの内容の詳細をさらに指定するようなものです。

docker pull [レポジトリ名]:[タグ名]
という形式で指定することができます。
ubuntuイメージのタグには⑧で書かれているようなものがあります。例えば⑨を見て

docker pull ubuntu:bionic
というようにタグを指定してイメージを取得することができます。
docker pull
ではデフォルトでlatestタグを指定するので、docker pull ubuntu
の実行は、docker pull ubuntu:latest
と同じになります。
イメージの削除
これでdocker pull
コマンドでのイメージの取得方法を理解することができたと思います。その他にも、ご自身で探したイメージをダウンロードできることを確かめてみて下さい。
また、取得したイメージはdocker image rm [リポジトリ名]
で削除することができます。
docker image rm ubuntu
コマンドを実行して下さい。

次にdocker image ls
コマンドを実行して下さい。取得したubuntuイメージが削除できていることが確認できると思います。

サイズの大きいイメージが増えて容量を圧迫するまえに不要なものは削除しておきましょう。

Lesson 3
Chapter 3
コンテナの作成と実行
前のchapterでは、docker pull
コマンドでDocker Hubからイメージを取得しました。
しかし、イメージはテンプレートなのでそれだけでは仮想環境を実行することができません。イメージを元にコンテナを作成、実行する必要があります。
docker image ls
コマンドを実行して下さい。これまでに取得したイメージの一覧を得ることができます。

この中にREPOSITORY名が①hello-worldとなっているものがありますが、前のchapterでdocker pull hello-world
でイメージの取得をしていないにも関わらずなぜローカルに存在しているのでしょうか?
答えはLesson2のchapter3にあります。
docker run hello-world
コマンドを実行によって、hello-worldイメージを取得 => コンテナの作成 => コンテナの実行というステップでHello from Docker!を出力できた流れを覚えているでしょうか。
この時にdocker pull
ではなくdocker run
によってDocker Hubからイメージの取得が行われていたのです。この通り、docker run
コマンドの実行にはいくつかのコマンドの実行が含まれていることが分かります。
コンテナとイメージの削除
それでは、イメージの取得からコンテナの実行までを詳細をみていく為にdocker run
コマンドなしで同じ動作を再現してみましょう。
前準備として、まずは既に取得済みのイメージと作成したコンテナを削除します。
②docker image rm hello-world
コマンドの実行によってイメージを削除していきましょう。

しかし、エラーが発生してイメージを削除することができません。エラーメッセージには③コンテナによってイメージが参照されているため削除できないとあります。
コンテナはイメージを元に作成されています。そのため、イメージを元に作成されているコンテナが存在している場合は、参照元であるイメージを削除することができないのです。よって、まずは作成されたコンテナを削除しなければなりません。
docker contianer ls -a
コマンドを実行するとコンテナの一覧が表示されます。

IMAGE名がhello-worldになっているコンテナがありますが、それを④docker container rm xxxx
で削除します。xxxxは⑤CONTAINER IDのところに表示されている英数字です。全てを入力する必要はありません。
これでコンテナが削除されました。次に再び、docker image rm hello-word
コマンドを実行して削除して下さい。

docker run hello-worldの再現
これで前準備が整いました。
まずはイメージを取得しましょう。docker pull hello-world
コマンドを実行します。

次にコンテナを作成します。⑥docker create hello-world
というコマンドになります。

docker container ls -a
を実行するとコンテナが作成され⑦STATUSがCreatedと表示されています。
次に、⑧docker start xxxx -a
を実行して下さい。

Hello from Docker!が出力されました。
以上でdocker run
コマンドの再現ができました。実行したdockerコマンドの関係を整理しておきましょう。
dockerコマンドとコンテナのステータス
四角枠の「created」や「running」はコンテナのステータスを示しています。
まとめ
以上、Lesson3ではコンテナ・イメージ・レジストリの関係やDocker Hubからのイメージの取得方法について学びました。
docker CLIコマンドも様々なものを紹介しています。分かりにくいと感じるところは、実際にコマンドを実行して試してみると理解が深まると思います。
