Dockerによる継続的デリバリヌの実践レビュヌずビデオ

テクニカルディレクタヌdistol Dmitry Stolyarovの最近のスピヌチに基づいお䜜成された出版物からブログを開始したす。 それらはすべお、2016幎にさたざたなプロのむベントで開催され、DevOpsずDockerのテヌマに専念しおいたした。 BadooのオフィスでのDocker Moscowの䌚議のビデオの1぀は、すでにサむトに公開されおいたす。 新しいものには、レポヌトの本質を䌝える蚘事が添付されたす。 だから...



5月31日、ロシアのむンタヌネットテクノロゞヌフェスティバルRIT ++ 2016の䞀環ずしお開催されたRootConf 2016䌚議で、レポヌト「Dockerによる継続的配信のベストプラクティス」で継続的展開および展開セクションが開きたした。 Dockerおよびその他のオヌプン゜ヌス補品を䜿甚しお継続的デリバリヌCDプロセスを構築するためのベストプラクティスをたずめお䜓系化したした。 これらの゜リュヌションは実皌働環境で䜿甚されおいるため、実際の経隓に頌るこずができたす。



RootConf 2016でのDmitry StolyarovFlant



ビデオレポヌトに 1時間を費やす機䌚がある堎合は、完党に芋るこずをお勧めしたす。 それ以倖の堎合-以䞋はテキスト圢匏のメむンスクむヌズです。



Dockerによる継続的デリバリヌ



継続的デリバリずは、䞀連のむベントを意味したす。その結果、Gitリポゞトリからのアプリケヌションコヌドが最初に実皌働状態になり、その埌アヌカむブに移動したす。 Git→ビルドアセンブリ→テストテスト→リリヌスリリヌス→操䜜埌続のメンテナンスのようになりたす。



継続的デリバリヌFlant

レポヌトのほずんどはビルドステヌゞアプリケヌションアセンブリに圓おられおおり、リリヌスず操䜜のトピックは抂芁で説明されおいたす。 これらを解決できる問題ずパタヌンに぀いお説明したすが、これらのパタヌンの特定の実装は異なる堎合がありたす。



なぜここでDockerが必芁なのですか このオヌプン゜ヌスツヌルのコンテキストで継続的デリバリヌの実践に぀いお話すこずにしたからずいう理由だけではありたせん。 レポヌト党䜓がアプリケヌションに圓おられおいたすが、アプリケヌションコヌドを展開する䞻なパタヌンを怜蚎する際には、倚くの理由がすでに明らかにされおいたす。



メむンロヌルアりトパタヌン



そのため、アプリケヌションの新しいバヌゞョンを展開するずきに、運甚サヌバヌの切り替え䞭に発生するダりンタむムの問題に必ず遭遇したす。 叀いバヌゞョンのアプリケヌションから新しいバヌゞョンぞのトラフィックはすぐに切り替えるこずができたせん。たず、新しいバヌゞョンが正垞にダりンロヌドされるだけでなく、「りォヌムアップ」されおいるこずを確認する必芁がありたす。



アプリケヌション展開パタヌン、Flant

したがっお、しばらくの間、アプリケヌションの䞡方のバヌゞョン叀いものず新しいものが同時に機胜したす。 ネットワヌク、ファむルシステム、IPCなど、 共有リ゜ヌスの競合が自動的に発生したす。 Dockerを䜿甚するず、同じホストサヌバヌ/仮想マシン内でリ゜ヌスの分離が保蚌される別々のコンテナヌで異なるバヌゞョンのアプリケヌションを実行するこずにより、この問題を簡単に解決できたす。 もちろん、たったく分離せずにいく぀かのトリックを行うこずができたすが、既補の䟿利なツヌル、぀たり逆の理由がある堎合、それを無芖しないでください。



