Docker Compose ネットワーク設定の説明

Docker Compose ネットワーク設定の説明

基本概念

デフォルトでは、Compose はアプリケーション用のネットワークを作成し、サービスの各コンテナがそのネットワークに参加します。このようにして、ネットワーク内の他のコンテナからコンテナにアクセスできるようになります。それだけでなく、サービス名をホスト名として使用して他のコンテナからコンテナにアクセスすることもできます。

デフォルトでは、アプリケーションのネットワーク名は Compose プロジェクト名に基づいており、そのプロジェクト名は docker-compose.yml ファイルが配置されているディレクトリの名前に基づいています。プロジェクト名を変更するには、--project-name フラグまたは COMPOSE_PORJECT_NAME 環境変数を使用します。

たとえば、アプリケーションがmyappというディレクトリにあり、docker-compose.ymlが次のようになっている場合: version: '2'

サービス:
 ウェブ:
 建てる: 。
 ポート:
  - 「8000:8000」
 デシベル:
 画像: postgres

docker-compose up を実行すると、次の手順が実行されます。

  • myapp_default というネットワークを作成します。
  • Web サービス構成を使用してコンテナーを作成し、名前が「web」のネットワーク myapp_default に参加させます。
  • db サービスの構成を使用してコンテナが作成され、"db" という名前でネットワーク myapp_default に参加します。

コンテナは、サービス名 (web または db) をホスト名として使用して相互にアクセスできます。たとえば、Web サービスは postgres://db:5432 を使用して db コンテナーにアクセスできます。

コンテナの更新

サービスの構成が変更された場合は、docker-compose up コマンドを使用して構成を更新できます。

この時点で、Compose は古いコンテナを削除し、新しいコンテナを作成します。新しいコンテナは異なる IP アドレスでネットワークに参加しますが、名前は同じままです。古いコンテナへの接続はすべて閉じられ、コンテナは新しいコンテナを見つけて接続します。前の記事で述べたように、デフォルトでは、サービスはサービス名を使用して相互にアクセスできます。

リンク

エイリアスを定義し、そのエイリアスを使用して他のサービスにアクセスできるようにします。例: バージョン: '2'

サービス:
 ウェブ:
 建てる: 。
 リンク:
  - 「db:データベース」
 デシベル:
 画像: postgres

このようにして、Web サービスは db または database をホスト名として使用して db サービスにアクセスできます。

カスタムネットワークの指定

シナリオによっては、デフォルトのネットワーク構成ではニーズを満たせない場合があります。この場合、networks コマンドを使用してネットワークをカスタマイズできます。 networks コマンドを使用すると、より複雑なネットワーク トポロジを作成し、カスタム ネットワーク ドライバーとオプションを指定できます。それだけでなく、ネットワークを使用して、Compose によって管理されていない外部で作成されたネットワークにサービスを接続することもできます。

以下に示すように、 2 つのカスタム ネットワークを定義します。バージョン: '2'

サービス:
 プロキシ:
 ビルド: ./proxy
 ネットワーク:
  - フロント
 アプリ:
 ビルド: ./app
 ネットワーク:
  - フロント
  - 戻る
 デシベル:
 画像: postgres
 ネットワーク:
  - 戻る

ネットワーク:
 フロント:
 # カスタムドライバーを使用する
 ドライバー: カスタムドライバー 1
 戻る:
 # 特別なオプションを取るカスタムドライバーを使用する
 ドライバー: カスタムドライバー2
 ドライバーオプション:
  : "1"
  バー: "2"

プロキシ サービスは DB サービスから分離されており、それぞれ独自のネットワークを使用します。アプリ サービスは両方と通信できます。

この例から、networks コマンドを使用すると、ネットワークの分離とサービス間の接続を簡単に実現できることが簡単にわかります。

デフォルトネットワークの設定

ネットワークをカスタマイズするだけでなく、デフォルト ネットワークの構成をカスタマイズすることもできます。バージョン: '2'

サービス:
 ウェブ:
 建てる: 。
 ポート:
  - 「8000:8000」
 デシベル:
 画像: postgres

