アプリケーションパッケージでComposeを使いやすくする

Docker Composeは、アプリケーションを記述するために開発者に非常に人気があります。 実際、GitHub には 300,000 を超える Docker Compose ファイルがあります。 docker-compose.yml ファイルに記述された一連のサービスを使用すると、1 つのコマンドを実行するだけで、複雑なマルチサービス アプリケーション (または単純な単一サービス アプリ) を Docker で簡単に起動できます。この使いやすさにより、Docker Composeは、プロジェクトをすばやく開始する方法を求めている開発チームに最適です。

時間の経過とともに、Composeは進化し、レプリカの数、メモリリソースの制約、カスタムsyslogサーバーの指定など、同じアプリケーションを本番環境にデプロイするときに役立つ多くの機能が追加されています。 ただし、これらの属性は、独自の環境に固有のものになる可能性があります。 この状況に対処するにはさまざまな方法がありますが、最も一般的なのはコピーアンドペーストに依存することです。 たとえば、異なる環境で実行されている同じアプリケーションに対して複数のComposeファイルを維持することはかなり一般的です。これにより、次の 2 つの問題が発生します。

  1. Dockerイメージは常に共有していますが、それらを使用するマルチサービスアプリケーションを共有する適切な方法はありません
  2. Composeファイルを中心に開発者とオペレーターの間で共同作業を行うことは困難です。 これにより、アプリケーションをコードで記述することの主な利点の 1 つである、開発者とオペレーターが 1 つの説明を共有し、運用環境に移行する前に構成の問題を検出できるという利点が軽減されます。

ドッカーアプリの紹介

これに対処する 1 つの方法は、Compose に追加されるツールを構築して、共有とコラボレーションにさらに使いやすくすることです。 これは実験的なものであり、非常に進行中の作業 ですが、早期導入者からのフィードバックと意見をいただきたいと考えています。これにより、次のことが行われます。

  1. 作成ベースのアプリケーションを Docker Hub および DTR で共有できるようにする
  2. アプリケーションの説明と環境ごとの設定の間の懸念事項のより強力な分離をサポートします

実装は、いくつかの追加のメタデータファイルと小さなコマンドラインツールで構成されています。 簡単な例を示しています。

次の作成ファイルを作成します。 設定されたポートでヒットしたときに指定されたテキストを出力するHTTPサーバーを起動します。

version: '3.6'
services:
  hello:
    image: hashicorp/http-echo
    command: ["-text", "hello world"]
    ports:
      - 5678:5678

インストールしたら docker-app、このComposeファイルに基づいてアプリケーションパッケージを作成しましょう。

$ docker-app init --single-file hello
$ ls
 docker-compose.yml
 hello.dockerapp

アプリケーション パッケージは単なるテキスト ファイル (またはディレクトリ) であり、この場合 hello.dockerappは と呼ばれます。 本パッケージ には 3 つの YAML ドキュメントが含まれます

  • 一部のメタデータ
  • 作成ファイル
  • アプリケーションのいくつかの設定

次のようになります。

# このセクションには、アプリケーションのメタデータが含まれています。
最新バージョン: 0.1.0
名前: こんにちは
説明: ""
メンテナ:
- 名前:あなたのユーザー名
  電子メール: ""
ターゲット:
  群れ:本当
  Kubernetes: true

--

# このセクションには、アプリケーションサービスを記述する Compose ファイルが含まれています。
バージョン: '3.6'
サービス:
  こんにちは:
    画像:ハシコープ/ HTTP-エコー
    コマンド: ["-テキスト", "こんにちは世界"]
    ポート:
      - 5678:5678

--

# このセクションには、アプリケーション設定のデフォルト値が含まれています。
{}

 

設定セクションを編集し ( を置き換え {}て)、アプリケーションに次のデフォルト値を追加しましょう。

port: 5678
text: hello development
version: latest

次に、[ファイルの作成]セクションを変更し、いくつかの変数を追加します。

version: '3.6'
services:
  hello:
    image: hashicorp/http-echo:${version}
    command: ["-text", "${text}"]
    ports:
      - ${port}:5678

最後に、提供されたデフォルト値でComposeファイルをレンダリングすることにより、すべてが機能していることをテストできます。

$ ドッカーアプリレンダリング
バージョン: "3.6"
サービス:
  こんにちは:
    命令:
    --テキスト
    - こんにちは開発
    画像:ハシコープ/http-エコー:最新
    ポート:
    モード:入力
      ターゲット: 5678
      発行日: 5678
      プロトコル: TCP

 

変数が設定値に置き換えられていることに注意してください。 その後、その作成ファイルを他のファイルと同じように使用できます。 たとえば、ディスクに保存したり、直接パイプdocker stackdocker-composeしたり、アプリケーションを起動したりすることができます。

