17

構成管理ツールと配備ツールは初めてのことです。私は今までに手に入れたことのない最も興味深いプロジェクトの1つとして、Continuous Delivery/Continuous Deploymentツールを実装する必要があります。Continuous Delivery/Continuous Deploymentを実装するためにDockerとAnsibleがどのように適合するか

まず、個別に、私はAWSで快適で、私はAnsibleが何であるか、その背後にある論理とその目的を知っています。私はDockerの理解のレベルが同じではありませんが、私はその考えを持っていました。私は多くのインターネットリソースを使いましたが、大きなイメージを得ることはできません。

私が苦労してきたのは、彼らがどのように一緒にフィットするかです。 Ansibleを使用して、自分のインフラストラクチャをコードとして管理できます。ビルドEC2インスタンス、パッケージをインストール...私は、コードを引っ張って、設定ファイルを修正し、Webサーバーを起動することによって、完全なアプリケーションを配備することさえできます。 Dockerは、それ自体、アプリケーションをパッケージ化し、どこに配置してもアプリケーションを実行できるツールです。

私の問題は、次のとおりです。

はどのようにドッカー(またはAnsibleとドッカー)は、継続的インテグレーションプロセスを拡張しません!?

ソースコードリポジトリがあると仮定すると、チームメンバーは機能の作業を終了し、作業を進めます。 Jenkinsはこれを検出し、すべての受入れ/ユニット/統合テストスイートを実行し、すべてが合格した場合は安定したビルドとして宣言します。ドッカーがここにいかにフィットするか?私はチームが自分の仕事をプッシュしたとき、ジェンキンスはアプリケーション内でコード化されたDockerファイルソースを取得し、アプリケーションのイメージを構築し、コンテナを起動し、それに対してすべてのテストを実行しなければならないか、すべてがうまくいけば、DockerファイルからDockerイメージを作成し、それを私有の場所に保存しますか? ジェンキンスは、例えばx.y.zを使って最終画像にタグを付けるべきですか?

ドッカーコンテナの構成:

は異なる環境に同じ画像を展開処理する方法を、我々はどこかに格納されJenkinsによって構築された画像があると仮定し、さらに、異なる構成パラメータ(バーチャルホストの設定、DBホスト、キューURL、S3エンドポイントなど)Dockerの原則を破ることなくこの問題に対処する最も柔軟な方法は何ですか?これらの設定は、ビルドを開始したとき、またはそれに基づくコンテナが開始されたときに画像に反映されますか?

Ansibleとドッカー

AnsibleDockerコンテナを管理するDockerモジュールを提供します。私が上記の問題を解決したと仮定すると、新しいバージョンのx.t.zを自分のアプリケーションに配備したいときに、Ansibleに保存されている場所から画像を取得してアプリのコンテナを起動するよう指示します。 AnsibleはDockerイメージを実行する前にDockerイメージにログインする必要があります(これは私にとっては狂ったようです)。そして、Jinja2テンプレートを古典的なホストと同じ方法で使用しますか?そうでない場合は、どうやって処理するのですか?

長い質問だった場合や、何か間違えている場合は、私の考えを大声でお知らせします。私は過去2週間ブロックされており、正しいワークフローを把握することができません。今後の読者の参考にしたいと思っています。

これは一般的なワークフローのように見えるので、経験とソリューションを読むことは非常に役立ちます。 ありがとうございます。どんな助けも大歓迎です。

+1

Ansible + Docker ==マジック!ここにはすばらしいブログ記事があります:https://developer.rackspace.com/blog/ansible-and-docker/そして、Anagers + Docker専用サイトもあります。http://www.ansiblefordevops.com/ – Homer6

答えて

5

私はドッカー(またはAnsibleとドッカー)が継続的インテグレーションプロセスを拡張どのように部品

でお答えしたいと思います!

ドッキング画像はどこでも同じであるため、ドッキング画像は本物の画像であるかのように使用します。したがって、誰かがコードをコミットすると、ドッカー画像が作成されます。あなたはそれに対してテストを実行します。すべてのテストが合格すると、それに応じてイメージにタグを付けます。ドッカーは高速であるため、これは実行可能なワークフローです。 ドッカーの変更も増分です。したがって、イメージはストレージへの影響が最小限に抑えられます。また、テストが失敗した場合でも、そのイメージを保存することもできます。このようにして、開発者はそのイメージを引き出し、テストが失敗した理由を簡単に調査します。開発者は、ジンキンとそのマシンのドッカー画像が異なるので、マシンでテストを実行することもできます。