ネットワーク:
 デフォルト:
 # カスタムドライバーを使用する
 ドライバー: カスタムドライバー 1

この方法では、アプリケーションにカスタム ネットワーク ドライバーを指定できます。

既存のネットワークを使用する

シナリオによっては、新しいネットワークを作成する必要はなく、既存のネットワークに参加するだけでよい場合があります。この場合は、外部オプションを使用できます。例:

ネットワーク:
 デフォルト:
 外部の:
  名前: 既存のネットワーク

Docker Compose で外部コンテナをリンクするいくつかの方法

Docker では、コンテナ間のリンクは非常に一般的な操作です。これにより、必要なポートを Docker ホストに公開せずに、コンテナの 1 つのネットワーク サービスにアクセスできるようになります。 Docker Compose でのこの機能のサポートも非常に便利です。ただし、リンクする必要があるコンテナが同じ docker-compose.yml 内に定義されていない場合は、少し面倒で複雑になります。

Docker Compose を使用しない場合、--link パラメータを使用して 2 つのコンテナをリンクするのは比較的簡単です。nginx イメージを例に挙げます。

docker run --rm --name test1 -d nginx #インスタンスtest1を起動します
docker run --rm --name test2 --link test1 -d nginx #インスタンス test2 を起動し、test1 とのリンクを確立します

このようにして、test2 と test1 の間にリンクが確立され、test2 で test1 のサービスにアクセスできるようになります。 Docker Compose を使用すると、これはさらに簡単になります。上記の nginx イメージを例にとると、docker-compose.yml ファイルを次のように編集します。

バージョン: "3"
サービス:
 テスト2:
 画像: nginx
 依存:
  -テスト1
 リンク:
  -テスト1
 テスト1:
 画像: nginx

最終的な効果は、通常の Docker コマンド docker run xxxx を使用して確立されたリンクと変わりません。これはまさに最も理想的な状況です。

同じ docker-compose.yml ファイルで定義されていないコンテナをリンクするにはどうすればよいですか?

docker-compose.yml ファイルで定義されたコンテナを、docker run xxx によって起動されたコンテナにリンクする必要がある場合はどうすればよいですか?

これら 2 つの典型的な状況に対する私の個人的なテスト ソリューションは次のとおりです。

方法1: リンクするコンテナを同じ外部ネットワークに所属させる

このようなシナリオをシミュレートするために、引き続き nginx イメージを使用します。Docker Compose によって管理される 2 つの nginx コンテナ (test1 と test2) をリンクして、test2 が test1 によって提供されるサービスにアクセスできるようにする必要があるとします。ここでは、ping を標準として使用します。

まず、コンテナ test1 の docker-compose.yml ファイルの内容を次のように定義します。

バージョン: "3"
サービス:
 テスト2:
 画像: nginx
 コンテナ名: test1
 ネットワーク:
  - デフォルト
  - アプリネット
ネットワーク:
 アプリネット:
 外部: 真

コンテナ test2 の内容は、external_links が追加されていることを除いて、基本的に test1 と同じです。最近リリースされた Docker バージョンでは、コンテナをリンクするために external_links を使用する必要がなくなったことに注意してください。コンテナの DNS サービスが正しい判断を行うことができます。したがって、古いバージョンの Docker と互換性を持たせる必要がある場合、コンテナ test2 の docker-compose.yml ファイルの内容は次のようになります。

バージョン: "3"
サービス:
 テスト2:
 画像: nginx
 ネットワーク:
  - デフォルト
  - アプリネット
 外部リンク:
  -テスト1
 コンテナ名: test2
ネットワーク:
 アプリネット:
 外部: 真

それ以外の場合、test2 の docker-compose.yml の定義は test1 とまったく同じであり、追加の external_links を指定する必要はありません。関連する質問については、stackoverflowの関連質問を参照してください:docker-compose + 外部コンテナ

ご覧のとおり、両方のコンテナは定義で同じ外部ネットワーク app_net を使用しています。したがって、次のコマンドを使用して 2 つのコンテナを起動する前に、外部ネットワークを作成する必要があります。

