Docker ネットワーク・プレイグラウンド

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

はじめに

Docker ネットワークはコンテナ・オーケストレーションの基本的な側面であり、コンテナ同士や外部ネットワークとの通信を可能にします。このチャレンジでは、ネットワークの作成と管理から、コンテナの接続と切断まで、Docker ネットワークの重要な概念をガイドします。

このチャレンジを完了することで、Docker ネットワークコマンドの実践的な経験を積み、コンテナ間の通信をセットアップする方法を理解できます。これらのスキルは、Docker 環境でマルチコンテナアプリケーションを開発およびデプロイするために不可欠です。

それでは、Docker ネットワークの世界に飛び込んでみましょう!

ネットワークの作成

このステップでは、最初の Docker ネットワークを作成します。これはコンテナを接続し、コンテナ間の通信を可能にするための基礎となります。

タスク

  1. docker network create コマンドを使用して、my-network という名前の新しいブリッジネットワーク(bridge network)を作成してください。
  2. すべての Docker ネットワークをリスト表示して、ネットワークが作成されたことを確認してください。

要件

  • すべての操作は /home/labex/project ディレクトリで行ってください。
  • ネットワーク作成時には、デフォルトのブリッジドライバを使用してください。

このステップを完了した後、docker network ls を実行すると my-network が表示されるはずです:

NETWORK ID     NAME         DRIVER    SCOPE
abcdef123456   my-network   bridge    local

ネットワーク内でのコンテナの起動

ネットワークが作成できたので、いくつかのコンテナを起動して接続してみましょう。このステップでは、特定のネットワーク内でコンテナを開始する方法を学びます。これは Docker ネットワークにおける重要な概念です。

タスク

  1. nginx イメージを使用して container1 という名前のコンテナを起動し、my-network に接続してください。
  2. httpd イメージを使用して container2 という名前の別のコンテナを起動し、my-network に接続してください。
  3. 両方のコンテナが実行中であり、my-network に接続されていることを確認してください。

要件

  • すべての操作は /home/labex/project ディレクトリで行ってください。
  • コンテナを起動する際、--network フラグを使用して my-network に接続してください。
  • 両方のコンテナをデタッチドモード(バックグラウンド)で実行してください。

このステップを完了した後、docker ps を使用すると両方のコンテナが実行されているのが確認できるはずです:

CONTAINER ID   IMAGE   COMMAND   CREATED         STATUS         PORTS     NAMES
abcdef123456   nginx   "..."     2 minutes ago   Up 2 minutes   80/tcp    container1
fedcba654321   httpd   "..."     2 minutes ago   Up 2 minutes   80/tcp    container2

接続テスト

このステップでは、作成したネットワークを介してコンテナ同士が通信できることを確認します。これは、ネットワーク設定が期待通りに機能しているかを確認するための重要なテストです。

タスク

  1. docker exec コマンドを使用して、container1 内でシェルを実行してください。
  2. container1 の内部から、curl コマンドを使用してコンテナ名で container2 にアクセスしてください。

要件

  • すべての操作は /home/labex/project ディレクトリで行ってください。
  • curl コマンドのホスト名として container2 を使用してください。
  • curl コマンドは container2 のデフォルト HTTP ポート(80)にアクセスする必要があります。

container1 から curl コマンドを実行した後、デフォルトの Apache HTTP Server ページのコンテンツが表示されるはずです:

<!DOCTYPE html>
<html><body><h1>It works!</h1></body></html>

コンテナを複数のネットワークに接続する

このステップでは、1 つのコンテナを複数のネットワークに接続する方法を学びます。これは、複雑なネットワークトポロジを作成したり、ネットワーク間でサービスを段階的に移行したりする際に役立つ高度な概念です。

タスク

  1. my-network2 という名前の新しいブリッジネットワークを作成してください。
  2. container2my-network への接続を維持したまま、my-network2 に接続してください。
  3. container2 が両方のネットワークに接続されていることを確認してください。

