Docker Compose で 'zsh: command not found: docker-compose' をトラブルシューティング

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

はじめに

Docker Compose は、マルチコンテナ Docker アプリケーションを管理するための不可欠なツールです。この実験(Lab)では、Docker Compose を使い始める際に多くのユーザーが遭遇する一般的な「zsh: command not found: docker-compose」エラーの解決方法を説明します。

この実験(Lab)を完了することで、Docker Compose を正しくインストールし、パス関連の問題をトラブルシューティングし、Docker Compose を使用してシンプルなマルチコンテナアプリケーションを実行する方法を習得できます。これらのスキルは、コンテナ化されたアプリケーションを扱う開発者にとって基本となります。

Docker と Docker Compose の理解

トラブルシューティングを開始する前に、Docker Compose が何であり、Docker エコシステムにおいてなぜ重要なのかを理解しましょう。

Docker とは?

Docker は、開発者がコンテナ内でアプリケーションを構築、パッケージ化、実行できるようにするプラットフォームです。コンテナは、アプリケーションを実行するために必要なすべて(コード、ランタイム、システムツール、ライブラリ、設定)を含む、軽量で分離された環境です。

Docker Compose とは?

Docker Compose は、マルチコンテナ Docker アプリケーションを定義し、実行するためのツールです。Docker Compose を使用すると、YAML ファイルを使用して、アプリケーションのサービス、ネットワーク、およびボリュームを構成します。その後、単一のコマンドで、構成からすべてのサービスを作成して開始できます。

Docker がシステムに正しくインストールされているかどうかを確認しましょう。

docker --version

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

Docker version 20.10.21, build baeda1f

これにより、Docker がインストールされ、使用できる状態であることが確認されます。次に、Docker Compose を実行して、インストールされているかどうかを確認してみましょう。

docker-compose --version

Docker Compose がインストールされていない場合、次のエラーが表示されます。

zsh: command not found: docker-compose

このエラーメッセージは、この実験(Lab)の焦点です。次のステップで、この問題をトラブルシューティングして修正します。

なぜ Docker Compose を使用するのか?

Docker Compose は、マルチコンテナアプリケーションの管理に関して、いくつかの利点を提供します。

  1. 構成の簡素化: アプリケーションスタック全体を単一の YAML ファイルで定義します。
  2. 一貫性の確保: 複数の環境で同じアプリケーション設定を実行します。
  3. 依存関係の管理: サービスの起動順序とコンテナ間の通信を処理します。
  4. 生産性の向上: アプリケーションのライフサイクル全体を管理するための簡単なコマンドで時間を節約します。

次のステップでは、Docker Compose をインストールし、「command not found」エラーを解決します。

Docker Compose のインストール

Docker Compose が何であるかを理解したので、「command not found」エラーを解決するために、システムにインストールしましょう。

Docker Compose バイナリのダウンロード

最初のステップは、Docker Compose バイナリをダウンロードすることです。公式の Docker Compose バイナリは GitHub で入手できます。curl コマンドを使用してダウンロードします。

sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

このコマンドは、オペレーティングシステムのアーキテクチャに一致する Docker Compose バイナリをダウンロードし、/usr/local/bin/docker-compose に保存します。ファイルのダウンロードには少し時間がかかります。

Docker Compose を実行可能にする

バイナリをダウンロードした後、実行可能にする必要があります。

sudo chmod +x /usr/local/bin/docker-compose

このコマンドは、Docker Compose バイナリに実行権限を付与します。

インストールの確認

次に、Docker Compose が正しくインストールされたことを確認しましょう。

docker-compose --version

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

Docker Compose version v2.17.2

まだ「command not found」エラーが表示される場合は、/usr/local/bin ディレクトリがシステムの PATH に含まれていない可能性があります。この問題は、次のステップで対処します。

PATH 変数の理解

PATH 変数は、Linux の環境変数であり、コマンドを実行するときに、実行可能ファイルを検索するディレクトリをシェルに指示します。現在の PATH を表示するには、次を実行します。

echo $PATH

コロン(:)で区切られたディレクトリのリストが表示されるはずです。/usr/local/bin がこのリストに含まれていない場合、シェルが docker-compose コマンドを見つけられない理由を説明できる可能性があります。

次のステップでは、Docker Compose の使用を妨げる可能性のある残りの問題をトラブルシューティングして解決します。

"Command Not Found" エラーのトラブルシューティング

インストール後も「zsh: command not found: docker-compose」エラーが発生する場合は、いくつかの一般的な原因とその解決策をトラブルシューティングしましょう。

解決策 1:シンボリックリンクの作成

一般的な解決策の 1 つは、PATH に確実に含まれているディレクトリ(例:/usr/bin)に Docker Compose バイナリへのシンボリックリンクを作成することです。

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

このコマンドは、Docker Compose バイナリへのシンボリックリンク(ショートカット)を /usr/bin ディレクトリに作成します。これは通常、デフォルトでシステムの PATH に含まれています。

