ドッカーコン

Docker init の前後

Angel Borroy 氏 (デベロッパー アドボケイト、ハイランド)

2023年11月27日収録
Docker Init コマンドにより、コンテナ化されたアプリケーション用の Dockerfile と Docker Compose テンプレートの生成プロセスが大幅に簡素化されました。 このプレゼンテーションでは、その仕組みを説明し、オープンソースのAlfresco Dockerインストーラーを使用して、実際の例でDocker Composeジェネレーターを構築する概念を説明します。

写し

Dockerクライアントのこの新機能である Dockerinitについて説明します。 そして、その前に何をしていたのか、Docker initで何をしているのか、そしてこのコメントで将来何ができるのかを見ていきます。 私の名前はAngel Borroyで、ハイランドの開発者アドボケイトです。 また、大学で教えています。 私はDockerコミュニティのリーダーです。 ですから、私はオープンソースのコンテナなどに深く関わっていますが、それは主に私たちが扱っている製品によるものです。 つまり、ドキュメント管理作業に関連するオープンソース製品です。

目次

    概要

    今日、私たちが取り組もうとしている主な問題は、資産の問題です。 そのため、Docker を実行するためのアセットをいくつか作成する必要があります。 そして、これらの資産は開発者だけでなく、パイプライン、DevOpsエンジニア、そしてユーザーにとっても重要です。 ですから、私たちは今日、この要件を解決しようとしています。 これはアジェンダのようなものです。 そのため、 Docker init の前に、これから紹介するいくつかの実験を試していました。 次に、このDocker initコマンドと、これから探索するいくつかのデフォルトテンプレートを取得しました。 そして最後に、コミュニティテンプレートのサンプルアプローチを紹介します。 Dockerが提供するテンプレートだけでなく、自分でテンプレートを作成することもできます。

    最初のものは、このDockerinitコマンドを作成する前です。 ここでは、ユースケースについて説明します。 あなたはあなた自身のケースを持つことができますが、これは私たちが解決する必要があるものです。 ですから、私たちは、いわゆる、適切な規模のサービスによって構成されるプロジェクトを構築しています。 したがって、これらはマイクロサービスではありませんが、適切なサイズのサービスです。 この商品では、常に商品を発売しております。 そのため、製品のさまざまなリリースがあります。 また、すべてのデプロイメントでサービスが必要なわけではありません。 そのため、デプロイメントに応じて異なるサービスを組み合わせる必要もあります。 また、製品を拡張することもできます。

    サービス

    主にAngularで開発されているさまざまなサービス、UIをすべて見ることができます。 Javaで開発されたリポジトリがあります。 私たちは、最初のエンジニアによって開発された変換サービス、検索サービスを持っています。 ただし、データベースなど、デプロイをサポートするために使用している他のサービスもいくつかあります。 これが最初のシナリオです。 右。 ですから、私たちは多くのサービス、開発中のサービス、そして使用している他のサービスを持っています。

    実際、私たちが持っているのは、さまざまな選択肢です。 数が限られているため、数え切れないほどではありません。 しかし、私たちは異なるリリースを持っています - 6.0、 6。1、 7。1、 7。4。 また、FTP、SMPP、または多くの異なるプロトコルなど、さまざまなプロトコルを使用できるため、いくつかの設定もあります。 また、転送、検索、その他の機能について、さまざまなサービスにフラグを立てることもできます。 また、MariaDB、Oracleなど、さまざまなデータベースもサポートしています。

    次に、製品の拡張機能も受け入れる必要があります。 これらの拡張機能は、製品自体によって提供されるだけでなく、製品の拡張機能を提供するコミュニティもあります。 また、これらのカスタム拡張機能もサポートする必要があります。 そして最後に、他のプラットフォームの開発もサポートする必要があります。 したがって、サービスで開発している場合は、他のすべての部分をデプロイする必要があります。他のすべての部分ではなく、プラットフォームの他のすべてのサービスの一部をデプロイする必要があります。

    ツール

    これは私たちの最初の状況のようなものです。 そのために、Docker initが利用可能になる前の数年間にいくつかのツールを作成していました。 そこで、最初のものはPythonの開発でした。 そして、これらのDockerアセットの生成をパイプライン、つまりテストパイプラインで処理していました。 ですから、私たちはそれを見ることになります。 その後、一部のユースケースでは、ユーザーの操作も必要であることがわかりました。 つまり、自動化された方法で作成できるものだけでなく、ユーザーが「よし、このバージョンの1つや2つ」とか、このデータベースを使いたいかどうかなどと言うだけでも良いのです。 そこで、Yeomanジェネレーターを作成しました。 それが2度目の前進でした。 そして最後に、これには多くの依存関係が含まれていることがわかりました。 ヨーマンが必要だから、NPMが必要だ、いろんなものが必要だよ。 したがって、すべてをDockerイメージ内にラップします。 したがって、依存関係はDockerのみです。 そして、Dockerを作成します。 Docker を使用しています。 それは理にかなっています。

    これに移りましょう。 したがって、最初のものはPythonジェネレーターです。 これらのプロジェクトで使用できるソース コードは常にあることを忘れないでください。 右側のリンクにあります。 そしてこの場合、この検索サービスのこれらの特定のサービスのテストパイプラインの一部となるように設計された何かを作成したいと考えました。 したがって、このサービスには他のいくつかのサービスが必要でした。 そして、さまざまなユースケースに対して異なるDocker構成を作成するために、これを作成していました。

    そこで、私たちはいくつかのテンプレートを発明しました。 これは、このSolrホストのように、いくつかの式、いくつかの置換式で見ることができます。 そして、私たちは想像力も使っていました。 変数がない場合、入力されたものを追加していました — 後で入力します。 それが私の同僚であるトム・ペイジによって始められました。 しかし、私たちは時間とともにそれを進化させていました。 だから大丈夫でした。 そのため、Pythonジェネレーターという1つのコマンドで、異なるパラメータで作成することができました。

    AlfrescoをトランスフォーメーションとAIOトランスフォーマーでデプロイしたいです。 そして、そのためのDockerアセットを生成していました。 それは自動的に行われました。 そして、Pythonとこのモデルだけが必要でした。 だから速かったです。 しかし、ユーザーインタラクションに移行したい場合、はい、Pythonでその開発を続けることは最善の選択ではありませんでした。 なぜなら、このYeomanジェネレーターがすべてのユーザーインタラクションを提供していることをご存知でしょう。 つまり、デフォルトでユーザーとの対話が提供されているのです。 また、テンプレート言語もあるため、テンプレートに式を追加できます。 また、ユーザーとの対話も取得できます。 いいです。 これは、サーバーサービスや関連サービスだけでなく、ユーザーの操作を考慮したフルスタックをデプロイするように設計されました。 したがって、テンプレートはヨーマンに基づいています。 だから、多かれ少なかれ同じものを見ることができます。

    条件

    今、私たちは条件も持っています。 そのため、ユーザーが入力した情報に条件を使用することができます。 また、一部交換もございます。 しかし、これにより、より複雑なデプロイメントを作成したり、より多くのユースケースで考慮されるものを作成したりすることができます。 この場合、今日、プロジェクトにはさまざまな貢献者がいます。 ですから、これはAlfrescoコミュニティで非常に使用されているプロジェクトです。

    ですから、多かれ少なかれ同じことです。 パラメーターを指定してコマンドライン呼び出しを使用できます。 そのため、以前のユースケースもサポートしています。 パラメータのみを使用してすべてを作成することも、対話型の問題に返信することもできます。 そして、このインタラクティブなプロンプト。それについては後で説明します。 そのため、さまざまなバージョンを選択できます。 値を入力できます。 また、ブール値の質問に「はい」または「いいえ」で回答することもできます。 あるいは、複数の選択肢を持つこともできます。 複数のモジュールをデプロイする場合は、複数の選択肢もあります。 ですから、どちらのアプローチでも異なるものを作ることができるので、かなり良さそうです。

    Include ディレクティブ

    このテンプレートのバージョン2では、最終的にこれらのテンプレートは2つの複雑なもののようでした。 そのため、多くの条件があります。 コードにはさまざまなセクションがあります。 そして最終的には、わかりませんが、 800 行のテンプレートができあがりました。 それは混乱でした。 そのため、同じプロジェクトの 2 回目のイテレーションで、include ディレクティブを発明しました。

    Docker Compose が最新リリースでインクルードをサポートしていることはご存じでしょう。ですから、私たちは多かれ少なかれ同じことをしていましたが、たくさんあります。 元のファイルに対していくつかのコメントがありました。 そして、サービスの部分的な宣言を別のファイルにしています。 サービスを使用したい場合は、これをサービスの実際の構成に置き換えています。

    それにより、テンプレートが読みやすくなりました。 これが2番目のバージョンでした。 そして、YeomanやNPMなどをインストールする際に問題を見つけた人がいることがわかったので、私たちが行ったことは、すべてをDockerイメージ内にラップすることでした。 それは理にかなっています。 したがって、そのリクエストを処理する必要はありません。 まったく同じことですが、Docker内にはYeoman、NPM、Nodeなどがすべて含まれています。 つまり、これまでのアプローチですべてのメリットを享受できたわけですね。 また、要件もありません。 私たちは、この摩擦のない目標を達成できたと考えています。 したがって、そのソリューションを使用すると、パイプラインにアタッチできるものがあり、それを可能にしたいときにインタラクションも使用できます。 そして、それは摩擦がありません。 だから良かったです。

    しかし、製品を使用してそれで遊ぶことができます。 これがAlfrescoの企業です。 Dockerはプロジェクトの1つです。 NPM、ヨーマンをインストールする必要があります。 わかりました。 これが要件です。 また、引数なしでyo alfresco-enterprise-dockerと入力すると、プロンプトが表示されます。 したがって、最初のデプロイ 7のバージョンを選択できます。03。 さまざまな変換サービスから選択できます。 たとえば、これは、さまざまな検索サービスから選択できます。 また、アプリケーションをデプロイするかどうかを選択することもできます。 そして、このアプリケーション、別のアプリケーション、私が使用できるかどうか別のサービスについても同じことが言えます。 そして、それによってアセットを作成しています。

    そのため、必要なすべてのサービスで、それぞれに適切な構成でDocker Composeが作成されています。 ご覧のとおり、メカニズムの一部であるこれらのコメントもあります。 わかりました。 それでよかった。 私たちは多かれ少なかれ、それに満足していました。 しかし、その時にDocker initが登場しました。 その時、まあ、それを5年間使用した後、このDocker initがあります。

    Docker initとは何ですか?

    Docker initとは何ですか? Docker init は、 Docker Desktop for 18から入手できます。 現在、まだベータ版です。 そして、それは私たちが以前に見ていたものとほぼ同じです。 そこで、「docker init」と入力すると、Dockerアセットが生成されます。 ただし、この場合は、アプリケーション、つまりこの Docker イメージ ファイルとデプロイ用の Compose を作成する必要がある 1 つのアプリケーションを対象としています。 最初は、このGo、Node、Python、Rust、および ASP.net があります。 そのため、この種のテクノロジーを使用してプロジェクトの Docker アセットを作成できます。

    主にサービスを対象としています。 したがって、コマンドラインアプリケーションとは異なります。 彼らはそこでサービスを受けることを期待しています。 そして、何か新しいものが必要な場合は、この「お知らせください」リンクがあります。 そのため、Docker に新しい技術サポートや製品サポートを依頼できます。 公式のドキュメントがあります。 今では、これはクローズドソースコードです。 これはDockerキープロジェクトの一部ですが、今ではクローズドソースコードです。 正直なところ、それが将来オープンになるかどうかはわかりませんが、そうなることを願っています。

    したがって、Dockerロードマップでは、このページを知っていれば、彼らはあなたの推奨事項、リクエストを受け入れています。 また、Docker init では現在、Java や PHP などのさまざまなスタックのサポートが増えています。 また、Docker init もあります — これは私たちが持っているものです。 また、カスタムテンプレートのサポートもあります。 したがって、これはまさに後で見るものであり、非常に小さい初期カタログにカスタムテンプレートを作成します。 その技術のためのアプリケーションを作成しているだけです。 ですから、私たちはそれをさらに進めたいと考えています。

    Docker init の使用

    これ以前にDockerinitを試したことがある人はわかりません。 だれも。 では、もう一度テストをしましょう。 Node.jsデプロイメントを使用します。 そこで、小さなNode.jsアプリケーションがあります。 私はサーバーを持っています、それはかなり「hello world」です - それはポートでリッスンしていて、このhello worldを返すだけ 8080 サーバーです。 docker initと入力すると、デフォルトで使用可能になり、使用している言語を検出していることがわかります。

    ですから、私たちはプロジェクト自体からそれを行っています。 つまり、ノードがあることを検出しています。 だから、私たちはそれを選ぶことができます。 その後、使用したいノードのバージョン、使用したいバックアップマネージャーなど、いくつかの質問が表示されます。 NPM を検出しています。 そして、開始するために使用するコマンドライン。 ですから、私の場合、Node server.js、 しかし、必要に応じてNPM startも使用できますが、私はこれを使用することを好みます。 そして、ポートは 8080でした。

    これで、これら 3 つの Docker アセットが作成されました。 最初の .dockerignore があります。 したがって、ビルドプロセスのためにDockerイメージに追加したくないのはローカルフォルダ、ローカルファイルです。 Dockerfile — これは Docker イメージのビルドの説明です。 そして最後に、compose.yamlもあります。 ご存知のように、昨年、彼らはこの慣習を変えたと思います。 そのため、docker/compose.yml は compose.yaml に変更されました。 つまり、あなたは何か新しいものを生み出しているのです。 この新しい規則名を使用できます。

    そして、その中には、無視する情報がすべて含まれています。 したがって、Goの場合、主にノードモデルフォルダは使用しません。 また、ベストプラクティスを含むDockerfileもあります。 だから、建物があるんだ。 この場合、建物はありません。 さて、この場合のようにコンパイルされていないことをしていた場合は、ビルディングレイヤーがあり、次にランニングレイヤーがあります。 また、建物から実行中のレイヤーにリソースをコピーできます。 ただし、rootユーザーでDockerイメージを実行しないなど、基本的なものもいくつかあります。 そこで、新しいユーザーを作成しています。 そして、私たちはそのユーザーを利用してサービスを開始しています。 そして最後に、サービスを開始する必要があります。 また、サーバーを含むこのcompose.yamlファイルもあります。

    だから、私たちはすべての準備ができています。 それで、準備ができたら、タイプ、Docker、compose、up、buildがあります。 そして、あなたのサービスが利用可能になります。 ですから、彼らはそれをどのように使用するかについても指示を与えています。 したがって、 docker compose up –-build 、localhost 8080で実行中のWebサーバーがあることを期待しています。 ですから、データに戻ると、データにこれらすべてのソースコードがあります。 それがうまくいった場合、localhost 8080 にあるのは「Hello World」メッセージです。 だからそれはうまくいっています。 アプリケーションがあります。 Docker init を使用して、これらすべての Docker アセットを作成できます。 彼らはベストプラクティスを適用しています。 そして、それはうまくいっています。 だから、それでいいんです。 しかし、私たちはそれ以上のものを求めています。 そして、それ以上のものが必要です。 そこで、最終的なイテレーションに移行します。 大丈夫なので容器を止めさせてください。 大丈夫です。

    次に進みましょう。 今、私たちは狂った大愚か者のようにコーディングできるようになったのは、テンプレートを使用してDockerを作成できるからです。 このDockerinitを使用するために、独自のテンプレートを作成できます。 もちろん、私たちはそれをパイプラインにしたいと考えています。 インタラクションを使用したい。 そして、私たちはそれをこれに固定したいのです。

    そのために、サンプルプロジェクトを作成します。 また、GitHub にもプロジェクトがあります。 すべてのソースコードは、プロジェクト開発の目標です。 まさにこれを使用しています。 このソースコードはテスト目的だけであるため、Dockerキープラグインを作成しませんでした。 本番環境での使用を意図していません。 しかし、それはDockerキープラグインを使用していたのとまったく同じテクノロジーを使用しています。 つまり、同じキーインタラクションパケット、つまりCobra for Dockerを使用しています。 YAML を使用したプロンプト定義を使用しています。 これらすべてのプロンプトを定義したいと考えています。 これらすべての質問で所定の位置に構築するために、デフォルトのGoテンプレートを使用しています。 また、追加する必要があるこの種の条件に対しては、外部式エバリュエーターも使用しています。

    クライアントとの対話はまったく同じであるため、Docker init. ただし、この場合、そのDocker initに加えて、いくつかのパラメーターがあります。 なぜなら、それをパイプラインにも使用したいからです。 したがって、すべてのパラメータを取得したいのです。 パラメータには、テンプレートがあります。 したがって、テンプレートのカタログを持つことができるため、使用するテンプレートの名前。 前のユースケースから Docker init のデフォルトに移動します。 node.jsテンプレートを使用すると言えます。 ただし、プロンプトの値も追加できます。 また、外部テンプレートもサポートしています。 デフォルトで提供されるテンプレートだけではありません。 Docker initと入力すると、マシンにローカルファイルがありません。 これは Docker キー プログラム内にあります。 この場合、デフォルトのテンプレートもあります。 ただし、ローカル テンプレートを作成し、ローカル ディレクトリを使用して、このテンプレートをプログラムに提供することができます。 そして最後に、すべてのDockerアセットを書き込むための出力ディレクトリがあります。 また、カタログという共通の資産もいくつかあります。

    それを使用したいと想像してみてください。 しかし、使用可能なテンプレートがわからないか、テンプレートが期待しているプロンプトがわかりません。 これが、この Docker init catalog コマンドがある理由です。 「よし、利用可能なすべてのテンプレート、Alfrescoなどをください」と言うことができます。 また、Alfrescoテンプレートを使用したいので、使用する必要があるプロンプトを教えてください。 右側には、プロンプトを定義している prompts.yaml ファイルがあります。 また、Docker init プログラムに含まれているテンプレートまたは外部テンプレートでもこれを使用できます。

    これにより、テンプレートに基づいてDockerアセットを作成する方法ができました。 それを試してみたい場合は、今日は2つの異なるテンプレートを見ていきます。 しかし、明らかに、自分で試してみることができます。 したがって、フォルダを定義するだけです。 名前はテンプレートである必要はありません。 そして、後でサンプルを使用しますが、名前が必要です。 次に、Alfrescoのようなテンプレート名を持つサブフォルダが必要です。 そして、その中で、prompts.yamlファイルが多かれ少なかれこのファイルである、つまりプロンプトを含む1つの必要なファイルを定義する必要があります。 その後、必要なものをすべて追加できます — 常にファイルの接尾辞は .tpl で、テンプレート ファイルであることを宣言します。 それにより、この場合、たとえばテンプレートがあります。 次に、ルートフォルダであるテンプレート名があります。 次に、プロジェクトを実行するための指示を作成することをお勧めします。 したがって、条件があるため、カスタマイズされたREADMEを作成できます。 どちらか一方のサービスを含める場合は、それを README に追加することもできます。

    DockerfilesなどのDockerイメージがあり、ソースコード、Docker Composeファイルを含めることができます。 そして、必要なのはプロンプトの定義だけです。 いいですね、それはいいですね。 そして、プロンプトの定義は、私が発明した構文です。 もちろん、それを進化させることは可能です。 そして、これはAlec AivazisのGoモジュールに基づいており、これらのさまざまなプロンプトを作成することができます。 そこで、再びこの選択をしました。 識別子はvolumesであると宣言し、ユーザーに表示するラベルはvolumeメソッドです。 また、none、native、bindなどのオプションがあります。 値プロンプトを使用することもできます。 サーバーの名前は何ですか? ユーザーを助けるためだけに、デフォルト値も提供できます。 また、実際の入力の代わりに、そのまま含めるためのパスワードもあります。 私たちは複数の選択肢を持っています。 それは同じことであり、この複数の真実で、あなたはリストから複数を選ぶことができます。 そして最後に、ブール値、はいまたはいいえのプロンプトがあります。 あなたがGoの知識を持っていて、このモジュールを使用したい場合は、彼が少し忙しく、プロジェクトのメンテナンスができなくなったため、この人を助けてください。 だから、このプロジェクトには愛情が必要なんだ。 もしそれがあるなら、はい、このプロジェクトは本当に素晴らしいので、この人を助けてください。 さまざまなプロンプトを作成していることがわかります。 だから、彼を助けてみてください。

    最後に、テンプレートの構文も定義する必要があります。 そのTPL拡張を使用する必要があります。 値を持つ式を使用できます。 たとえば、ボリュームがあり、選択がネイティブの場合、テンプレート内でこのネイティブボリュームとネイティブの構文を一致させることができます。 それは便利です。 私にとっては問題なかったルールが1つあります。 それが本当にあまりにも動的なものかどうかはわかりません。 しかし、テンプレートが 0 バイトに評価された場合、私はこのものを削除します。 さて、条件付きブロックがあります。 これは、ID のこのレガシ UI を値 yes で使用しているだけです。 その場合は、このブロックを追加します。 また、その構文でプロンプトから値を追加することもできます。 しかし、これは標準的な構文です。 これは、Goのテキストテンプレートパケットからのものです。 そのため、テンプレートを作成するためのさまざまなオプションがあります。 したがって、そこですべての情報を確認できます。 そして、これは触れずに理解するのが非常に難しいことを私は知っています。 では、それについて触れていきましょう。

    デモ

    繰り返しになりますが、プロジェクトが利用可能であることを覚えておいてください、テンプレートを使用したDocker initは目標プロジェクトです。 また、指示などもあります。 そして、2つの異なるテンプレートで遊んでみましょう。 最初のものは外部テンプレートフォルダです。 このサンプル フォルダーは goal プログラムには含まれていませんが、リポジトリに含めて使用してください。 これは、PostgresまたはMariaDBを使用してGoプログラムを作成しているだけの従来のNginx golang DBサンプルのようなものです。

    そのために、私が言ったように、私たちはプロンプトを持っています。 したがって、プロンプトを定義できます。 この場合、プロンプトは 1 つだけ、つまりデータベースです。 データベース(PostgresまたはMariaDB)を選択します。 そして、Composeファイルがあります。 このComposeファイルでは、MariaDB構成を追加するか、Postgres構成、Postgresサービスをクラウドに追加し、PostgresサービスをComposeに追加するための条件があります。 また、他にもいくつかの発見がありますが、ソースコードに条件を設定することもできます。 なぜ駄目なのですか。 そのため、それをテンプレートとして使用したり、条件を追加したりすることもできます。

    したがって、データベースがMariaDBの場合、このSQLコマンドを実行します。 それがPostgreSQLの場合、私はこの他のSQLコマンドを実行しています。 ご存知のように、それはもっと簡単なことです。 ただし、テンプレートの式を含むすべてのファイルを追加できます。 そして、明らかに、Dockerfileは、必要に応じて、そして再び、それはかなり興味深いと思います。 正しい手順を提供するREADMEを生成できます。 ですから、この場合、はい、例えば、これがあります。 データベースがMariaDBであるかどうかは、この行、そうでない場合はそれと言えます。 だから、あなたはあなたが必要とするものについてもあなたの指示を得ます。

    これに移りましょう。 プログラムをダウンロードできます。 したがって、プログラムは利用可能です。 バイナリのコンパイラは、リリースで使用できます。 これは私の最新リリースです。 私はゴランの開発者ではなく、スキル開発者です。 だから、私のソースコードを我慢してください。 そして、それを何の参考にもなりません。 ただし、このコンパイル済みプログラム、バイナリを使用できます。 だから私はこのバイナリを私のマシンに持っています。 名前を偽のDockerに変更します。 ただ、法的な意味合いを持たないように。 また、サンプルフォルダであるローカルフォルダもあります。 これがまさにテンプレートとプロンプト定義です。 したがって、偽のDockerinitとだけ言うことができます。 カタログと言うと、バイナリにあるテンプレートのみが提供されます。 これはデフォルトで最初の操作です。 しかし、サンプル、ローカルサンプルフォルダを追加すると、Alfresco nginx-golang-dbがあります。 また、テンプレートの詳細に入りたい場合は、詳細を尋ねることもできます。 だから私はPostgresまたはMariaDBの低重み値を持つデータベースパラメータが必要であることを知っています。 そのためのアセットを作成したい場合は、偽のDockerと言うことができます。 偽のDockerinitと言えます。 すべてのパラメータがあります。 サンプルディレクトリを追加する必要があります。これは、ローカルフォルダにあるテンプレートを使用するためです。 そして、使いたいものを選べます。 それがNginx Golang DBです。 だからそれだけで、私はPostgresまたはMariaDBを選択する必要があります。 私はそれを選んでいます。 そして、結果が出てきました。

    Postgresが多すぎる構成のみの結果があります。 そして、それを実行すれば、信じてください、うまくいきます。 また、Postgresの設定も表示されています。 たとえば、この README のテンプレートには Postgres 情報のみが含まれていることがわかります。 大丈夫です。 だから、それでいいんです。 それは簡単です。 そのための非常に簡単なサンプルがあります。 したがって、これらの式をテンプレートに適用するためのプロンプトを定義するだけでよいため、独自のものを作成できます。 そして、それは完了です。 しかし、もう少し複雑なことに移ると、それは私が利己的な方法で自分自身で解決しようとしていたことで、Alfrescoのテンプレートに進むことができます。 これには、さまざまなサービスとさまざまなファイルが関係しています。

    そのために、私が適用したのは、Docker includeディレクティブ、Docker Compose includeディレクティブです。 これにより、切り替えることができるサービスのリストを作成したり、構成のために必要なときに削除したりできます。 それで、あなたはDockerComposeincludeディレクティブをご存知ですか、それも新しいですか? 誰がそれで遊んだことがありますか? だれも。 そのため、compose.yaml を個別に定義するのは簡単です。 複数のサービスを使用できる場合ですが、私はそれを個々のサービスに使用しています。 私はプロキシの情報のみを含むこのプロキシcompose.yamlを持っています。 または、この情報のみを含むこのレガシーUIがあります。 そして、それらすべてを含むリストを作成すると、それはすべてのサービスを含む単一のcompose.yamlファイルを作成するようなものです。 しかし、これにより、このようないくつかの優れた機能が可能になります。 メッセージング サービスを含めるのは、メッセージング サービスをデプロイすることを選択した場合のみです。 そうでない場合は、無視してかまいません。 だから、新しいテクノロジーを組み合わせています。

    また、この場合、プロンプトはより複雑になります。 私たちはそれを見るでしょう。 条件もありますが、条件について説明していないと思います。 メッセージング サービスをデプロイすることを選択した場合は、サービスの資格情報が必要かどうかをお尋ねします。 メッセージング サービスを展開していない場合は、このプロンプトは使用しません。 そして、次のものについても同じことが言えます。 そのため、プロンプトで条件を定義できます。 また、この最新のものも用意でき、複数のオプションを選択できます。 さて、しかし、もう一度、これに戻ることができます。 そして、fake-docker-initを実行できます。 この場合、このテンプレートはバイナリ内にあるため、外部フォルダは必要ありません。 だから、最初のコードではDockerと言います。

    まず、先ほど申し上げたように、さまざまなバージョンがあります。 バージョンと取引するつもりです 7。3。 次に、データベースは2つだけですが、5つまたは6つの異なるデータベースエンジンをサポートしています。 Postgresをデプロイします。 そして、あなたは何を望んでいますか? メッセージングサービスを使用するかどうか、はい? では、やってみましょう。 ただし、資格情報はありません。 OK、資格情報がない場合、はい、次のプロンプトは資格情報をくださいでした。 では、従来のUIを使用しますか?いいです。 どのコンテナ容量方式を使用しますか?ネイティブ。 次に、デフォルト値でサーバーを入力し、Enterキーを押すと、値はlocalhostになります。 複数のアイテムを選ぶことができます。 これで、すべてのDockerアセットが作成され、READMEもカスタマイズしました。

    したがって、メッセージングサービスを使用していたので、メッセージングサービスのエンドポイントを提供できます。 あなたがそれを選択していない場合は、それを除外することができます。

    そして、最後のテストとして、保存してみましょう。 それはうまくいきます。 私はDockerアセットを作成するだけでなく、期待されるDockerアセットも作成しています。 これが私がテストしているものです。 さて、これでAlfrescoで使用するさまざまなサービスがすべて始まります。 そして、しばらくすると、Alfrescoを稼働させることができます。 そして、この構成は問題ないことがわかります。 それでは、どうぞ。 さて、Alfrescoは私たちが選択したすべてのオプションで実行されています。 すごい。

    今日は以上です。 以前に行っていたこと、Docker init でできること、そして Docker init コマンドのより多くの機能を備えた拡張機能でできることがあります。 ですから、これは私のユースケースだったので、少し音を立てることをお勧めします。 そして、私は自分のユースケースを利己的な方法で解決していました。 ただし、他の要件がある場合は、Dockerキープロジェクトに書き込みの問題があり、彼らはあなたのリクエストを検討したり、それに役立つ何かを作成しようとします。

    質疑応答

    何か質問がありますか? 感謝。

    セットアップ後の継続的なメンテナンスにどのように対処しているのか疑問に思っていました。 したがって、これは、さまざまなDocker Composeファイルなどを使用してプロジェクトを初めて作成するための非常に優れたツールのように見えます。 しかし、将来、変更を加えたい場合はどうでしょうか。 新しいサービスを追加したい。 何かのバージョンを変更したい。 または、最初のテンプレートで問題が見つかり、Docker init を使用して既に作成したプロジェクトでそれを修正したいとします。

    はい。 まず、これは本番環境用ではありません、はい、本番環境では使用しないでください。 だからこそ、バージョンがあるのだと思います。 したがって、私はデフォルトのテンプレートのバージョンを作成しており、テンプレートのバージョンも作成できます。 したがって、テンプレートにバージョンを追加するのが良い追加です。

    プロジェクトがオープンです。 プルリクエストは大歓迎です。 ですから、もしそうしたいのであれば、私は喜んでその貢献をいただけると思います。 このプロジェクトはサンプルとしてDockerCon用に作成されたため、将来にわたって維持するかどうかはわかりません。 しかし、それが有用であると判断した場合、Dockerが言うまで、これ以上成長させるために私はそれに参加します。 それを製品に追加するつもりです。 だからこそ、私たちは騒ぐ必要があると私は言うのです。 それがお役に立てば幸いです。 感謝。

    さらに詳しく

    この記事には、DockerCon 2023のプレゼンテーションの YouTube トランスクリプトが含まれています。 「Before and After Docker Init」は、ハイランドの開発者アドボケイトであるAngel Borroy氏によって発表されました。

    自分に合ったサブスクリプションを見つける

    今すぐ専門家に連絡して、Dockerサブスクリプションのコラボレーション、セキュリティ、サポートの完璧なバランスを見つけてください。