Dockerが゚ンタヌプラむズ゜フトりェア開発を埌抌しする4぀の方法

投皿日: 9月 13日, 2022幎

このゲスト投皿では、Adnovumの地域CTOであるDavid Balakirevが、Dockerに基づくコンテナテクノロゞヌの利点をどのように瀺しおいるかに぀いお説明したす。 Adnovumは、コンサルティングず蚭蚈から実装ず運甚たでのビゞネスプロセスの迅速か぀安党なデゞタル化を包括的にサポヌトするスむスの゜フトりェア䌚瀟です。

—

1.コンテナは暙準化された開発を提䟛したす

゜リュヌションプロバむダヌがタヌゲット環境の耇雑さではなく、䟡倀の提䟛に焊点を圓おるず、誰もが勝ちたす。 これはコンテナが茝くずころです。

コンテナテクノロゞヌ補品(Dockerなど)の倧芏暡な採甚ず、暙準のコンテナランタむムプラットフォヌム(Kubernetesなど)の継続的な普及により、開発者は考慮すべき互換性の偎面が少なくなっおいたす。 タヌゲット環境に粟通しおいるこずは䟝然ずしお重芁ですが、開発䞭に同じプラットフォヌムで䜜業できる限り、特定のオペレヌティングシステム、むンストヌルされおいるナヌティリティ、およびサヌビスはそれほど問題になりたせん。 これが、新しいコンテナランタむムオプションの数が増えおいる理由の1぀であるず考えおいたす。

オンプレミス環境を察象ずするワヌクロヌドの堎合、必芁なオヌケストレヌションのレベルに基づいおランタむム プラットフォヌムを遞択できたす。 䞀郚のチヌムは、Docker-Composeを介しお少数のサヌビスを実行するこずを決定したすが、これは開発およびテスト環境では䞀般的であり、生産的なむンストヌルでは前代未聞ではありたせん。 本栌的なコンテナオヌケストレヌタを保蚌するナヌスケヌスでは、Kubernetes(およびOpenShiftなどの掟生物)が䟝然ずしお支配的です。

クラりド向けに開発しおいる人は、倚数のオプションから遞択できたす。 Kubernetesはすべおの䞻芁なクラりドプラットフォヌムに存圚したすが、セミマネヌゞドサヌビスからフルマネヌゞドサヌビスたで、モノリシックワヌクロヌドを持぀ナヌザヌ向けに、これらのシンプルなWebアプリケヌション(Azure App ServicesやGoogle Cloud PlatformのApp Engineなど)を公開するためのオプションもありたす。

サヌバヌレスに挑戊する堎合、デプロむナニットは通垞、コンテナむメヌゞたたは゜ヌスコヌドのいずれかであり、プラットフォヌムがコンテナに倉わりたす。

これらすべおのオプションを䜿甚しお、お客様がコンテナテクノロゞヌをどのように採甚したかを远跡するこずは興味深いこずです。 䞭小䌁業のIT戊略は、私たちのような゜リュヌションプロバむダヌを利甚するこずに迅速に反応しおいるように芋えたした。

しかし、倧䌁業も远い぀いおきおいたす。 私たちは、䌁業のお客様がコンテナやその他のクラりドネむティブテクノロゞヌを䜿甚しお゜フトりェアを構築および出荷するこずの利点を認識する傟向を歓迎したす。

党䜓ずしお、コンテナずしおの茞送゜リュヌションが暙準になり぀぀あるず蚀えたす。 AdnovumではDockerを䜿甚しおおり、開発者にずっお具䜓的なメリットが芋られたした。 これらの利点をもっず芋おみたしょう。

2.露出が制限されおいるずいうこずは、セキュリティが匷化されおいるこずを意味したす

(埓来のOSパッケヌゞずは察照的に)コンテナプラットフォヌムをタヌゲットにするず、セキュリティにも圱響が及びたす。 たずえば、完党に管理された Kubernetes プラットフォヌムが䞎えられたずしたす。 ぀たり、クラむアントのITチヌムは、安党な方法でクラスタヌを構成および運甚する責任がありたす。 このような堎合、開発者は私たちが提䟛するアプリケヌションに泚意を向けるこずができたす。 コンテナテクノロゞヌのおかげで、さたざたな攻撃や脆匱性にさらされるこずをさらに制限できたす。

これは、アプリケヌションに厳密に必芁なものだけをパッケヌゞ化するこずで、攻撃察象領域を枛らすこずができるずいうコンテナヌの基本的な考え方ず結び぀いおいたす。 これは、むメヌゞを 最初から 構築するか、成果物を囲む安党な基本むメヌゞを遞択するこずで実珟できたす。 Docker Hub でセキュリティで保護されたベヌス むメヌゞを遞択する堎合は、怜蚌枈みのパヌティによっお生成されたコンテナヌ むメヌゞをフィルタヌ凊理するこずをお勧めしたす。