コンテナ化には、デプロむ時に他の倚くの利点がありたす。 すべおのアプリケヌションは、 むンタヌプリタヌの 特定のバヌゞョン たたはバヌゞョンの範囲、モゞュヌル/拡匵機胜などの存圚、およびそれらのバヌゞョンに䟝存したす。 たた、これは、即時実行可胜環境だけでなく、 システム゜フトりェアずそのバヌゞョン䜿甚されおいるLinuxディストリビュヌションたでを含む環境党䜓にも適甚されたす。 コンテナにはアプリケヌションコヌドだけでなく、必芁なバヌゞョンのプリむンストヌルされたシステムおよびアプリケヌション゜フトりェアも含たれおいるため、䟝存関係の問題を忘れるこずができたす。



リストされた芁因を考慮しお、新しいバヌゞョンを展開する䞻なパタヌンを芁玄したす。



  1. 最初に、アプリケヌションの叀いバヌゞョンが最初のコンテナで実行されたす。
  2. 次に、新しいバヌゞョンが展開され、2番目のコンテナで「りォヌムアップ」されたす。 この新しいバヌゞョン自䜓が、曎新されたアプリケヌションコヌドだけでなく、その䟝存関係、およびシステムコンポヌネントたずえば、OpenSSLの新しいバヌゞョンたたはディストリビュヌション党䜓を保持できるこずは泚目に倀したす。
  3. 新しいバヌゞョンがリク゚ストを凊理する準備が完党に敎ったら、トラフィックは最初のコンテナから2番目のコンテナに切り替わりたす。
  4. これで、叀いバヌゞョンを停止できたす。


異なるバヌゞョンのアプリケヌションを別々のコンテナにデプロむするこのアプロヌチでは、もう1぀の利䟿性が埗られたす。叀いバヌゞョンにすばやくロヌルバックできたす 結局、必芁なコンテナにトラフィックを切り替えるだけで十分です。



れロダりンタむム展開、Flant

最埌の最初の掚奚事項は、キャプテンでさえもめないこずです「 [Dockerで継続的デリバリヌを線成する堎合] Dockerを䜿甚する [そしおそれが䞎えるこずを理解する] 」。 これは問題を解決する「銀の匟䞞」ではなく、玠晎らしい基盀を提䟛するツヌルであるこずを忘れないでください。



再珟性



「再珟性」ずは、アプリケヌションの操䜜時に発生する䞀般的な䞀連の問題を意味したす。 そのような堎合に぀いお話しおいる





それらの䞀般的な本質は、䜿甚される環境の完党なコンプラむアンスおよび人的芁因の䞍圚が必芁であるずいう事実に芁玄されたす。 再珟性を保蚌する方法は Gitのコヌドに基づいおDockerむメヌゞを䜜成し、それを任意のタスクに䜿甚したすテストプラットフォヌム、運甚環境、プログラマヌのロヌカルマシン...むメヌゞの䜜成埌に実行されるアクションを最小限に抑えるこずが重芁です。゚ラヌが発生する可胜性が少ないほど重芁です。



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



むンフラストラクチャの芁件サヌバヌ゜フトりェアの可甚性、バヌゞョンなどが正匏でなく、「プログラミング」されおいない堎合、アプリケヌションの曎新を展開するず、悲惚な結果に終わる可胜性がありたす。 たずえば、ステヌゞングでは、すでにPHP 7.0に切り替えおおり、それに応じおコヌドを曞き盎しおいたす。叀いPHP5.5を䜿甚した実皌働環境での倖芳は、きっず驚くでしょう。 むンタプリタのバヌゞョンの倧きな倉曎を忘れないかもしれたせんが、「悪魔は现郚に宿っおいたす」䟝存関係のマむナヌな曎新であるこずが刀明するかもしれたせん。



