web-dev-qa-db-ja.com

複数のリポジトリでdocker-composeを使用する

私は現在、サービスの展開に苦労しており、複数のリポジトリーを処理する必要がある場合の適切な方法は何かを尋ねたかったのです。リポジトリは独立していますが、本番環境で実行するには、すべてを起動する必要があります。

私のセットアップ:

  • Gitリポジトリバックエンド:
    • バックエンドプロジェクトレール
    • docker-compose:backend(expose 3000)、dbおよびredis
  • Gitリポジトリフロントエンド
    • Express.jsサーバー
    • docker-compose:(4200を公開)

どちらも独立して実行でき、テストはCIで実行できます

  • GitリポジトリNginx for Production
    • 他の2つのサービス(同じDockerネットワーク)に接続する必要がある
    • リクエストを適切なサービスに転送します

私はすでに2つのサービスをサブモジュールとしてNginxリポジトリに含め、nginxリポジトリのdocker-composeを使用することを試みましたが、私は本当に満足していません。

24

実行するサービスごとにCIビルドとプッシュイメージを作成し、本番環境で3つのコンテナーをすべて実行できます。

次に、プロダクションdocker-compose.ymlは次のようになります。

lb:
  image: nginx
  depends_on:
    - Rails
    - express
  ports: 80:80

  Rails:
    image: yourorg/railsapp

  express:
    image: yourorg/expressapp

docker-composeは、実稼働環境には推奨されません。 Distributed Application Bundles の使用を検討する必要があります(これはまだ実験的な機能であり、バージョン1.13でコアにリリースされます)

または、ansibleなどのツールまたはbashスクリプトを使用してコンテナーを調整できます。 Dockerネットワークを作成し、3つすべてのコンテナーを接続して、お互いを見つけられるようにしてください。

編集:Docker v17および [〜#〜] dab [〜#〜] sの廃止により Compose file v が採用されたため、シングルホストの場合は環境、docker-composeは、マルチサービスアプリケーションを実行するための有効な方法です。マルチホスト/ HA /クラスター化シナリオの場合、自己管理ソリューションの場合は Docker Swarm を、詳細なPaaSアプローチの場合は Docker Cloud のいずれかを検討する必要があります。とにかく、 Play-with-Docker で試してみることをお勧めします。公式のオンラインサンドボックスです。複数のホストをスピンアウトして、スウォームクラスターでスピンアウトする必要はありません。あなた自身の箱。

18
gvilarino