Docker のインストール詳細を確認する方法

DockerDockerBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Docker は強力なコンテナ化プラットフォームであり、開発者がアプリケーションを構築、デプロイ、管理する方法を革新しました。このチュートリアルでは、Docker のインストールを検証し、正常に動作していることを確認する方法を学びます。また、Docker を使用する際に発生する可能性のある一般的な問題のトラブルシューティング方法も紹介します。

この実験が終わるまでに、Docker のインストール詳細を確認し、Docker 環境が適切に機能していることを検証する方法をしっかりと理解できるようになります。

この実験では学習にインターネット接続が必要であるため、Pro ユーザーのみが仮想マシン (VM) を起動できます。アカウントを Pro にアップグレードする

Docker のバージョンと状態の確認

Docker の操作に入る前に、システムに Docker が正しくインストールされ、正常に動作していることを確認することが重要です。このステップでは、Docker のバージョンとデーモンの状態を確認します。

Docker のバージョンを確認する

まず、システムにインストールされている Docker のバージョンを確認しましょう。ターミナルを開き、次のコマンドを実行します。

docker --version
docker version

このコマンドは、インストールされている Docker のバージョンを表示します。次のような出力が表示されるはずです。

Docker version 20.10.21, build baeda1f

クライアントとサーバーの両方のコンポーネントを含む、より詳細なバージョン情報を取得するには、次のコマンドを使用します。

docker version

これにより、Docker クライアントとサーバー (デーモン) の包括的なバージョン情報が表示され、Docker の構築に使用された Go のバージョンなどの他の詳細も表示されます。出力は次のようになります。

Client:
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.1
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:02:28 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.1
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

「docker: command not found」というエラーが表示された場合は、Docker が正しくインストールされていないか、PATH に含まれていないことを示しています。

Docker デーモンの状態を確認する

次に、Docker デーモン (サービス) が実行中であることを確認しましょう。Docker デーモンは、Docker コンテナを管理するバックグラウンドサービスです。

次のコマンドを実行します。

sudo systemctl status docker

Docker サービスがアクティブで実行中であることを示す出力が表示されるはずです。

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-05-10 12:34:56 UTC; 2h 15min ago
   Main PID: 1234 (dockerd)
      Tasks: 8
     Memory: 38.5M
        CPU: 25.102s
     CGroup: /system.slice/docker.service
             └─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Docker サービスが実行されていない場合は、次のコマンドで起動できます。

sudo systemctl start docker

システム起動時に Docker が自動的に起動するようにするには、次のコマンドで有効にできます。

sudo systemctl enable docker

Docker の情報を確認する

Docker のインストールに関する包括的な概要を取得するには、docker info コマンドを使用します。

docker info

これにより、Docker のインストールに関する詳細情報が表示され、次のような情報が含まれます。

  • コンテナとイメージの数
  • ストレージドライバ
  • Docker のルートディレクトリ
  • ランタイム情報
  • ネットワーク設定
  • レジストリ構成

出力はかなり長くなりますが、Docker のセットアップに関する貴重な情報が提供されます。

テストコンテナの実行

これで Docker がインストールされ、実行されていることを確認したので、簡単なコンテナを実行してテストしてみましょう。このステップでは、Docker がイメージをダウンロードし、コンテナを正しく実行できることを検証します。

Hello World コンテナ

Docker は、Docker のインストールをテストするために特別に設計されたシンプルな「hello-world」イメージを提供しています。この小さなコンテナは、以下のことを検証します。

  • Docker クライアントが Docker デーモンに接続できること
  • Docker デーモンが Docker Hub からイメージを取得できること
  • Docker がコンテナを作成して実行できること

次のコマンドでこのテストコンテナを実行しましょう。

docker run hello-world

このコマンドを初めて実行すると、Docker は以下のことを行います。

  1. hello-world イメージがローカルに存在するかどうかを確認する
  2. 存在しない場合は、Docker Hub からダウンロードする
  3. このイメージからコンテナを作成する
  4. コンテナを起動し、メッセージを表示して終了する

次のような出力が表示されるはずです。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

このメッセージは、あなたの Docker インストールが正しく動作していることを確認します。

コンテナの一覧表示

hello-world コンテナを実行した後、システム上のコンテナの一覧を確認してみましょう。先ほど実行したコンテナはすでに終了していますが、すべてのコンテナの一覧にはまだ表示されています。

すべてのコンテナ(停止しているものも含む)を表示するには、次のコマンドを実行します。