シンボリックリンクを作成した後、Docker Compose をもう一度実行してみてください。

docker-compose --version

これで、エラーなしで Docker Compose のバージョン情報が表示されるはずです。

解決策 2:Docker Compose プラグインの使用(代替方法)

新しいバージョンの Docker では、Compose はプラグインとして利用できます。この方法を使用したい場合は、次を試すことができます。

docker compose version

dockercompose の間にハイフンがないことに注意してください。このコマンドが機能する場合、Docker Compose がプラグインとして利用可能であり、この構文で代わりにそれを使用できることを意味します。

解決策 3:Docker Compose を PATH に追加する

Docker Compose を現在の場所に保持したいが、シンボリックリンクが機能しない場合は、ディレクトリを PATH に手動で追加できます。

echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc

これにより、/usr/local/bin が PATH に追加され、現在のセッションに変更が即座に適用されます。

検証

どの解決策を使用したとしても、Docker Compose が正しく動作していることを確認してください。

docker-compose --version

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

Docker Compose version v2.17.2

Docker Compose を正常にインストールして構成したので、次のステップでは、インストールをテストするために簡単な Docker Compose プロジェクトを作成します。

簡単な Docker Compose プロジェクトの作成

Docker Compose が正しくインストールされ、動作するようになったので、セットアップをテストするための簡単なプロジェクトを作成しましょう。Web サーバーと Redis データベースを備えた基本的な Web アプリケーションを作成します。

プロジェクトディレクトリの作成

まず、プロジェクト専用のディレクトリを作成しましょう。

mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test

Docker Compose ファイルの作成

次に、nano テキストエディタを使用して docker-compose.yml ファイルを作成しましょう。

nano docker-compose.yml

次の内容をファイルにコピーして貼り付けます。

version: "3"
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
  redis:
    image: redis:alpine

この Docker Compose ファイルは、2 つのサービスを定義しています。

  • web: ローカルディレクトリからコンテンツを提供する Nginx Web サーバー
  • redis: キャッシュまたはセッションデータを保存するための Redis データベース

Ctrl+O を押して Enter キーを押し、ファイルを保存し、Ctrl+X を押して nano を終了します。

HTML コンテンツの作成

Web サービスが提供する簡単な HTML ページを作成しましょう。

mkdir -p html
nano html/index.html

次の内容をファイルにコピーして貼り付けます。

<!DOCTYPE html>
<html>
  <head>
    <title>Docker Compose Test</title>
  </head>
  <body>
    <h1>Hello from Docker Compose!</h1>
    <p>If you can see this, your Docker Compose setup is working correctly.</p>
  </body>
</html>

Ctrl+O を押して Enter キーを押し、ファイルを保存し、Ctrl+X を押して nano を終了します。

Docker Compose プロジェクトの実行

次に、Docker Compose プロジェクトを開始しましょう。

docker-compose up -d

-d フラグは、コンテナをバックグラウンドで実行します(デタッチモード)。次のような出力が表示されるはずです。

Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1   ... done
Creating docker-compose-test_redis_1 ... done

サービスの検証

サービスが正しく実行されていることを確認しましょう。

docker-compose ps

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

           Name                         Command               State          Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp
docker-compose-test_web_1     /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8080->80/tcp

Web アプリケーションへのアクセス

これで、LabEx インターフェースで Web ブラウザを開き、http://localhost:8080 に移動して、Web アプリケーションにアクセスできます。「Hello from Docker Compose!」メッセージが表示されるはずです。

または、curl を使用して、コマンドラインから Web サーバーを確認することもできます。

curl http://localhost:8080

先ほど作成した HTML コンテンツが表示されるはずです。

Docker Compose プロジェクトの停止

テストが完了したら、Docker Compose プロジェクトを停止できます。

docker-compose down

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

Stopping docker-compose-test_web_1   ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1   ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default

おめでとうございます!Docker Compose を正常にインストールし、「command not found」エラーを解決し、簡単なマルチコンテナアプリケーションでセットアップをテストしました。

まとめ

この実験では、以下の方法を学びました。

  1. マルチコンテナアプリケーションの管理における Docker Compose の役割を理解する
  2. システムに Docker Compose をインストールする
  3. 「zsh: command not found: docker-compose」エラーのトラブルシューティングと解決
  4. Docker Compose を使用して、シンプルなマルチコンテナアプリケーションを作成し、実行する

これらのスキルは、Docker と Docker Compose を使用するための確固たる基盤を提供します。これで、Docker Compose を自信を持って使用して、複雑なマルチコンテナアプリケーションを定義、デプロイ、および管理できます。

さらに学習するには、環境変数、ネットワーク、ボリューム、およびスケーリングサービスなど、より高度な Docker Compose の機能を検討してください。また、本番環境での Docker Compose について、および CI/CD パイプラインとの統合方法についても学習することをお勧めします。