docker ネットワーク app_net を作成します

その後、docker-compose up -d コマンドで 2 つのコンテナを起動し、docker exec -it test2 ping test1 を実行します。次の出力が表示されます。

docker exec -it test2 ping test1

PING test1 (172.18.0.2): 56データバイト
172.18.0.2 からの 64 バイト: icmp_seq=0 ttl=64 time=0.091 ms
172.18.0.2 からの 64 バイト: icmp_seq=1 ttl=64 time=0.146 ms
172.18.0.2 からの 64 バイト: icmp_seq=2 ttl=64 time=0.150 ms
172.18.0.2 からの 64 バイト: icmp_seq=3 ttl=64 time=0.145 ms
172.18.0.2 からの 64 バイト: icmp_seq=4 ttl=64 time=0.126 ms
172.18.0.2 からの 64 バイト: icmp_seq=5 ttl=64 time=0.147 ms

これは、2 つのコンテナが正常にリンクされていることを証明します。逆に、test1 で pingtest2 を正常に ping することもできます。

docker run --rm --name test3 -d nginx を使用してコンテナ (test3) を起動し、コンテナが属する外部ネットワークを指定せず、コンテナを test1 または test2 にリンクする必要がある場合は、外部ネットワークを手動でリンクできます。

docker ネットワーク接続 app_net test3

このようにして、3 つのコンテナーは相互にアクセスできるようになります。

方法2: リンクするコンテナのネットワークモードを変更する

これは、相互にリンクするコンテナのネットワーク モードをブリッジに変更し、リンクする必要がある外部コンテナ (external_links) を指定することによって実行できます。同じ外部ネットワークに属するコンテナーが相互にアクセスできるリンク モード 1 とは異なり、このアクセスは一方向です。 nginx コンテナ イメージを例にとると、コンテナ インスタンス nginx1 がコンテナ インスタンス nginx2 にアクセスする必要がある場合、nginx2 の docker-compose.yml 定義は次のようになります。

バージョン: "3"
サービス:
 nginx2:
 画像: nginx
 コンテナ名: nginx2
 ネットワークモード: ブリッジ

それに応じて、nginx1 の docker-compose.yml は次のように定義されます。

バージョン: "3"
サービス:
 nginx1:
 画像: nginx
 外部リンク:
  - nginx2
 コンテナ名: nginx1
 ネットワークモード: ブリッジ

external_links は省略できず、nginx1 は nginx2 の後に起動する必要があることに注意してください。そうしないと、コンテナ nginx2 が見つからないというエラーが報告される可能性があります。次に、ping を使用して接続をテストします。

$ docker exec -it nginx1 ping nginx2 # nginx1 から nginx2 へ
PING nginx2 (172.17.0.4): 56 データバイト
172.17.0.4 からの 64 バイト: icmp_seq=0 ttl=64 time=0.141 ms
172.17.0.4 からの 64 バイト: icmp_seq=1 ttl=64 time=0.139 ms
172.17.0.4 からの 64 バイト: icmp_seq=2 ttl=64 time=0.145 ms

$ docker exec -it nginx2 ping nginx1 #nginx2 から nginx1 へ
ping: 不明なホスト

上記により、この方法が一方向の接続であることが十分に証明されます。

実際のアプリケーションでは、必要に応じてこれら 2 つのリンク方法を柔軟に選択できます。面倒な場合は、2 番目の方法を選択できます。ただし、私は最初の方法の方をお勧めします。ネットワーク モードを変更するよりも簡単な 2 番目の方法の方が、接続性と柔軟性の点でユーザー フレンドリーであることは明らかです。