docker ps -a

次のような出力が表示されるはずです。

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS   NAMES
b7c33e8f6cb8   hello-world   "/hello"   2 minutes ago   Exited (0) 2 minutes ago           romantic_galileo

-a フラグを使用すると、停止しているコンテナも含めてすべてのコンテナが表示されます。このフラグを使用しない場合、docker ps は実行中のコンテナのみを表示します。

STATUS 列に「Exited (0)」と表示されていることに注意してください。これは、コンテナがタスクを完了し、ステータスコード 0(成功を示す)で終了したことを意味します。

Docker イメージの一覧表示

hello-world イメージはあなたのローカルマシンにダウンロードされました。すべての Docker イメージを一覧表示することで、これを確認してみましょう。

docker images

次のような出力が表示されるはずです。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

これにより、hello-world イメージがあなたのシステムにローカルに保存されていることが確認できます。

基本的な Docker コマンドの探索

これで Docker のインストールが正しく動作することを確認したので、コンテナとイメージの管理に役立つ基本的な Docker コマンドをいくつか探索してみましょう。

対話型コンテナの実行

すぐに実行して終了する hello-world コンテナとは異なり、コンテナを対話型で実行することができます。Ubuntu コンテナを実行し、そのシェルと対話してみましょう。

docker run -it ubuntu bash

このコマンドは以下のことを行います。

  • -i は標準入力 (STDIN) を開いたままにします。
  • -t は疑似端末 (pseudo-TTY) を割り当てます。
  • ubuntu はイメージ名です。
  • bash はコンテナ内で実行するコマンドです。

コンテナが起動すると、コンテナ内の bash プロンプトが表示されます。

root@3f4d92618a09:/#

このプロンプトは、コンテナ内で root としてログインしていることを示しています。英数字の文字列はコンテナ ID です。

コンテナ内でいくつかの Linux コマンドを実行してみましょう。

cat /etc/os-release

これにより、コンテナ内で実行されている Ubuntu のバージョンに関する情報が表示されます。

PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

探索が終わったら、次のコマンドを入力してコンテナを終了します。

exit

これにより、ホストのターミナルに戻ります。

コンテナのライフサイクル管理

コンテナのライフサイクルを管理する方法を探索してみましょう。まず、デタッチドモードでコンテナを起動します。

docker run -d --name web nginx

このコマンドは以下のことを行います。

  • -d はコンテナをデタッチドモード(バックグラウンド)で実行します。
  • --name web はコンテナに「web」という名前を割り当てます。
  • nginx は使用するイメージです。

画面に長いコンテナ ID が表示されます。

次に、コンテナが実行中であることを確認しましょう。

docker ps

nginx コンテナが実行中であることが表示されるはずです。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
7d3f8c1f8a3d   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp    web

コンテナを停止するには、次のコマンドを実行します。

docker stop web

コンテナが停止したことを確認します。

docker ps

コンテナは実行中のコンテナのリストに表示されなくなるはずです。停止したコンテナも含めてすべてのコンテナを表示するには、次のコマンドを実行します。

docker ps -a

nginx コンテナと hello-world コンテナが停止状態で表示されるはずです。

コンテナを再度起動するには、次のコマンドを実行します。

docker start web

コンテナが不要になったら、次のコマンドで削除します。

docker stop web
docker rm web

Docker イメージの管理

Docker イメージを管理する方法を探索してみましょう。すべてのイメージを一覧表示するには、次のコマンドを実行します。

docker images

少なくとも hello-world イメージと nginx イメージが表示されるはずです。

イメージが不要になったら、次のコマンドで削除します。

docker rmi hello-world

コンテナ(停止しているものでも)によって使用されているイメージは削除できないことに注意してください。まずはそれらのコンテナを削除する必要があります。

Docker システム情報

Docker が使用しているディスク容量(コンテナ、イメージ、ボリューム)を確認するには、次のコマンドを実行します。

docker system df

これにより、ディスク使用量の概要が表示されます。

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         1         187.8MB   187.8MB (99%)
Containers      2         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

より詳細な情報を取得するには、次のコマンドを実行します。

docker system df -v

これにより、各イメージとコンテナの詳細とそれらのサイズが表示されます。

一般的な Docker の問題のトラブルシューティング

適切にインストールされた Docker 環境であっても、通常の使用中に問題に遭遇することがあります。一般的な Docker の問題とその解決策をいくつか見てみましょう。