要件

  • すべての操作は /home/labex/project ディレクトリで行ってください。
  • docker network connect コマンドを使用して、container2my-network2 に追加してください。
  • docker inspect コマンドを使用して、ネットワーク接続を確認してください。

container2my-network2 に接続した後、コンテナをインスペクト(詳細確認)すると、両方のネットワークがリストされているはずです:

"Networks": {
    "my-network": {
        ...
    },
    "my-network2": {
        ...
    }
}

ネットワークからコンテナを切断する

このステップでは、コンテナを停止させずにネットワークから削除する方法を学びます。これは、コンテナを隔離する必要がある場合や、ネットワーク構成を再編成する場合に便利です。

タスク

  1. docker network disconnect コマンドを使用して、container2my-network から切断してください。
  2. container2my-network に接続されていないことを確認してください。

要件

  • すべての操作は /home/labex/project ディレクトリで行ってください。
  • docker network disconnect コマンドを使用して、my-network から container2 を削除してください。
  • docker network inspect コマンドを使用して、切断を確認してください。

container2my-network から切断した後、my-network をインスペクトしても container2 は表示されないはずです:

$ docker network inspect my-network
[
    {
        "Name": "my-network",
        ...
        "Containers": {
            "container1": {
                ...
            }
        },
        ...
    }
]

ネットワークの削除

最後のステップでは、不要になった Docker ネットワークを削除する方法を学びます。未使用のリソースを適切にクリーンアップすることは、Docker 環境を効率的に管理するための重要な一部です。

タスク

  1. container2 がまだ接続されている場合は、my-network2 から切断してください。
  2. docker network rm コマンドを使用して、my-network2 ネットワークを削除してください。
  3. my-network2 が削除されたことを確認してください。

要件

  • すべての操作は /home/labex/project ディレクトリで行ってください。
  • ネットワークを削除する前に、どのコンテナも my-network2 に接続されていないことを確認してください。
  • docker network ls コマンドを使用して、ネットワークの削除を確認してください。

my-network2 を削除した後、docker network ls を実行してもリストに表示されないはずです:

NETWORK ID     NAME         DRIVER    SCOPE
abcdef123456   my-network   bridge    local
ghijkl789012   bridge       bridge    local
mnopqr345678   host         host      local
stuvwx901234   none         null      local

まとめ

Docker ネットワーク基礎チャレンジの完了、おめでとうございます!以下の Docker ネットワークの重要な概念をマスターしました:

  1. カスタム Docker ネットワークの作成
  2. 特定のネットワーク内でのコンテナの起動
  3. コンテナ間接続のテスト
  4. コンテナの複数ネットワークへの接続
  5. ネットワークからのコンテナの切断
  6. Docker ネットワークの削除

これらのスキルは、効果的な Docker ネットワーク管理の基礎となり、より複雑なコンテナ化アプリケーションを扱う際に非常に役立ちます。適切なネットワーク構成は、コンテナの分離、セキュリティ、およびサービス間の効率的な通信にとって極めて重要であることを忘れないでください。

このチャレンジを通じて、コンテナ用の隔離された環境を作成し、それらの間の通信を可能にし、ネットワーク接続を動的に管理する方法を学びました。これらの機能により、変化する要件に適応できる高度なネットワークアーキテクチャを設計できるようになります。

Docker の学習を続けるにあたって、マルチホスト設定用のオーバーレイネットワーク(overlay networks)、ネットワークプラグイン、Docker ネットワークが Kubernetes などのコンテナ・オーケストレーション・プラットフォームとどのように統合されるかなど、より高度なトピックを探索することを検討してください。また、ネットワークポリシーを使用してコンテナ間のトラフィックフローを制御する方法など、ネットワークセキュリティの概念を深く掘り下げるのも良いでしょう。

これらのスキルを練習し続けることで、将来のプロジェクトで洗練されたコンテナネットワークアーキテクチャを設計・管理できるようになります。効果的なネットワーキングは、スケーラブルで安全、かつ効率的なコンテナ化アプリケーションを構築するための鍵です。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習