これは、どのドッカーイメージで使用されるかを決めるので、すべての開発者が同じ環境、すべてのソフトウェアと同じバージョンを持つことになります。開発者マシンの違いによるバグに遭遇しました。たとえば、同じオペレーティングシステムでは、Unicode設定がコードに影響を与える可能性があります。しかしドッカーの画像では、すべての開発者が同じ設定、同じバージョンのソフトウェアに対してテストを行います。

ドッカーコンテナ設定:

あなたがプライベートリポジトリを使用している、とあなたがいずれかを使用する必要がある場合は、構成の変更は、多くのハードディスクの空き容量には影響しません。したがって、dbパスワードなどのセキュリティ設定を除いて、ドッカーイメージ(Baking the Configuration into the Container)に構成の変更を適用できます。その後、環境変数やDockerボリュームを使用して、起動前/起動後に配布されていない構成を展開イメージに適用することができます。

https://dantehranian.wordpress.com/2015/03/25/how-should-i-get-application-configuration-into-my-docker-containers/

Ansibleは、それが実行している前に(これは私には非常識に聞こえる )、ドッカーイメージにログインする必要があり、そのJinja2のは、古典的なホストと同じよう をテンプレート使用しています!そうでない場合は、どうやって処理するのですか?

いいえ、誰でもDockerイメージにはログインしませんが、Jinja2テンプレートではドッカーファイルを変更することができます。ドッカーファイルをテンプレートで変更したり、設定を別のファイルに挿入したりすることができます。それに応じてファイルにタグを付けて、スピンアップするように画像を設定してください。

+0

私はちょうどどこにAnsible fitが入りませんでしたか?オーケストレーションのこと? –

1

完全な解決策ではありませんが、私は2つの問題について提案しています。彼らは完璧ではないかもしれませんが、これは我々のワークフローで使用している方法であり、これまでのところ証明しています。異なる環境の定義

  1. - あなたが起動する環境ごとに異なるAnsible役割を書いた想定では、我々は、コンテナが所属したい環境を設定する環境変数を定義します。コンテナに前もって設定されたenv変数を使用してS3バケットから適切な設定ファイルをダウンロードし(AWS信用を提供するか、サーバにIAMロールを与える場合に可能なはずです)、ビルド時にこれらのパラメータをコードに注入します。

  2. ドッカーアプリにログインする必要はありませんが、解決策は少しトリッキーです。私はこの問題に取り組む2つの方法を試みましたが、どちらも理想的ではありません。最初のものは、ドッカーイメージコマンドラインの一部として設定ファイルをダウンロードし、コンテナ起動時にアプリケーションをビルドすることです。このソリューションは機能しますが、Dockerの哲学に違反し、イメージを非常に誤ったものにする可能性があります。 もう1つの解決策は、複数の画像をドッカーハブのレポにプッシュして、手元の環境に応じて適切な画像をプルすることです。より広範なストロークで

、私はAnsibleで完全に我々のアプリを起動しようとしました、それは地獄だった、多くの構成手順はトリッキーで、あなたが脚本としてそれらを実装しようとすると、トリッキー取得します。私がSeversをAnipalだけで維持することに切り替え、Dockerでアプリケーション自体を展開すると、作業が楽になりました。

+0

アプリケーションのパッケージング技術としてのDockerの考え方が優れています。この助けは、なぜアノーシーがそれを補完するのかを説明します。最も単純なのは、Dockerをインストールしてコンテナを起動する必要があることです。最後に、Dockerアプリケーション、Docker Swarm、Kubernetes、Marathon/Mesosの直接展開をサポートする新興テクノロジーのいくつかをチェックすることをお勧めします。確かに、もっと複雑で、Anabilitiesと比べると、探検に値する他の美徳があります。 –

4

同じDockerイメージを使用して複数の環境設定を処理することに関するご質問については、Consulのようなサービス検出ツールを集中設定/プロパティ管理ツールとして使用する予定です。コンテナを起動すると、そのアプリケーション(appID)と使用する必要がある環境(例:MyApplication:Dev)を示すENV varを設定し、起動時にConsulからその設定を取得します。私はまだConsul周辺のセキュリティを調べなければなりません(たとえば、DB接続資格情報を格納しているかのように、どのようにしてこれらの値を照会/更新できるかを制限する方法)。私はコンテナのためにこれを使うのではなく、一般的にすべてのアプリを使いたいと思っています。もう1つの優れた機能は、Consulの設定値を変更して、変更を即時に適用するためのフックをアプリに戻すことです(アプリケーションのRESTエンドポイントのように変更を適用して動的に適用することができます)。もちろん、あなたのアプリはこれをサポートするために書かれなければなりません!

immutable infrastructurePhoenix serversについては、Martin Fowlerのブログ記事をご覧ください。

関連する問題