添付の docker-compose.yml ファイルには、Compose と Docker の互換性について説明されています。

 Compose ファイル形式には 1、2.x、3.x の 3 つのバージョンがあります。
 現在の主流は 3.x で、docker 1.13.0 以上をサポートしています。共通パラメータ:
 version #compose ファイルのバージョンを指定しますservices #すべてのサービス情報を定義します。services の下の第一レベルのキーはサービスの名前ですbuild #ビルド コンテキストを含むパスを指定するか、context と指定された Dockerfile ファイルおよび args パラメータ値を持つオブジェクトとして指定しますcontext #context: Dockerfile ファイルが配置されているパスを指定しますdockerfile #dockerfile: context で指定されたディレクトリの下の Dockerfile の名前を指定します (デフォルトは Dockerfile)
   args # args: ビルドプロセス中に Dockerfile に必要なパラメータ (docker container build --build-arg と同等)
   cache_from # v3.2 の新しいパラメータ。キャッシュされたイメージ リストを指定します (docker container build --cache_from と同等)
   labels # v3.3 の新しいパラメータ。イメージのメタデータを設定します (docker container build --labels の機能に相当)
   shm_size # v3.5 の新しいパラメータ。コンテナの /dev/shm パーティションのサイズを設定します (docker container build --shm-size と同等)

  command # コンテナの起動後に実行されるデフォルトのコマンドをオーバーライドします。シェル形式と [] 形式をサポートします。 configs # cgroup_parent の使い方がわかりません。 # container_name の使い方がわかりません。 # コンテナの名前を指定します (docker run --name と同等)

  credential_spec # deploy の使い方がわかりません # バージョン v3 以上では、サービスのデプロイと実行に関連する構成を指定します。deploy 部分は docker stack によって使用され、docker stack は docker swarm に依存します
   endpoint_mode # v3.3 の新機能。サービスの公開方法を指定します。vip # Docker はサービスに仮想 IP (VIP) を割り当てます。クライアントはこれを使用してサービスにアクセスします。dnsrr # DNS ラウンドロビン。Docker はサービスの DNS エントリを設定します。これにより、サービス名の DNS クエリは IP アドレスのリストを返し、クライアントはアドレスの 1 つに直接アクセスします。labels # サービスのラベルを指定します。これはサービスにのみ設定されます。mode # deploy のモードを指定します。global # 各クラスター ノードには、コンテナーが 1 つだけあります。replicated # ユーザーはクラスター内のコンテナーの数を指定できます (デフォルト)
   placement # 使い方が分からない replicas # デプロイモードがレプリケートの場合、コンテナのコピー数を指定する resources # リソース制限 limits # コンテナのリソース制限を設定する cpus: "0.5" # コンテナが最大で CPU の 50% のみを使用するように設定する 
     メモリ: 50M # コンテナが最大 50M のメモリ空間予約を使用するように設定します # コンテナ用に予約されたシステム リソースを設定します (いつでも使用可能)
     cpus: "0.2" # このコンテナ用にCPUの20%を予約します
     memory: 20M # コンテナ用に 20M のメモリ領域を予約します restart_policy # コンテナの再起動ポリシーを定義します。再起動パラメータを置き換えるために使用されます condition # コンテナの再起動ポリシーを定義します (3 つのパラメータを受け入れます)
     none # 再起動を試みない on-failure # コンテナ内のアプリケーションに問題がある場合にのみ再起動する any # とにかく再起動を試みる (デフォルト)
    delay # 再起動の試行間隔(デフォルトは0秒)
    max_attempts # 再起動の試行回数(デフォルトでは常に再起動を試みます)
    window # 再起動が成功したかどうかを確認するまでの待機時間(つまり、コンテナが起動した場合、コンテナが正常かどうかを確認するのに何秒かかるか、デフォルトは 0 秒です)
   update_config # ローリング更新構成を構成するために使用します parallelism # 一度に更新されるコンテナの数 delay # コンテナのグループを更新する間隔 failure_action # 失敗した更新の戦略を定義します continue # 更新を続行します rollback # 更新をロールバックします pause # 更新を一時停止します (デフォルト)
    monitor # 更新が失敗したかどうかを監視する各更新後の期間 (単位: ns|us|ms|s|m|h) (デフォルト 0)
    max_failure_ratio # ロールバック中に許容される失敗率(デフォルト値は 0)
    order # v3.4 の新しいパラメータ、ロールバック中の操作の順序 stop-first # 新しいタスクを開始する前に古いタスクを停止します (デフォルト)
     start-first #新しいタスクを最初に開始し、実行中のタスクは一時的に重複します rollback_config #v3.7 で追加された新しいパラメータで、update_config が更新に失敗した場合のロールバック戦略を定義するために使用されます parallelism #一度にロールバックするコンテナの数。0 に設定すると、すべてのコンテナが同時にロールバックされます delay #各グループのロールバック間の時間間隔 (デフォルトは 0)
    failure_action # ロールバック失敗戦略を定義します continue # ロールバックを続行します pause # ロールバックを一時停止します monitor # 各ロールバックタスク後の失敗を監視する期間 (単位: ns|us|ms|s|m|h) (デフォルトは 0)
    max_failure_ratio # ロールバック中に許容される失敗率(デフォルト値 0)
    order # ロールバック中の操作の順序 stop-first # 新しいタスクを開始する前に古いタスクを停止します (デフォルト)
     start-first # 最初に新しいタスクを開始すると、実行中のタスクが一時的に重複します。注意:
    docker-compose up と docker-compose run はサポートされますが、docker stack deploy サブオプション security_opt container_name devices tmpfs stop_signal links cgroup_parent はサポートされません。
    network_mode external_links 再起動 ビルド userns_mode sysctls

  devices #デバイスマッピングリストを指定します(docker run --deviceと同等)

  depends_on #コンテナの起動順序を定義します(このオプションはコンテナ間の依存関係を解決し、v3 で swarm デプロイメントを使用する場合は無視されます)
   例:
    docker-compose up は依存関係の順序でサービスを起動します。次の例では、redis サービスと db サービスが web サービスの前に起動されます。デフォルトでは、docker-compose up web で web サービスを起動すると、設定ファイルで依存関係 version: '3' が定義されているため、redis サービスと db サービスも起動されます。
    サービス:
     ウェブ:
      建てる: 。
      依存:
       -db  
       - レディス 
     レディス:
      画像: redis
     デシベル:
      画像: postgres       

  dns # DNS アドレスを設定します (docker run --dns と同等)

  dns_search # DNS 検索ドメインを設定します (docker run --dns-search と同等)

  tmpfs # バージョン v2 以上では、コンテナの一時ファイルシステムとしてディレクトリをコンテナにマウントします (docker run --tmpfs と同等ですが、このオプションは swarm デプロイメントを使用する場合は無視されます)

  entrypoint # コンテナのデフォルトのエントリポイント命令を上書きします(docker run --entrypointと同等)

  env_file # 指定されたファイルから変数を読み取り、コンテナ内の環境変数として設定します。単一の値またはファイルのリストにすることができます。複数のファイル内の変数が同じ名前の場合、後者の変数が前者の変数を上書きし、environment の値が env_file の値を上書きします。ファイル形式:
    RACK_ENV=開発

  environment #環境変数を設定します。environmentの値はenv_fileの値を上書きできます(docker run --envの機能に相当)

  expose # ポートを公開しますが、Dockerfile の EXPOSE 命令と同様に、ホストとのマッピング関係を確立しません。external_links # docker-compose.yml で定義されていない、または compose によって管理されていないコンテナーに接続します (docker run によって開始されたコンテナー。バージョン v3 で swarm デプロイメントを使用する場合、このオプションは無視されます)

  extra_hosts # コンテナ内の /etc/hosts にホストレコードを追加します (docker run --add-host と同等)

  healthcheck # バージョン v2.1 以降では、Dockerfiletest の HEALTHCHECK 命令に似たコンテナ ヘルス チェックを定義します # コンテナの状態を確認するコマンド。このオプションは文字列またはリストである必要があります。最初の項目は NONE、CMD、または CMD-SHELL である必要があります。文字列の場合は、CMD-SHELL に文字列 NONE を加えたものと同じです # コンテナ ヘルス チェックを無効にします CMD # test: ["CMD", "curl", "-f", "http://localhost"]
    CMD-SHELL # test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] または test: curl -f https://localhost || exit 1
   interval: 1m30s # 各チェックの間隔timeout: 10s # コマンド実行のタイムアウトretries: 3 # 再試行回数start_period: 40s # v3.4 以降の新オプション。コンテナの起動間隔を定義しますdisable: true # true または false。ヘルス ステータスの検出と無効化の有無を示します test: NONESame as image # Docker イメージを指定します。リモート リポジトリ イメージまたはローカル イメージを指定できますinit # v3.7 の新パラメータ。true または false で、コンテナ内で init を実行するかどうかを示します。init はシグナルを受信して​​プロセスに渡しますisolation # 分離コンテナ テクノロジ。Linux ではデフォルト値のみがサポートされていますlabels # Docker ラベルを使用してコンテナにメタデータを追加します。Dockerfile の LABELS に似ていますlinks # 他のサービス内のコンテナへのリンク。このオプションは docker のレガシー オプションであり、ユーザー定義のネットワーク名前空間に置き換えられており、最終的には廃止される可能性があります (このオプションは swarm デプロイメントを使用する場合は無視されます)

  ロギング # コンテナ ログ サービス ドライバーを設定します # ロギング ドライバーを指定します。デフォルトは json-file です (docker run --log-driver と同等)
   オプション #ログ関連のパラメータを指定します (docker run --log-opt と同等)
    max-size # ログファイルのサイズを設定します。この値に達すると、ログはロールオーバーされます。 max-file # 保持するログファイルの数 network_mode # ネットワークモードを指定します (docker run --net と同等、このオプションは swarm デプロイメントを使用する場合は無視されます)  

  networks # 指定されたネットワークにコンテナを追加します (docker network connect の機能に相当)。networks は、compose ファイルの最上位キーとサービスのキーのセカンダリ キーに配置できます。aliases # 同じネットワーク上のコンテナは、サービス名またはエイリアスを使用して、いずれかのサービスのコンテナに接続できます。ipv4_address # IP V4 形式ipv6_address # IP V6 形式例:
    バージョン: '3.7'
    サービス: 
     テスト: 
      イメージ: nginx:1.14-alpine
      コンテナ名: mynginx
      コマンド: ifconfig
      ネットワーク: 
       app_net: # 以下のネットワークで定義されている app_net ネットワークを呼び出します ipv4_address: 172.16.238.10
    ネットワーク:
     アプリネット:
      ドライバー: ブリッジ
      ipam:
       ドライバー: デフォルト
       設定:
        - サブネット: 172.16.238.0/24

  pid: 'host' # 共有ホストプロセス空間 (PID)

  ports # ホストとコンテナ間のポートマッピング関係を確立します。ports は 2 つの構文形式をサポートしています: 短い構文形式の例:
    - "3000" # コンテナのポート 3000 を公開します。Docker はホストのポートを未使用のポートにランダムにマッピングします。 - "3000-3005" # コンテナのポート 3000 から 3005 を公開します。Docker はホストのポートを未使用のポートにランダムにマッピングします。 - "8000:8000" # コンテナのポート 8000 をホストのポート 8000 にマッピングします。 - "9090-9091:8080-8081"
    - "127.0.0.1:8001:8001" #マッピングホストの指定アドレスを指定します - "127.0.0.1:5000-5010:5000-5010" 
    - "6060:6060/udp" #プロトコルを指定する LONG 構文形式の例: (v3.2 で新しく追加された構文形式)
    ポート:
     - target: 80 # コンテナポート公開: 8080 # ホストポート protocol: tcp # プロトコルタイプ mode: host # ホストは各ノードのホストポートを公開し、イングレスロードバランスは swarm モードポート secrets # 使用方法が不明 security_opt # 各コンテナのデフォルトラベルを上書きします (このオプションは swarm デプロイメントを使用する場合は無視されます)

  stop_grace_period #SIGTERM シグナルを送信した後、コンテナが終了するまでに何秒待つかを指定します (デフォルトは 10 秒)

  stop_signal #コンテナを停止するシグナルを指定します (デフォルトは SIGTERM で、kill PID と同等です。SIGKILL は kill -9 PID と同等です。このオプションは、swarm デプロイメントを使用する場合は無視されます)

  sysctls # コンテナ内のカーネルパラメータを設定します(このオプションは、スウォームデプロイメントを使用する場合は無視されます)

  ulimits # コンテナの制限を設定する

  userns_mode # Docker デーモンがユーザー名前空間で構成されている場合には、このサービスのユーザー名前空間を無効にします (このオプションは、スウォーム デプロイメントを使用する場合は無視されます)

  ボリューム # コンテナーとホスト間のボリューム マッピング関係を定義します。ネットワークと同様に、サービス キーのセカンダリ キーと、compose のトップ レベル キーに配置できます。サービス間で使用する必要がある場合は、トップ レベル キーで定義し、サービスで参照します。短い構文形式の例:
    ボリューム:
     - /var/lib/mysql # コンテナ内の /var/lib/mysql をホスト上のランダムなディレクトリにマップします - /opt/data:/var/lib/mysql # コンテナ内の /var/lib/mysql をホスト上の /opt/data にマップします
     - ./cache:/tmp/cache # コンテナ内の /var/lib/mysql をホストの構成ファイルの場所にマップします - ~/configs:/etc/configs/:ro # コンテナ ホストのディレクトリを読み取り専用権限でコンテナにマップします - datavolume:/var/lib/mysql # datavolume はボリュームの最上位キーによって定義されるディレクトリであり、LONG はここで直接呼び出されます。構文形式の例: (v3.2 で追加された新しい構文形式)
    バージョン: "3.2"
    サービス:
     ウェブ:
      画像: nginx:alpine
      ポート:
       - 「80:80」
      ボリューム:
       - type: volume # マウントのタイプ。bind、volume、tmpfs のいずれかである必要があります。
        source: mydata # ホスト ディレクトリtarget: /data # コンテナー ディレクトリvolume: # 追加オプションを構成します。そのキーは type の値と同じである必要がありますnocopy: true # ボリュームの追加オプション。ボリュームの作成時にコンテナーからのデータのコピーを無効にします-type: bind # ボリューム モードではコンテナー パスのみを指定する必要があり、ホスト パスはランダムに生成されます。bind ではコンテナーとデータ マシンのマッピング パスを指定する必要がありますsource: ./static
        ターゲット: /opt/app/static
        read_only: true # ファイルシステムを読み取り専用ファイルシステムボリュームに設定します:
     mydata: # ボリュームで定義され、すべてのサービスで再起動を呼び出すことができます # コンテナの再起動ポリシーを定義します (このオプションは、swarm デプロイメントを使用する場合は無視されます。swarm では restart の代わりに restart_policy を使用します)
   no # コンテナの自動再起動を無効にする(デフォルト)
   always # コンテナはどんな状況でも再起動します on-failure # on-failure エラーが発生すると、コンテナは再起動します その他のオプション:
   ドメイン名、ホスト名、ipc、mac_address、特権、読み取り専用、shm_size、stdin_open、tty、ユーザー、working_dir
   上記の各オプションは単一の値のみを受け入れ、時間の許容値に関しては docker run の対応するパラメータに似ています。
   2.5秒
   10秒
   1分30秒
   2時間32分
   5時間34分56秒
   時間単位: us、ms、s、m、h
  サイズの許容値:
   2b
   1024kb
   2048k
   300メートル
   1GB
   単位: b、k、m、g または kb、mb、gb
 networks # ネットワーク情報を定義しますdriver # ネットワーク モードを指定します。ほとんどの場合、単一のホストとオーバーレイをブリッジしますSwarmbridge # Docker では、デフォルトでブリッジを使用して単一のホスト上のネットワークを接続しますoverlay # オーバーレイ ドライバーは、複数のノードにまたがる名前付きネットワークを作成しますhost # 共有ホスト ネットワーク名前空間 (docker run --net=host と同等)
   none # docker run --net=none と同等
  driver_opts # バージョン v3.2 以上、ドライバーに渡されるパラメーター。これらのパラメーターはドライバーによって異なります。attachable # ドライバーはオーバーレイ時に使用され、true に設定すると、サービスに加えて、独立したコンテナーもネットワークに接続できます。独立したコンテナーがネットワークに接続されている場合、他の Docker デーモンに接続されているネットワークのサービスや独立したコンテナーと通信できます。ipam # カスタム IPAM 構成。これは複数の属性を持つオブジェクトで、それぞれはオプションです。driver # IPAM ドライバー、ブリッジ、またはデフォルト
   config # 設定項目 subnet # CIDR 形式のサブネット。このネットワークのネットワーク セグメントを示します。 external # 外部ネットワーク。true に設定すると、docker-compose up はそれを作成しようとせず、存在しない場合はエラーが発生します。 name # v3.5 以降のバージョンでは、このネットワークの名前を設定します。 ファイル形式の例:
 バージョン: "3"
 サービス:
  レディス:
  画像: redis:alpine
  ポート:
   - 「6379」
  ネットワーク:
   -フロントエンド
  展開する:
   レプリカ: 2
   アップデート構成:
   並列処理: 2
   遅延: 10秒
   再起動ポリシー:
   条件: 失敗時
  デシベル:
  画像: postgres:9.4
  ボリューム:
   -db-data:/var/lib/postgresql/data
  ネットワーク:
   - バックエンド
  展開する:
   配置:
   制約: [node.role == manager]

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerのネットワークモードと設定方法
  • Docker は固定コンテナ IP アドレスを実現するためにカスタム ネットワークを作成します。
  • Dockerカスタムネットワーク実装