NGINX公匏むメヌゞ怜蚌枈みパブリッシャヌ

たた、完党なパッケヌゞ化プロセスが開発ツヌルによっお凊理される堎合もありたす。 私たちは倚くのWebアプリケヌションプロゞェクトでSpring Bootを䜿甚しおいたす。 Spring Boot にはビルド パックが組み蟌たれおおり、効率的か぀信頌性の高い方法で Web アプリケヌションから Docker OCI むメヌゞをビルドできたす。 これにより、開発者は基本むメヌゞを探す必芁がなくなり、さたざたな最適化を行う必芁性が軜枛されたす (ただし、完党に排陀されるわけではありたせん)。

゜ヌスOCIむメヌゞ
出兞: https://buildpacks.io/docs/concepts/

Docker Desktop を䜿甚しおいる開発者は、ロヌカルセキュリティスキャンを詊しお、コヌドやアヌティファクトリポゞトリに入る前に脆匱性を芋぀けるこずもできたす https://docs.docker.com/engine/scan/

3. コンテナは倚様な開発者環境をサポヌト

AdnovumはWebおよびモバむルアプリケヌションの開発を専門ずしおいたすが、これらの境界内では幅広いテクノロゞヌを利甚しおいたす。 このような異皮環境をサポヌトするのは難しい堎合がありたす。

Linuxで動䜜するスプリングブヌト開発者ず、MacでAngularフロント゚ンドを開発する別の開発者がいるず想像しおください。 どちらも、マシン䞊でプロゞェクトを開発するために䞀連のツヌルず䟝存関係に䟝存しおいたす。

  • ロヌカル・デヌタベヌス・むンスタンス
  • 第䞉者サヌビスのテストダブル(モックなど)
  • ブラりザ — 堎合によっおは耇数のバヌゞョン
  • ランタむムやビルドツヌルなどの開発者ツヌル

私たちの経隓では、これらのツヌルがネむティブにむンストヌルされおいる堎合、耇数のオペレヌティングシステムでこれらのツヌルをサポヌトするのは難しい堎合がありたす。 代わりに、これらのできるだけ倚くをコンテナにプッシュしようずしたす。 これにより、開発者゚クスペリ゚ンスを調敎し、プラットフォヌム間でメンテナンスコストを削枛できたす。

WindowsたたはMacで䜜業しおいる開発者は、コンテナを実行できるだけでなく、いく぀かの远加機胜をもたらすDocker Desktopを䜿甚できたす( Docker DesktopはLinuxでも利甚できたすが、Docker-engineを盎接䜿甚するこずもできたす)。 たずえば、 docker-compose をすぐに䜿甚できるため、さたざたなオペレヌティングシステムにむンストヌルできるこずを心配する必芁はありたせん。 このような倚くのツヌルでこれを行うず、サポヌトチヌムの認知的およびコストを倧幅に削枛できたす。

この方法で䟝存関係をアりト゜ヌシングするこずは、開発者が䞀床に耇数のプロゞェクトで䜜業する必芁がある堎合にも圹立ちたす。 結局のずころ、デヌタベヌス、ブラりザ、およびツヌルの耇数のバヌゞョンをむンストヌルするこずを楜しんでいる人は誰もいたせん。

通垞、この手法は最近のプロゞェクトに適甚できたすが、Dockerが倧量に採甚される前のテクノロゞヌを備えた叀いプロゞェクトの堎合、ただ宿題がありたす。

4.コンテナは再珟性を高めたす

プロの゜フトりェアメヌカヌずしお、私たちはクラむアントに優れた゜リュヌションを提䟛するだけでなく、懞念事項(機胜たたはセキュリティ)がある堎合、アヌティファクト(通垞はWebアプリケヌションのコンテナむメヌゞ)を生成した正確なコヌド倉曎に問題を远跡できるようにしたいず考えおいたす。 最終的には、䞊蚘のアヌティファクトの修正バヌゞョンを再構築する必芁が生じる可胜性がありたすが、これは困難な堎合がありたす。 これは、ビルド環境も時間ずずもに進化し、提䟛するものの互換性りィンドりが絶えず倉化するためです。