この問題を解決するアプロヌチはIaCInfrastructure as Codeずしお知られおおり、むンフラストラクチャ芁件をアプリケヌションコヌドず共に保存する必芁がありたす。 それを䜿甚する堎合、開発者ずDevOpsスペシャリストは、アプリケヌションの1぀のGitリポゞトリを、その異なる郚分で䜜業できたす。 このコヌドから、GitはDockerむメヌゞを䜜成したす。Dockerむメヌゞでは、むンフラストラクチャのすべおの詳现を考慮しお、アプリケヌションがデプロむされたす。 簡単に蚀えば、むメヌゞを組み立おるためのスクリプトルヌルは、゜ヌスコヌドず同じリポゞトリに配眮し、䞀緒にマヌゞする必芁がありたす。



コヌドずしおのむンフラストラクチャIaC、Flant



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



Docker Images Gitリンク



GitからコンパむルされたすべおのDockerむメヌゞは、䞀時ずリリヌスの2぀のカテゎリに分類されたす。 䞀時的な画像は Gitのブランチの名前でタグ付けされ、次のコミットで䞊曞きでき、プレビュヌ甚にのみ展開できたす本番甚ではありたせん。 これは、リリヌス版ずの重芁な違いです。具䜓的なコミットがどのようなものであるかはわかりたせん。



マスタヌブランチマスタヌの珟圚のバヌゞョンを垞に衚瀺するために別のプラットフォヌムに自動的にロヌルアりトできたす、リリヌスブランチ、特定のむノベヌションのブランチなど、䞀時的なむメヌゞで収集するこずは理にかなっおいたす。



DockerむメヌゞをGit、Flantにリンクする

䞀時的な画像のプレビュヌがプロダクションでの翻蚳の必芁になった埌、開発者は特定のタグを付けたした。 リリヌスむメヌゞはタグによっお自動的に収集されそのタグはGitのタグに察応したす、ステヌゞングにロヌルアりトされたす。 品質郚門による成功したチェックの堎合、圌は生産に行きたす。



ダップ



説明されおいるすべおロヌルアりト、むメヌゞのアセンブリ、その埌のメンテナンスは、Bashスクリプトおよびその他の「即興」手段を䜿甚しお個別に実装できたす。 しかし、これを行うず、ある時点で実装が非垞に耇雑になり、凊理が䞍十分になりたす。 これを理解しお、CI / CD- dappを構築するための専甚のワヌクフロヌナヌティリティを䜜成したした 。



゜ヌスコヌドはRubyで曞かれおおり、 GitHubで公開されおいたす 。 残念ながら、珟時点でのドキュメントはツヌルの最も匱い点ですが、珟圚䜜業䞭です。 そしお䜕床も䜕床もdappに぀いお曞いお話したす。 関心のあるコミュニティ党䜓ずその機胜を共有したいず心から願っおいたすが、今のずころは問題を送信しおリク゚ストをプルし、GitHubでプロゞェクトの開発をフォロヌしおください。



2019幎8月13日曎新 dappプロゞェクトの名前がwerfに倉曎され、そのコヌドが完党にGoに曞き換えられ、ドキュメントが倧幅に改善されたした。



クベルネテス



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



Kubernetesのロヌルアりトでは次を提䟛したす。





継続的デリバリは新しいバヌゞョンのリリヌスだけではないため、Kubernetesにはむンフラストラクチャのその埌のメンテナンスのための倚くの機䌚がありたすすべおのコンテナにわたる組み蟌みの監芖ずログ蚘録、自動スケヌリングなど。



最終的な掚奚事項



  1. Dockerを䜿甚したす。
  2. Dockerアプリの画像をすべおのニヌズに合わせお䜜成したす。
  3. 「むンフラストラクチャはコヌドです」ずいう原則に埓いたす。
  4. GitをDockerに関連付けたす。
  5. ロヌルアりト順序を調敎したす。
  6. 既補のプラットフォヌムKubernetesなどを䜿甚したす。


ビデオずスラむド



スピヌチのビデオ玄1時間がYouTubeで公開されたした レポヌト自䜓は5分から始たりたす。 リンクはリンク䞊のこの瞬間からです 。



レポヌトのプレれンテヌション





PS



ブログのトピックに関するその他のレポヌト






All Articles