<<:  JavaScriptは検証コードと検証のランダム生成を実装します

>>:  Mysql Workbench クエリ mysql データベース メソッド

推薦する

mysql5.6 以前のデータベースで json をクエリする方法

MySQLにデータを保存するとき、乱雑であまり使用されないデータがJSONフィールドに投げ込まれるこ...

blockquote タグの使用に関する注意

<br />セマンティクス化は一言で説明することはできないし、まだ公式かつ厳密な定義もあ...

モバイル Web WAP には Bootstrap と jQuery Mobile のどちらを使用すべきか

問題を解決するBootstrap は、次の問題を解決する CSS フレームワークです。デバイス間での...

Zookeeperスタンドアロン環境とクラスタ環境の構築

1. 単一マシン環境の構築# 1.1 ダウンロードZookeeper の対応するバージョンをダウンロ...

docker pullがリセットされる問題を解決する

この記事では、docker pull がリセットされる問題を解決する方法を紹介し、皆さんと共有します...

Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順

struts2 アクションの実行後にジャンプした jsp が表示されると、css が機能しません。問...

Linux のソフトリンクとハードリンクの詳細な説明

目次1. ファイルとディレクトリの基本的な保存2. Inコマンドの紹介(1)lnコマンドの基本情報を...

VMware esxi6.5 のインストールと使用の詳細な手順

目次導入建築ESXIの利点vSphere とは何ですか? 2. 仮想マシンの利点3. 仮想マシンを使...

CSS における位置指定の概要

CSS には 4 種類の配置方法があり、シナリオによって効果が異なります。ここでは、これら 4 種類...

JavaScript で矢印関数を使用できないシナリオはどれですか

目次1. オブジェクトメソッドを定義する2. プロトタイプメソッドを定義する3. イベントコールバッ...

Linux サーバーに Java Web プロジェクトをデプロイするための完全なチュートリアル

この記事は主にインターネット上の他のチュートリアルを参考にしています。実際に操作した上でのまとめです...

ECMAScriptにおけるプリミティブ値と参照値の詳しい説明

目次序文動的プロパティとは何ですか?値のコピー値の種類を決定する要約する序文これは JavaScri...

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

MySQL の結合テーブルにインデックスを作成する方法

この記事では、MySQL で 2 つのテーブルを関連付ける結合テーブルにインデックスを作成する方法を...

MySQL システム ユーザーが開くことができるファイルの最大数に関する簡単な説明

本から学ぶことは常に浅はかで、これがさらなるダウンタイムを引き起こすことには決して気づきません......