$ docker-app render | docker-compose -f - up

これはそれが面白くなるところです。 オプションを使用して --set、実行時にこれらの設定を上書きできます。 別のオプションを指定して、レンダリングを再度実行してみましょう。

$ docker-app render --set version=0.2.3 --set port=4567 --set text="hello production"
version: "3.6"
services:
  hello:
    command:
    - -text
    - hello production
    image: hashicorp/http-echo:0.2.3
    ports:
    - mode: ingress
      target: 5678
      published: 4567
      protocol: tcp

結果の Compose ファイルのポートとバージョンに対する変更に注意してください。

必要に応じて、スタンドアロン構成ファイルを作成して、これらの設定を保存することができます。 次の内容で ' prod.ym l' を作成しましょう。

version: 0.2.3
text: hello production
port: 4567

次に、次のように、その構成ファイルを含むComposeファイルを表示できます。

$ docker-app render -f prod.yml

これにより、環境ごとに個別の設定ファイルを簡単に作成でき、Composeファイル全体を複製する必要がなくなります。

リポジトリには、hello worldを超えて移動したい場合に、 さらに高度な例もいくつかあります。

Docker Composeの環境変数サポートを使用して上記と同様のものを実装できますが、優れたユーザーインターフェイスを提供するには独自のツールを作成する必要があります。 ただし、上記の規則が整っていると、その上にもっと興味深いものを構築できます。 たとえば、以下のような非常に興味深いイントロスペクションツールを構築することができ、単純な変数置換を超えて、より複雑なテンプレートに移行する計画があります。

アプリケーション パッケージの検査と展開

docker-app は、さまざまな設定でComposeファイルをレンダリングする方法を提供するだけではありません。 また、それらと対話するためのいくつかの便利なユーティリティが付属しています。 たとえば、誰かがあなたに.dockerapp手渡した場合、それに関する情報を簡単に発見でき、特にパッケージコードを読まなくても実行時に使用可能な設定を見つけることができます。

$ ドッカーアプリ検査
こんにちは0.1.0
によって維持される: ガレス

Docker アプリケーション パッケージの例。

デフォルトの設定
------- -------
ポート 8080
テキストこんにちは世界
バージョン 最新

アプリケーションのバージョンをデプロイする準備ができたら、サブコマンドを使用してデプロイ deployできます。 これはコマンドとまったく同じように機能するため、 docker stack deploy多くの人に馴染みのあるはずです。たとえば、Docker Desktop または Docker EE を使用している場合は、公開されている設定の一部をオーバーライドしながら、アプリケーションを Kubernetes にデプロイできます。

$ docker-app deploy --set port=4567 --orchestrator=kubernetes

docker-app には、組み込みのヘルプ情報で、またはフォローアップのブログ投稿を待つことで見つけることができる、より便利なツールが組み込まれています。

地位。

本日、すべてのDockerユーザー向けの実験的なユーティリティとしてリリース docker-app します。 初期のユーザーフィードバックに基づいて迅速に反復し、コードやアイデアを提供したいDockerコミュニティの人々と協力することを目指しています。 これは、現在の docker-compose または docker スタックコマンドを置き換えることを意図したものではありません。

私たちは docker-app探求したいアイデアがたくさんあります。 Docker Hubでのアプリケーションの共有はすでにサポートされていますが、それを拡張するためのアイデアはたくさんあります。 自己完結型のアプリケーションインストーラーも、たとえばオフラインインストールのユースケースをサポートできる興味深い手段です。 このツールでは、より複雑なテンプレートオプションをある程度サポートしていますが、リリースバージョンではまだ利用可能にしていません。 付随するメタデータは、インストールおよび管理ツールからドキュメントやテストユーティリティまで、さまざまなユーザーインターフェイスを自動生成するための多くの機会も提供します。 あなたが見たいものを私たちに知らせてください。

興味。

興味があれば、https://github.com/docker/app のGitHubリポジトリにアクセスしてください。基本的なドキュメントといくつかの例、および最新リリース(Windows、macOS、またはLinux用)とアプリケーションのソースコードをダウンロードする手順があります。質問、アイデア、問題レポート、または機能リクエストを含むリポジトリ内の問題を開いてください。

Docker EE のお客様で、Compose ベースのアプリケーションの管理や、開発者とオペレーター間のワークフローの問題への対処に関心がある場合は、営業担当者からお問い合わせください。 docker-app現在、Docker EEと連携しており、他の興味深い統合の機会を積極的に検討しています。

詳細情報:

  • 登録する 利用可能なベータ版にアクセスし、現在のバージョンのDockerデスクトップをダウンロードします。 マック 又は ウィンドウズ10 今日、Kubernetesを使用するオプションを含みます。