🐳

Windows10 で Hello from Docker!してみた。

2021/11/30に公開

2021年11月28日時点のWindows10での情報です。

前回 Windows10(Home,Pro)でDockerをインストールしてみる に引き続いて、Docker公式イメージ「Hello-World」で、Dockerの基本操作を体験してみます。

現時点でのDockerの理解度は・・・
Dockerのイメージとは、「Dockerコンテナのテンプレート」
Dockerコンテナとは、 「Dockerイメージ (テンプレート) から起動した実体」
Dockerイメージがあれば、開発メンバーはDockerイメージを使って、同じ構成の開発環境を簡単に作成できる。
程度ですが、とりあえず習うより慣れろということで、Hello-woldしていきます。

現状のDockerイメージとコンテナを確認

まずはDockerのGUIツールDockerDesktopで現在の状態を確認してみます。
タスクトレイからDockerDesktopを起動してImageタブを確認してみます。
イメージは何もありません。

コンテナにも何もありません。

コマンドプロンプトからも確認してみます。
イメージの一覧は「image ls」コマンドで表示できます。

docker image ls

イメージがないことが確認できます。

次にコンテナも確認してみます。
「docker ps」コマンドで起動中のコンテナ一覧を表示します。
「docker ps -a(--all)」は停止中のコンテナも表示します。

docker ps -a

コンテナがないことが確認できます。

Hello-worldを実行

コマンドプロンプトからrunコマンドを実行します。

docker run hello-world

「Hello from Docker!」と表示されていれば成功です。

何が起こったのか?

コマンドプロンプトのメッセージから、以下の事が書いてあります。

このメッセージを生成するために、Docker社は以下の手順を踏んでいます。

  1. DockerクライアントがDockerデーモンに命令
  2. DockerデーモンがDockerHubから「hello-world」イメージを取得
  3. Dockerデーモンがイメージからコンテナを作成し、メッセージを表示するプログラムを実行
  4. DockerデーモンがメッセージをDockerクライアントに送信し、それがターミナルに表示された。

「docker run」コマンドは以下のコマンドを一括で行うコマンドです。

  • イメージをダウンロードし(docker pull)
  • コンテナを生成(docker create)
  • コンテナの起動(docker start)

つまり、「hello-world」イメージがローカルになかったため、DocekrHubからダウンロードし、そのイメージからコンテナを作って、コンテナを起動させた。
コンテナが起動すると「Hello from Docker!」メッセージを表示して、コンテナを停止した。
ということのようです。

DockerクライアントとDockerデーモンとは

公式ドキュメントによると、DockerEngineは以下の3つのコンポーネントで構成されています。

  • Docker CLI
  • REST API
  • Dockerデーモン

Docker CLIは「docker run」などのDockerコマンドを実行するコマンドラインツールやDockerを操作するGUIツール「Docker Desktop」などのことです。
Docker CLIで命令を行い、コマンドに応じたREST APIが呼び出されます。
DockerデーモンはDockerを実際に操作する常駐プログラムで、REST APIが呼び出されるのを待ち受けて、APIに応じたDockerの操作を行います。

hello-world実行後のDockerイメージとコンテナを確認

hello-world実行前と同様にDocker Desktopでイメージとコンテナの状態を確認してみます。
イメージが作成されています。

コンテナも作成されています。

コマンドプロンプトでも確認してみます。
イメージが作成されています。

docker image ls


コンテナも作成されています。

docker ps -a

hello-worldイメージからコンテナを作成してみる。

「docker run」が、イメージをダウンロードし(docker pull)、 コンテナを生成(docker create)、コンテナの起動(docker start)をまとめて行っているので、これらの処理を個別で実行してみようと思います。
hello-worldイメージはすでにダウンロードされているので、コンテナを生成(docker create)、コンテナの起動(docker start)を行ってみます。

DockerDesktopからの作成

hello-worldイメージを選択し、Runボタンをクリックします。

コンテナ名を入力し、Runボタンをクリックします。

コンテナが作成されました。

「hello-world-2」コンテナをクリックすると「Hello from Docker!」が表示されます。

コマンドプロンプトからの作成

「docker create」コマンドでhello-world-3コンテナをhello-woldイメージから作成します。

docker create --name hello-world-3 hello-world

「docker start」コマンドでhello-world-3コンテナを実行します。
-a (--attach) オプションを指定します。
-aオプションは起動と同時にコンテナへ標準入出力をアタッチします。
コマンドプロンプトに「Hello from Docker!」と出力させるために必要です。

docker start -a hello-world-3

「Hello from Docker!」が表示されました。

1つのイメージに対して、いくつものコンテナが作成されています。

イメージの削除

イメージを削除するコマンドは「docker rmi」です。
hello-worldイメージを削除します。

docker rmi hello-world

削除しようとしているイメージから作成したコンテナがあると、エラーになります。
コンテナを削除してからイメージを削除するか、-f(--force)オプションをつけて強制的に削除します。
hello-worldイメージを強制的に削除します。

docker rmi hell-world -f(--force)

コンテナの削除

コンテナを削除するコマンドは「docker rm」です。
hello-world-3コンテナを削除します。

docker rm hello-world-3

まとめて削除

イメージをまとめて削除するコマンドです。

docker image prune

停止中のコンテナをまとめて削除するコマンドです。

docker container prune

デフォルトでは削除確認が表示されます。
この削除確認を表示しないようにする場合は、-f(--force)オプション指定します。

とりあえずhello-worldイメージをつかってHello from Docker!してみました🤗

Discussion