問題:Docker デーモンが実行されていない

前のステップですでに Docker サービスを起動している場合は、このステップをスキップできます。

Docker コマンドを実行しようとして、次のようなエラーが表示された場合:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

これは、Docker デーモンが実行されていないことを意味します。この問題を解決するには:

  1. Docker サービスの状態を確認します。
sudo systemctl status docker
  1. 実行されていない場合は、起動します。
sudo systemctl start docker
  1. サービスが起動できない場合は、エラーログを確認します。
sudo journalctl -u docker

この問題とその解決策をシミュレートしてみましょう。

## まず、問題をシミュレートするために Docker サービスを停止します
sudo systemctl stop docker

## Docker コマンドを実行してみます
docker ps

## 「Cannot connect」エラーが表示されます
## サービスを再起動して問題を解決します
sudo systemctl start docker

## Docker が再び動作していることを確認します
docker ps

問題:アクセス権が拒否される

次のようなエラーが表示された場合:

Got permission denied while trying to connect to the Docker daemon socket

これは通常、ユーザーに Docker ソケットにアクセスする権限がないことを意味します。解決策は、ユーザーを docker グループに追加することです。

sudo usermod -aG docker $USER

このコマンドを実行した後、通常は変更を有効にするためにログアウトして再ログインする必要があります。ただし、ここでは labex ユーザーがすでに適切な権限を持っている実験環境なので、この手順は必要ありません。

問題:ディスク容量の問題

Docker は、未使用のイメージ、コンテナ、ボリュームによって時間の経過とともに大量のディスク容量を消費することがあります。システムのディスク容量が不足している場合:

  1. Docker のディスク使用量を確認します。
docker system df
  1. 未使用のリソースを削除します。
## すべての停止したコンテナを削除します
docker container prune

## すべての未使用のイメージを削除します
docker image prune

## すべての未使用のボリュームを削除します
docker volume prune

## または、1 つのコマンドですべての未使用のものを削除します
docker system prune

削除コマンドをデモンストレーションしてみましょう。

## すぐに終了するコンテナをいくつか作成します
docker run hello-world
docker run ubuntu echo "This will exit immediately"

## 停止したコンテナを削除します
docker container prune

操作を確認するように求められます。

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

y と入力して確認します。削除されたコンテナを示す出力が表示されるはずです。

問題:コンテナが起動しない

コンテナが起動できない場合は、ログを確認して調査することができます。

## まず、起動に失敗する可能性のあるコンテナを起動してみます
docker run --name failing-container ubuntu apt-get update

## ログを確認します
docker logs failing-container

ログには、コンテナが失敗した原因を示すエラーが表示されることがあります。

問題:ネットワークの問題

コンテナが互いに通信できない、または外部と通信できない場合:

  1. Docker のネットワーク構成を確認します。
docker network ls
  1. 特定のネットワークを調査します。
docker network inspect bridge
  1. コンテナ内から接続性をテストします。
## ネットワーク機能を持つコンテナを起動します
docker run -it ubuntu bash

## コンテナ内から、ping をインストールします
apt-get update && apt-get install -y iputils-ping

## ウェブサイトに ping を送信してみます
ping google.com

## コンテナを終了します
exit

Docker のログとデバッグ

一般的な Docker のトラブルシューティングでは、Docker デーモンのログを確認すると役立つことがあります。

sudo journalctl -u docker

特定のコンテナのログを確認するには:

docker logs <container_id>

ログをリアルタイムでストリーミングすることもできます。

docker logs -f <container_id>

これらのトラブルシューティング手法を使えば、一般的な Docker の問題の多くを診断して解決することができます。

まとめ

この実験では、Docker のインストールを検証し管理するための重要なスキルを学びました。

  • Docker のバージョンとデーモンの状態を確認し、正しくインストールされていることを確認する
  • テストコンテナを実行し、Docker の機能を検証する
  • 基本的な Docker コマンドを使用してコンテナとイメージを管理する
  • コンテナのライフサイクル管理を探索する
  • 一般的な Docker の問題のトラブルシューティングを行う

これらのスキルは、Docker コンテナを扱うための堅実な基礎を提供します。これで、Docker 環境が正しくセットアップされていることを自信を持って確認し、発生する可能性のある問題をトラブルシューティングすることができます。

Docker の学習を続けるにあたり、これらの基本を基にして、コンテナ化されたアプリケーションを効率的に作成、デプロイ、管理することができます。