sql >> データベース >  >> NoSQL >> Redis

macOS10.12上の2つのDockerコンテナ間の通信

    各コンテナには独自のローカルホストがあります

    各サービスは独自のコンテナで実行されます。 Ubuntuコンテナの観点からは、redisはローカルホストでリッスンしていません。

    Dockerネットワークを使用する

    コンテナーが通信できるようにするには、コンテナーが同じDockerネットワーク上にある必要があります。これは3つのステップで構成されています:

    1. Dockerネットワークを作成する
    2. コンテナに名前を付けます
    3. 作成したネットワークにコンテナを接続します

    これにより、コンテナは、ホスト名であるかのように名前を使用して相互に通信できます。

    この猫の皮を剥ぐ方法は複数あります...この回答では2つを見ていきますが、私がよく知らない方法が他にもいくつかあると思います(たとえば、KubernetesやSwarmを使用するなど)。

    手作業で行う

    docker networkを使用して、このアプリケーションのネットワークを作成できます コマンド。

    # Show the current list of networks
    docker network ls
    
    # Create a network for your app
    docker network create my_redis_app
    

    redisコンテナを実行するときは、名前があり、このネットワーク上にあることを確認してください。必要に応じて、ポートを外部に(macOSに)公開できます(-pを使用) )、ただし、他のコンテナがredisと通信するためだけに必要なわけではありません。

    docker run -d -p 6379:6379 --name redis_server --network my_redis_app <IMAGE ID>
    

    次に、Ubuntuコンテナを実行します。必要に応じて名前を付けることもできますが、この例ではサービスが実行されていないため、この例では気にしません。

    docker run -it --network my_redis_app ubuntu bash
    

    これで、Ubuntuコンテナー内から、redis_serverという名前を使用してredisにアクセスできるようになります。 、DNS名であるかのように。

    作成を使用して行う

    YAMLファイル(IMO)に書き込む方が簡単なため、Composeを使用してこのようなセットアップを構築する傾向があります。上記の例をdocker-compose.yml形式で書き直しました:

    version: '2'
    services:
      redis:
        image: <IMAGE ID>
        networks:
          - my_redis_app
        ports: 6379:6379
      ubuntu:
        image: ubuntu:latest
        networks:
          - my_redis_app
    networks:
      my_redis_app:
        driver: bridge
    

    これが適切な場所にあると、docker-compose up -d redisを実行できます。 特定のDockerネットワークを使用してredisサービスをオンラインにします。まだ存在しない場合は、Composeがネットワークを作成します。

    Ubuntuコンテナをそのように実行することはあまり意味がありません...もちろんインタラクティブです。ただし、redisを実行したら、ある種のアプリケーションコンテナを追加し、おそらくnginxのようなWebプロキシを追加することを想定しています...他のコンテナをservicesに配置するだけです。 同様に、それらをすべて一緒に管理できます。

    ubuntu以降 インタラクティブであるため、インタラクティブに実行できます:

    # without -d, container is run interactively
    docker-compose run ubuntu bash
    

    そして今Ubuntuでは、その名前を使用してredisに接続できるはずです。この例では単にredis




    1. Spring BootAppRedisとSpringBootSessionGlobalRedisを分離する方法

    2. 文字列からObjectIdへの_idフィールドでのMongodb結合

    3. MongoDBのパフォーマンスを追跡しますか?

    4. MongoDBAtlasを使用してクラウドにデータベースクラスターを作成する