Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)

圓瀟のテクニカル ディレクタヌの最新の講挔に基づいた出版物からブログを開始したす。 ディストル ドミトリヌ・ストリャロフ。 これらはすべお 2016 幎にさたざたな専門的なむベントで開催され、DevOps ず Docker のトピックに特化したものでした。 Badoo オフィスで行われた Dockerモスクワ ミヌティングの XNUMX ぀のビデオは、すでに公開されおいたす。 公開 オンラむン。 新しいものには、レポヌトの本質を䌝える蚘事が远加されたす。 それで 

31月XNUMX日のカンファレンスにお RootConf 2016フェスティバル「Russian Internet Technologies」RIT++ 2016の䞀環ずしお開催された「継続的デプロむメントずデプロむメント」セクションは、「Docker を䜿甚した継続的デリバリヌのベスト プラクティス」レポヌトで始たりたした。 Docker やその他のオヌプン゜ヌス補品を䜿甚しお継続的デリバリヌ (CD) プロセスを構築するためのベスト プラクティスを芁玄し、䜓系化したした。 私たちは実皌働環境でこれらの゜リュヌションを䜿甚しおいるため、実際の経隓に頌るこずができたす。

Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)

XNUMX時間もお時間いただける機䌚がございたしたら、 レポヌトのビデオ, フル芖聎するこずをおすすめしたす。 それ以倖の堎合は、䞻な抂芁をテキスト圢匏で以䞋に瀺したす。

Docker を䜿甚した継続的デリバリヌ

䞋に 連続攟出 私たちは、アプリケヌション コヌドが Git リポゞトリから最初に実皌働環境に到達し、その埌アヌカむブに到達するずいう䞀連のむベントを理解しおいたす。 圌女はこんな感じです。 Git → ビルド → テスト → リリヌス → 運甹.

Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)
レポヌトの倧郚分はビルド段階 (アプリケヌションのアセンブリ) に圓おられおおり、リリヌスず操䜜のトピックに぀いおは簡単に觊れられおいたす。 問題ずそれを解決できるパタヌンに぀いお説明したすが、これらのパタヌンの具䜓的な実装は異なる堎合がありたす。

そもそもなぜここで Docker が必芁なのでしょうか? このオヌプン゜ヌス ツヌルの文脈で継続的デリバリヌの実践に぀いお話すこずにしたのは圓然のこずでした。 レポヌト党䜓はその䜿甚法に特化しおいたすが、アプリケヌション コヌドのロヌルアりトの䞻なパタヌンを考慮するず、倚くの理由が明らかになりたす。

䞻な展開パタヌン

したがっお、アプリケヌションの新しいバヌゞョンをロヌルアりトするずきは、必ず次のような問題に盎面したす。 ダりンタむムの問題、本番サヌバヌの切り替え時に生成されたす。 アプリケヌションの叀いバヌゞョンから新しいバヌゞョンぞのトラフィックを即座に切り替えるこずはできたせん。たず、新しいバヌゞョンが正垞にダりンロヌドされただけでなく、「りォヌムアップ」しおいるこず (぀たり、リク゚ストを凊理する完党な準備ができおいるこず) を確認する必芁がありたす。

Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)
したがっお、しばらくの間は、アプリケヌションの䞡方のバヌゞョン (新旧) が同時に動䜜したす。 それは自動的に次のこずに぀ながりたす 共有リ゜ヌスの競合: ネットワヌク、ファむル システム、IPC など。 Docker を䜿甚するず、同じホスト (サヌバヌ/仮想マシン) 内でリ゜ヌスの分離が保蚌され、異なるバヌゞョンのアプリケヌションを別々のコンテナヌで実行するこずで、この問題は簡単に解決されたす。 もちろん、断熱材をたったく䜿わずにいく぀かのトリックを䜿甚しおなんずかするこずもできたすが、既補の䟿利なツヌルがある堎合は、逆の理由がありたす-それを無芖しないでください。

コンテナ化は、導入時に他にも倚くの利点をもたらしたす。 どのアプリケヌションも䟝存したす 特定のバヌゞョン (たたはバヌゞョン範囲) 通蚳者、モゞュヌル/拡匵機胜などの可甚性ずそのバヌゞョン。 そしお、これは盎接実行可胜な環境だけでなく、環境党䜓にも圓おはたりたす。 システム゜フトりェア ずそのバヌゞョン (䜿甚される Linux ディストリビュヌションたで)。 コンテナにはアプリケヌション コヌドだけでなく、必芁なバヌゞョンのプレむンストヌルされたシステム ゜フトりェアずアプリケヌション ゜フトりェアも含たれおいるため、䟝存関係の問題を忘れるこずができたす。

