行ったすべての変更で同じコンテナを後で起動できるようにするには、ユーザー名のリポジトリに変更をコミットする必要があります。画像の名前も選択する必要があります。Hubアカウント名でこれを置き換える必要があります。apache」と呼びます。イメージの変更をコミットするコマンドは次のとおりです。/apacheこれにより、画像が保存され、コンテナの現在の状態を呼び出すことができます。これを確認するには、次のように入力します。Hubに公開する必要があります。これを行うには、次のコマンド形式を使用します。/apacheこれで、Apacheインスタンスで構成されたコンテナイメージが作成されました。Apacheサービスユニットファイルの作成Dockerコンテナーが使用可能になったので、サービスファイルの作成を開始できます。フリートは、CoreOSクラスター全体のサービススケジューリングを管理します。initシステムをローカルで操作して適切なアクションを完了する一方で、ユーザーに集中化されたインターフェースを提供します。各サービスのプロパティを定義するファイルは、わずかに変更されたシステム化されたユニットファイルです。過去にsystemdを使用したことがある場合は、構文に精通していることでしょう。」というファイルを作成します。`は、これがテンプレートサービスファイルであることを示します。それが何を意味するかを少し見ていきます。+`テキストエディターが付属しています。+`セクションヘッダーを作成し、このユニットに関するメタデータを設定します。説明を含め、依存関係情報を指定します。ユニットはetcdとDockerの両方が利用可能になった後に実行する必要があるため、その要件を定義する必要があります。要件として作成する他のサービスファイルを追加する必要があります。この2番目のサービスファイルは、サービスに関する情報でetcdを更新します。ここで要求すると、このサービスの開始時に強制的に開始されます。+`については後で説明します。protected]%i.service次に、このユニットを起動または停止するときに何を行う必要があるかをシステムに伝える必要があります。+`セクションでこれを行います。最初にしたいことは、サービスのスタートアップのタイムアウトを無効にすることです。Hubサーバーからプルダウンする必要があり、最初の実行で通常よりも長い起動時間が発生する可能性があります。+」を「なし」に設定します。これを省略した場合、systemdは、stopコマンドを呼び出したときにDockerプロセスが失敗したと判断します。サービスを開始する前に環境がクリーンであることを確認する必要があります。名前でサービスを参照するため、Dockerでは、一意の名前ごとに1つのコンテナのみを実行できます。使用する名前の残りのコンテナをすべて削除してから削除する必要があります。Hubから画像を実際にプルダウンします。+`ファイルのソースを取得します。これには、サービスを実行しているホストのパブリックおよびプライベートIPアドレスなどの変数が含まれます。=-+」構文は、これらの準備行が失敗する可能性があり、ユニットファイルが引き続き続行されることを示しています。これらのコマンドは、その名前のコンテナが存在する場合にのみ成功するため、コンテナが見つからない場合は失敗します。+」という接尾辞があることに気づいたかもしれません。[テンプレートユニットファイル]です。ファイルを実行すると、フリートは一部の情報を適切な値に自動的に置き換えます。詳細については、提供されたリンクの情報をお読みください。+」は、ファイル内の任意の場所で、「。」の右側のサービスファイル名の部分に置き換えられます。+`としてロードします。ここで、「PORT_NUM」は必要なポートですこのサーバーを起動します。簡単に区別できるように、実行するポートに基づいてサービスにラベルを付けます。次に、実際のDockerコンテナーを実際に開始する必要があります。`コマンドを呼び出して、いくつかのパラメーターを渡しました。上記で使用したのと同じ形式で名前を渡します。Dockerコンテナからホストマシンのパブリックインターフェイスにポートを公開します。+`変数から取得されます。これにより、実際にポートを指定できます。+`変数(ソースとなる環境ファイルから取得)を使用して、バインドするホストインターフェイスを明示します。これは省略できますが、プライベートインターフェイスに変更する場合(たとえば、負荷分散を行う場合)、後で簡単に変更できるように設定します。HubにアップロードしたDockerコンテナーを参照します。最後に、コンテナ環境でApacheサービスを開始するコマンドを呼び出します。Dockerコンテナーは、与えられたコマンドが終了するとすぐにシャットダウンするため、デーモンとしてではなくフォアグラウンドでサービスを実行する必要があります。これにより、コンテナは子プロセスを正常に生成するとすぐに終了せずに実行を継続できます。次に、サービスを停止する必要があるときに呼び出すコマンドを指定する必要があります。コンテナを停止するだけです。コンテナのクリーンアップは、毎回再起動するときに行われます。+`というセクションを追加します。このセクションは、サービスをスケジュールする方法に関して艦隊に指示を与えるように特に設計されています。ここで、他のサービスまたはマシンの状態に関連して特定の配置でサービスを実行するかどうかの制限を追加できます。Webサーバーを実行していないホストでのみサービスを実行したいのです。これにより、可用性の高いサービスを簡単に作成できるようになるからです。ワイルドカードを使用して、実行中のApacheサービスファイルをキャッチします。protected]*.serviceこれで、Apacheサーバーユニットファイルが完成しました。次に、etcdにサービスを登録するためのコンパニオンサービスファイルを作成します。Etcdでのサービス状態の登録クラスターで開始されたサービスの現在の状態を記録するために、etcdにいくつかのエントリを書き込みます。これは、etcdへの登録として知られています。これを行うために、サーバーがトラフィックに使用可能になったときにetcdを更新できる最小限のコンパニオンサービスを開始します。+」という名前になります。`セクションから始めます。+`というディレクティブを設定します。+`ディレクティブは、このサービスが状態情報を探す依存関係を識別します。リストされたサービスが停止すると、今書いているユニットも停止します。これを使用して、Webサーバーユニットが予期せず故障した場合に、このサービスがetcdを更新してその情報を反映するようにします。これにより、他のサービスで誤って使用される可能性のある、etcdに古い情報があるという潜在的な問題が解決されます。+`セクションでは、ホストのIPアドレス情報を使用して環境ファイルを再度取得します。実際の開始コマンドでは、単純な無限bashループを実行します。+`のetcdストアにキーを設定します。`%このキーの値は、ノードのパブリックIPアドレスとポート番号に設定されます。値に60秒の有効期限を設定して、サービスが何らかの理由で停止した場合にキーが削除されるようにします。その後、45秒間スリープします。これにより、有効期限と重複するため、TTL(time-to-live)値がタイムアウトに達する前に常に更新されます。+`ユーティリティでキーを削除し、サービスを利用不可としてマークします。/announce/services/apache%i最後に行う必要があるのは、このサービスがレポート対象のWebサーバーと同じホストで開始されるようにする条件を追加することです。これにより、ホストがダウンした場合、etcd情報が適切に変更されるようになります。protected]%i.serviceこれで、Apacheサーバーの現在のヘルスステータスをetcdに記録できるサイドキックサービスができました。ユニットファイルとフリートの操作これで、2つのサービステンプレートができました。+`に直接送信して、クラスターがそれらを認識できるようにすることができます。protected]次のように入力して、新しいサービスファイルを表示できるはずです。-テンプレートは、クラスタ全体の初期化システムに存在します。特定のホストでスケジュールされることに依存するテンプレートを使用しているため、次にファイルをロードする必要があります。これにより、これらのファイルの新しい名前とポート番号を指定できます。+`セクションを見て、スケジューリング要件を確認するときです。負荷分散を行っていないため、ポート80でWebサーバーを実行するだけです。protected]サービスがロードされているクラスター内のホストに関する情報を取得する必要があります。41f4cb9a.../10.132.248.119ご覧のとおり、これらのサービスは両方とも同じマシンにロードされており、指定したとおりです。+`サービスファイルはApacheサービスにバインドされているため、後で開始して両方のサービスを開始できます。protected]ここで、クラスターで実行されているユニットを尋ねると、次のように表示されます。runningWebサーバーが稼働しているようです。+`を渡したため)集まる)。パブリックIPアドレスとポート番号をetcdに登録しました。`ユーティリティを使用して、設定した値をクエリできます。apache」でした。サーバーの詳細を取得するには、次を入力します。/announce/services/apache80104.131.15.192:80Webブラウザでこのページにアクセスすると、作成した非常にシンプルなページが表示されます。[CoreOS基本Webページ]サービスが正常にデプロイされました。別のポートを使用して別のインスタンスをロードしてみましょう。Webサーバーと関連するサイドキックコンテナが同じホストでスケジュールされることを期待する必要があります。Apacheサービスファイルの制約により、このホストはポート80サービスを提供するホストとは「異なる」ことを想定する必要があります。855f79e4.../10.132.248.120両方の新しいサービスが同じ新しいホストでスケジュールされていることがわかります。Webサーバーを起動します。protected]これで、この新しいホストのパブリックIPアドレスを取得できます。/announce/services/apache9999104.131.15.193:9999指定されたアドレスとポート番号にアクセスすると、別のWebサーバーが表示されるはずです。[CoreOS基本Webページ]クラスタ内に2つのWebサーバーを展開しました。Webサーバーを停止すると、サイドキックコンテナーも停止するはずです。runningetcdキーが削除されたことも確認できます。[26693]これは予想どおりに機能しているようです。結論このガイドに従うことで、CoreOSコンポーネントを操作する一般的な方法のいくつかに精通するはずです。実行したいサービスがインストールされた独自のDockerコンテナーを作成し、CoreOSにコンテナーの管理方法を伝えるフリートユニットファイルを作成しました。Webサーバーに関する状態情報を使用してetcdデータストアを最新の状態に保つために、サイドキックサービスを実装しました。サービスをfleetctlで管理し、異なるホストでサービスをスケジュールしました。後のガイドでは、この記事で簡単に触れた分野のいくつかを引き続き検討します。