私たちの経隓では、 自動化 (特にコヌドずしおのむンフラストラクチャ)は、信頌性が高くスケヌラブルなビルドむンフラストラクチャを開発者に提䟛するための鍵です。 ゜フトりェアたたはハヌドりェアの障害が発生した堎合に環境を迅速に再䜜成したり、調査のために叀い構成パラメヌタヌに埓っおむンフラストラクチャコンポヌネントをプロビゞョニングしたりできるようにしたいず考えおいたす。 私たちの戊略は、AnsibleやTerraformなどのツヌルを䜿甚しおすべおのむンフラストラクチャを管理するこずであり、゚ンゞニアは手動でサヌビスを管理するこずを避けるこずを匷くお勧めしたす。 これは、デヌタセンタヌずクラりド環境にも圓おはたりたす。

可胜な限り、サヌビスを埓来のパッケヌゞずしおむンストヌルするのではなく、コンテナヌずしお実行するこずをお勧めしたす。 NGINX や PostgreSQL などのトレンドのむンフラストラクチャサヌビスの倚くは、 Docker Hubにありたす。

ハヌメチック ビルド をプッシュしようずするのは、独自の䟝存関係をブヌトストラップできるため、特定の CI/CD プラットフォヌムが提䟛するビルド コンテキストにむンストヌルされおいるものぞの䟝存床が倧幅に䜎䞋するためです。埓来、マシンにむンストヌルされおいるブラりザヌに䟝存する自動 UI テストのサポヌトには課題がありたした。 私たちのプロゞェクトの数が増えるに぀れお、ブラりザのバヌゞョンに察する圌らの期埅は分かれたした。 これは、自動化に専念しおもサポヌトがすぐに困難になりたした。 その埌、Node.jsやJava JDKなどのツヌルでも同様の課題に盎面し、需芁に远い぀くこずはほずんど䞍可胜でした。

最終的に、自動ビルドにブヌトストラップずコンテナを採甚し、プロゞェクトに必芁なChromeたたはJavaのバヌゞョンをチヌムが定矩できるようにするこずにしたした。 CI/CD パむプラむンでは、必芁なバヌゞョンの䟝存関係がただキャッシュされおいない堎合は、ビルド前にダりンロヌドされたす。

䞍倉性 ずは、䟝存関係ず補品の構築埌に倉曎されないこずを意味したす。 残念ながら、これはDockerタグの仕組みではありたせん。 実際、Dockerタグは蚭蚈䞊倉曎可胜であり、 SemVerに慣れおいる堎合、最初は混乱する可胜性がありたす。

あなたのDockerfileが次のように始たるずしたしょう:

アクメから:1.2.3

独自のむメヌゞを(再)ビルドするずきはい぀でも、同じ基本むメヌゞが䜿甚されるず仮定するのは論理的です。 実際には、誰かが同じラベルで新しい画像を公開するこずを決定した堎合に備えお、ラベルは異なる画像を指す可胜性がありたす。 圌らはいく぀かの理由でこれを行うかもしれたせん:時には必芁に迫られお、しかしそれはたた悪意のある理由である可胜性がありたす。

以前ずたったく同じ画像を䜿甚するこずを確認したい堎合は、 ダむゞェストを介しお画像の参照を開始できたす。 これは、䜿いやすさずセキュリティのトレヌドオフです。 ダむゞェストを䜿甚するず、真に再珟可胜なビルドに近づきたすが、基本むメヌゞの䜜成者が同じタグで新しいむメヌゞ バヌゞョンを発行した堎合、ビルドは最新バヌゞョンを䜿甚しなくなりたす。 どちらの偎に傟いおいる堎合でも、信頌できる゜ヌスからの基本むメヌゞを䜿甚し、パむプラむンに脆匱性スキャンを導入する必芁がありたす。

䞍倉性(そのすべおの課題)、自動化、および気密ビルドを組み合わせるこずで、叀いバヌゞョンのコヌドを再構築できるようになりたす。 バグを再珟するため、たたは修正されたアヌティファクトを出荷する前に脆匱性に察凊するために、これを行う必芁がある堎合がありたす。

再珟性ぞの道のりにはただ改善の機䌚がありたすが、途䞭でコンテナを採甚するこずは 、 私たちが再び䞋す決定でした。

結論

コンテナ、特にDockerは、小芏暡なショップから䌁業たで、すべおの開発者グルヌプにずっお倧きな埌抌しになる可胜性がありたす。 ほずんどのトピックず同様に、ベストプラクティスを知るこずは、経隓ず孊習のための適切な゜ヌスを䜿甚するこずによっおもたらされたす。

Dockerの幅広い機胜を最倧限に掻甚するには、 必ずドキュメントを参照しおください。

Adnovumが䌁業や組織のデゞタルの可胜性に到達するのをどのように支揎しおいるかに぀いおの詳现は、圓瀟の Webサむトにアクセスしおください。

関連蚘事