䞀般化したしょう 䞻な展開パタヌン 新しいバヌゞョンでは、次の芁玠が考慮されたす。

  1. 最初は、叀いバヌゞョンのアプリケヌションが最初のコンテナヌで実行されたす。
  2. その埌、新しいバヌゞョンがロヌルアりトされ、XNUMX 番目のコンテナヌで「りォヌムアップ」されたす。 この新しいバヌゞョン自䜓には、曎新されたアプリケヌション コヌドだけでなく、その䟝存関係やシステム コンポヌネント (たずえば、OpenSSL の新しいバヌゞョンやディストリビュヌション党䜓) も含たれる可胜性があるこずに泚意しおください。
  3. 新しいバヌゞョンがリク゚ストを凊理する準備が完党に敎うず、トラフィックは最初のコンテナから XNUMX 番目のコンテナに切り替わりたす。
  4. 叀いバヌゞョンを停止できるようになりたした。

アプリケヌションの異なるバヌゞョンを別々のコンテナヌにデプロむするこのアプロヌチには、別の利䟿性が提䟛されたす。 クむックロヌルバック 叀いバヌゞョンに戻したす (結局のずころ、トラフィックを目的のコンテナヌに切り替えるだけで十分です)。

Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)
最埌の最初の掚奚事項は、船長ですら非を芋぀けるこずができないもののように聞こえたす。[Docker を䜿甚しお継続的デリバリヌを構成する堎合] Docker を䜿甚する [そしおそれが䜕をもたらすかを理解する]」 これはすべおの問題を解決する特効薬ではなく、玠晎らしい基盀を提䟛するツヌルであるこずを忘れないでください。

再珟性

「再珟性」ずは、アプリケヌションを操䜜するずきに遭遇する䞀般化された䞀連の問題を意味したす。 私たちはそのようなケヌスに぀いお話しおいたす。

  • ステヌゞングのために品質郚門によっおチェックされたスクリプトは、本番環境で正確に再珟される必芁がありたす。
  • アプリケヌションは、さたざたなリポゞトリ ミラヌからパッケヌゞを受信できるサヌバヌ䞊で公開されたす (時間の経過ずずもに、アプリケヌションは曎新され、むンストヌルされおいるアプリケヌションのバヌゞョンも曎新されたす)。
  • 「地元ではすべおうたくいきたす」 (...そしお開発者は運甚環境に入るこずができたせん。)
  • 叀い (アヌカむブされた) バヌゞョンで䜕かを確認する必芁がありたす。
  • ...

その䞀般的な本質は、䜿甚される環境の完党な遵守および人的芁因の䞍圚が必芁であるずいう事実に芁玄されたす。 再珟性をどのように保蚌できるでしょうか? Dockerむメヌゞを䜜成する Git のコヌドに基づいお、テスト サむト、運甚環境、プログラマヌのロヌカル マシンなど、あらゆるタスクに䜿甚したす。同時に、実行されるアクションを最小限に抑えるこずが重芁です。 埌の 画像の組み立お: 単玔であればあるほど、゚ラヌが発生する可胜性は䜎くなりたす。

むンフラストラクチャはコヌドです

むンフラストラクチャ芁件 (サヌバヌ ゜フトりェアの可甚性、そのバヌゞョンなど) が圢匏化されおおらず、「プログラム」されおいない堎合、アプリケヌションの曎新をロヌルアりトするず、悲惚な結果が生じる可胜性がありたす。 たずえば、ステヌゞングではすでに PHP 7.0 に切り替え、それに応じおコヌドを曞き盎しおいたす。その埌、本番環境で叀い PHP (5.5) が䜿甚されおいるず、きっず誰かが驚くでしょう。 むンタプリタのバヌゞョンにおける倧きな倉曎を忘れるこずはないかもしれたせんが、「悪魔は现郚に宿る」のです。驚きは䟝存関係のマむナヌアップデヌトにあるかもしれたせん。

この問題を解決するアプロヌチは次のように知られおいたす。 IaC (Infra Structure as Code、「コヌドずしおのむンフラストラクチャ」) これには、アプリケヌション コヌドずずもにむンフラストラクチャ芁件を保存するこずが含たれたす。 これを䜿甚するず、開発者ず DevOps スペシャリストは、同じ Git アプリケヌション リポゞトリを、その異なる郚分で操䜜できたす。 このコヌドから、Git で Docker むメヌゞが䜜成され、むンフラストラクチャの詳现をすべお考慮しおアプリケヌションがデプロむされたす。 簡単に蚀えば、画像を組み立おるためのスクリプト (ルヌル) は゜ヌス コヌドず同じリポゞトリに存圚し、マヌゞされる必芁がありたす。

Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)

マルチレむダヌ アプリケヌション アヌキテクチャの堎合 (たずえば、Docker コンテナヌ内で既に実行されおいるアプリケヌションの前に立぀ nginx がありたす)、各レむダヌの Git のコヌドから Docker むメヌゞを䜜成する必芁がありたす。 次に、最初のむメヌゞにはむンタヌプリタヌずその他の「近い」䟝存関係を持぀アプリケヌションが含たれ、XNUMX 番目のむメヌゞにはアップストリヌムの nginx が含たれたす。

Docker むメヌゞ、Git ずの通信

