Docker Compose の使用シナリオ開発時には、アプリケーションが複数のサービスに依存することがよくあります。従来の docker run 方式では、複数のサービスを 1 つずつ起動し、対応するネットワークを構成する必要があり、プロセスが面倒で不便です。 Docker Compose は、複数のサービスの構造と依存関係を 基本的なデモデモ関数は、Web サービスを公開する単純な Python プログラムです。このサービスは、現在のサービスがアクセスされた回数をカウントするために使用されます。時間の蓄積と保存はすべて Redis に基づいています。つまり、プログラム自体も、独自のサービスに加えて、Redis サービスに依存しています。詳細な手順は次のとおりです ディレクトリを見つけて、その中にPythonファイルapp.pyを作成します。 インポート時間 Redisをインポートする FlaskからFlaskをインポート アプリ = Flask(__name__) キャッシュ = redis.Redis(ホスト = 'redis'、ポート = 6379) get_hit_count() を定義します: 再試行 = 5 真の場合: 試す: cache.incr('hits') を返します redis.exceptions.ConnectionError を除き、exc として: 再試行 == 0 の場合: 昇給 再試行 -= 1 時間.睡眠(0.5) @app.route('/') デフハロー(): カウント = get_hit_count() 'Hello World! {} 回表示されました。\n' を返します。format(count) 同じフォルダにrequirements.txtファイルを作成します。 requirements.txt ファイルは、Python プログラムが使用する必要がある依存ライブラリを宣言するために使用されます。これは、Java の Maven pom ファイルに少し似ています。上記のコードで使用されているコンポーネントは、flask と redis です。 requirements.txtファイルの内容は フラスコ レディス 同じフォルダにDockerfileを作成します Dockerfile は、プログラムを Docker イメージにビルドするために使用されます。一般的に、Dockerfile は、コードを実行するための基本的な環境、プログラムの起動コマンド、実行ポートなどを定義します。この例のDockerfileは次のようになります。 python:3.7-alpine より WORKDIR /コード 環境変数 FLASK_APP=app.py 環境変数 FLASK_RUN_HOST=0.0.0.0 コピー requirements.txt requirements.txt pip install -r requirements.txt を実行します。 エクスポーズ5000 コピー 。 。 CMD ["フラスコ", "実行"] 同じファイル内にdocker-compose.ymlファイルを作成します。 上記の手順を完了すると、Docker 形式でサービスを実行できるようになります。ただし、このサービスは Redis サービスに依存します。そこで、docker-compose.yml を通じてサービスの依存関係を整理します。内容は次のようになります。 バージョン: "3.8" サービス: ウェブ: 建てる: 。 ポート: - 「5000:5000」 レディス: 画像: "redis:alpine" このファイルは、 web と redis の 2 つのサービスを定義します redis サービスは、既製のイメージ 基本的な操作とメンテナンスすべての docker-compose 関連コマンドは、docker-compose.yml が配置されているパスで実行する必要があります。 docker-compose.ymlに基づいてサービスを起動する docker-compose.yml が配置されているディレクトリで、コマンド docker-compose up は、compolse ファイル内のサービスとその依存関係を個別に起動することもできます。 作成サービスに対応するコンテナサービスリストを表示する docker-compose ps 出力例
サービス プレフィックス もちろん、Compose 内の一連のサービスは、最終的に一連のコンテナを起動します。そのため、 サービスコンテナを停止する docker-compose.yml が配置されているパスで、 サービスコンテナを停止し、対応するコンテナを削除します docker-compose.yml が配置されているパスでコマンドを使用する必要があります。 docker-compose ダウン サービスコンテナを停止し、対応するコンテナとボリュームデータを削除します。 docker-compose.yml が配置されているパスでコマンドを使用する必要があります。 docker-compose ダウン --volumes このコマンドはマウントされたホスト オペレーティング システム ファイルを削除しません。 該当サービスへのログイン方法 Compose にログインして特定のサービスを実行するには、次のコマンドを使用します。 docker-compose exec ***サービス名*** bash 指定した作成ファイルを表示する方法 docker-compose -f docker-compose.yml -f docker-compose.admin.yml でbackup_dbを実行します。 docker-compose up と docker-compose run の違いdocker-compose up は、compose ファイルに基づいてすべてのサービスを開始し、ポートを外部に公開します。 いくつかの拡張知識ポイント環境変数 docker-compose.yml の内容自体は変数プレースホルダーを使用でき、その特定の変数値は特定の環境変数で定義されるため、同じ docker-compose.yml ファイルでも環境によって実行動作が異なる場合があります。通常、依存サービスのイメージのタグ バージョンは環境ごとに異なる必要があります。 次に、docker-compose.ymlの対応するサービス構成でプレースホルダーを使用してタグを設定します。以下では ウェブ: 画像: "webapp:${TAG}" 上記で指定した変数に加えて、設定可能な Docker 組み込み変数がいくつかあります。これらは、Docker または Docker Compose の実行動作を構成するために使用されます。これらの組み込み変数は
具体的な意味については、https://docs.docker.com/compose/reference/envvars/ を参照してください。 プレースホルダー docker-compose.ymlで実行 compolseファイルでは、 ウェブ: 画像: "webapp:${TAG}" 環境: - タグ=dev docker-compose コマンドを実行する前にシェル環境変数を設定する $ エクスポート TAG=v2.0 $ docker-compose を起動します env_fileによる設定 デフォルトでは、docker-compose up はコマンド実行パス内の .env ファイルを検索し、変数置換の値を見つけます。.env ファイルは、key=value の形式で構成されます。例えば タグ=dev 環境変数の名前が .env でない場合、または現在のコマンド実行のパスにない場合は、 docker-compose --env-file ./config/.env.dev を起動します 構成ファイル内で直接、読み込むenv_fileを指定します バージョン: '3' サービス: API: 画像: 'node:6-alpine' 環境変数: ./Docker/api/api.env を参照してください。 環境: - NODE_ENV=本番 上記の変数値設定は高から低の順に優先順位が付けられます 最終的な有効な環境変数を表示する 最終的に有効な環境変数がわからない場合は、次のコマンドを使用して確認できます。 docker-compose で Web 環境を実行する プロジェクト名の設定 Compose に対応するサービスのグループには共通のプロジェクト名があり、これは Compose サービスのコンテナ名プレフィックスとネットワークプレフィックスに反映されます。 ネットワーク デフォルトネットワーク デフォルトでは、Compose 内の複数のサービスが default と呼ばれるネットワークに参加します。これらのサービスはデフォルトのネットワークで相互接続されています。デフォルト ネットワークの完全な名前の前には、作成ファイルが配置されているフォルダーの名前が付けられます。たとえば、フォルダーは hello_world の compose です。 1 セットのサービスに対応するネットワーク名は hello_world_default です。 このグループのサービスは、構成ファイル内の 2 番目のポート グループを使用してこのネットワーク内で通信します。 バージョン: "3" サービス: ウェブ: 建てる: 。 ポート: - 「8000:8000」 デシベル: 画像: postgres ポート: - 「8001:5432」 たとえば、上記の構成では、hello_world_default ネットワークで、Web サービスはポート 8000 を使用して、ポート 5432 の db サービスと通信します。最初のグループのポート 8000 と 8001 は、ホストが Web サービスと DB サービスにアクセスするために使用するポートです。 デフォルトネットワークの独立した構成 デフォルトのネットワーク設定を変更したい場合は、次のようにデフォルトのネットワークドライバーを変更するなど、コンポーズファイルのネットワーク項目を通じて個別に変更できます。 ネットワーク: デフォルト: # カスタムドライバーを使用する ドライバー: カスタムドライバー 1 デフォルト以外のネットワークの設定と使用 複数のネットワークを定義して使用する バージョン: "3" サービス: プロキシ: ビルド: ./proxy ネットワーク: -フロントエンド アプリ: ビルド: ./app ネットワーク: -フロントエンド - バックエンド デシベル: 画像: postgres ネットワーク: - バックエンド ネットワーク: フロントエンド: # カスタムドライバーを使用する ドライバー: カスタムドライバー 1 バックエンド: # 特別なオプションを取るカスタムドライバーを使用する ドライバー: カスタムドライバー2 ドライバーオプション: : "1" バー: "2" 上記の構成では、フロントエンドとバックエンドの 2 つのネットワークが定義されています。アプリは両方のネットワークにアクセスでき、プロキシ サービスはフロントエンド ネットワークにのみアクセスでき、DB はバックエンド ネットワークにのみアクセスできます。 複数のサービスの実行順序 Compose 内の複数のサービスには依存関係がある場合があります。たとえば、Web サービスは db サービスに依存しています。最初に db サービスを開始し、次に Web サービスを開始することを想定しています。この起動順序は、composeファイルでdepends_onを使用して指定することもできます。 バージョン: "2" サービス: ウェブ: 建てる: 。 ポート: - 「80:8000」 依存: - 「デシベル」 コマンド: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"] デシベル: 画像: postgres Docker ComposeのインストールDocker の Mac 版と Windows 版の両方に、デフォルトで Docker Compose が付属しています。 Linux版のみ別途インストールする必要がある docker compose と docker stack の類似点と相違点
参考文献詳しくはこちら: docker compose の使い方に関する記事はこれで終わりです。docker compose の使い方に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vueはコンピュータカメラを呼び出して写真機能を実現します
>>: MySQL 8.0.15 で MGR シングル マスターと複数スレーブを構成する方法
この記事では、jQueryタグセレクターアプリケーションの具体的なコードを例として紹介します。具体的...
1. mycatとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベ...
NC のフルネームは Netcat (Network Knife) で、作成者は Hobbit &a...
目次スロークエリの基礎: データ取得の最適化データベースから不要なデータが要求されていないか確認する...
述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...
プロジェクトでは、現在地の緯度経度を取得したり、場所を検索して緯度経度情報を取得したりする必要があり...
この記事では、例を使用して MySQL カスタム関数の原理と使用方法を説明します。ご参考までに、詳細...
目次序文1. 何ですか2. Node.jsでEventEmitterを使用する方法3. 実施プロセス...
@Font-face 基本紹介: @font-face は、Web ページにカスタム フォントを表示...
まず、全体的な考え方についてお話しします。 1. パスワードを使用してCentOSシステムにログイン...
SeLinuxを無効にするsetenforce 0永久に閉店: vi /etc/selinux/c...
この記事では、スクラッチ効果を実現するためのJavaScriptキャンバスの具体的なコードを参考まで...
目次1. 時間が経つにつれて限界が遅くなる理由2. 百万データシミュレーション1. 従業員テーブルと...
目次FTP、FTPS、SFTP の概要FTP FTPS FTPサーバーFTPソフトウェアのアクティブ...
CSS オーバーフローのメカニズムを詳細に学ぶ必要があるのはなぜですか?実際の開発プロセスでは、コン...