Git から収集されたすべおの Docker むメヌゞは、䞀時ずリリヌスの XNUMX ぀のカテゎリに分類されたす。 䞀時的なむメヌゞ Git のブランチの名前でタグ付けされおおり、次のコミットによっお䞊曞きされる可胜性があり、プレビュヌのみにロヌルアりトされたす (本番環境にはロヌルアりトされたせん)。 これがリリヌス版ずの䞻な違いです。どの特定のコミットが含たれおいるかは決しおわかりたせん。

䞀時むメヌゞに収集するこずは理にかなっおいたす。マスタヌ ブランチ (マスタヌ ブランチを別のサむトに自動的にロヌルアりトしお、マスタヌの珟圚のバヌゞョンを垞に確認できたす)、リリヌスのあるブランチ、特定のむノベヌションのブランチです。

Docker を䜿甚した継続的デリバリヌの実践 (レビュヌずビデオ)
䞀時むメヌゞのプレビュヌを実皌働環境に倉換する必芁が生じた埌、開発者は特定のタグを付けたす。 タグごずに自動収集 リリヌスむメヌゞ (そのタグは Git のタグに察応したす) ステヌゞングにロヌルアりトされたす。 品質郚門による怜蚌が成功するず、生産に進みたす。

ダップ

ここで説明した内容 (ロヌルアりト、むメヌゞのアセンブリ、その埌のメンテナンス) はすべお、Bash スクリプトやその他の「即垭」ツヌルを䜿甚しお独立しお実装できたす。 しかし、これを行うず、ある時点で実装が非垞に耇雑になり、制埡性が䜎䞋するこずになりたす。 これを理解しお、私たちは CI/CD を構築するための独自の特殊なワヌクフロヌ ナヌティリティを䜜成するようになりたした。 ダップ.

その゜ヌス コヌドは Ruby で曞かれおおり、オヌプン゜ヌスで公開されおいたす。 GitHubの。 残念ながら、珟時点ではドキュメントがこのツヌルの最倧の匱点ですが、私たちはそれに取り組んでいたす。 そしお、私たちは dapp に぀いお䜕床も曞いたり話したりする぀もりです。なぜなら... 関心のあるコミュニティ党䜓ずその機胜を共有するのが埅ちきれたせんが、それたでの間、問題やプル リク゚ストを送信したり、GitHub でプロゞェクトの開発をフォロヌしたりしおください。

13 幎 2019 月 XNUMX 日曎新: 珟圚プロゞェクト䞭 ダップ に名前倉曎されたした ワヌフ、そのコヌドは Go で完党に曞き盎され、ドキュメントは倧幅に改善されたした。

Kubernetes

もう XNUMX ぀の既補のオヌプン゜ヌス ツヌルは、専門的な環境で既に倧きな評䟡を埗おいたす。 Kubernetes、Docker 管理クラスタヌ。 Docker 䞊に構築されたプロゞェクトの運甚における Docker の䜿甚に関するトピックはレポヌトの範囲を超えおいるため、プレれンテヌションはいく぀かの興味深い機胜の抂芁に限定されおいたす。

ロヌルアりトのために、Kubernetes は以䞋を提䟛したす。

  • readiness プロヌブ - アプリケヌションの新しいバヌゞョンの準備ができおいるかを確認したす (トラフィックをそのバヌゞョンに切り替えるため)。
  • ロヌリング曎新 - コンテナヌのクラスタヌ内の順次むメヌゞ曎新 (シャットダりン、曎新、起動の準備、トラフィックの切り替え)。
  • 同期曎新 - 異なるアプロヌチでクラスタヌ内のむメヌゞを曎新したす。最初にコンテナヌの半分を曎新し、次に残りのコンテナヌを曎新したす。
  • Canary リリヌス - 異垞を監芖するために、限られた (少数の) 数のコンテナ䞊で新しいむメヌゞを起動したす。

継続的デリバリヌは単に新しいバヌゞョンをリリヌスするだけではないため、Kubernetes にはその埌のむンフラストラクチャのメンテナンスのための倚くの機胜 (すべおのコンテナの組み蟌み監芖ずロギング、自動スケヌリングなど) が備わっおいたす。これらはすべおすでに機胜しおおり、適切な機胜が远加されるのを埅぀だけです。プロセスぞの実装。

最終的な掚奚事項

  1. ドッカヌを䜿甚したす。
  2. あらゆるニヌズに察応するアプリケヌションの Docker むメヌゞを䜜成したす。
  3. 「むンフラストラクチャはコヌドである」ずいう原則に埓っおください。
  4. Git を Docker にリンクしたす。
  5. ロヌルアりトの順序を調敎したす。
  6. 既補のプラットフォヌム (Kubernetes たたはその他) を䜿甚したす。

ビデオずスラむド

パフォヌマンス動画玄XNUMX時間 YouTubeで公開された (レポヌト自䜓は 5 分から始たりたす - この瞬間から再生するにはリンクをクリックしおください).

報告曞のプレれンテヌション:

PS

私たちのブログのトピックに関するその他のレポヌト:

出所 habr.com

コメントを远加したす