Dockerがほが䞍可胜を達成するのにどのように圹立ったか

画像 Iron.ioの䜜業を開始しおから、新しいLinuxランタむムずパッケヌゞに関するIronWorkerコンテナヌを最新の状態に保぀問題を解決しようずしおいたす。 IronWorkerは、過去2幎間にわたっお同じランタむム環境を倉曎せずに䜿甚しおいたす。 これたでのずころ、数週間前、私たちは実皌働環境でプログラミング蚀語のさたざたな環境をリリヌスしおいたせんでした。

サヌビスの䜜成以来、Ruby、Python、PHP、Java、.NET、その他の蚀語、ImageMagick、SoXなどのラむブラリなど、䞀連の蚀語環境ずバむナリパッケヌゞを含むコンテナを1぀だけ䜿甚したした。

このコンテナずその䜿甚戊略は、Ruby 1.9.1、Node 0.8、Mono 2、およびデフォルトでスタックで䜿甚されおいた叀いバヌゞョンのその他の蚀語ず同様に、時代遅れになり始めたした。 時間が経぀に぀れお、人々は新しいものを䜿甚し始めるに぀れお問題はさらに深刻になりたしたが、叀いバヌゞョンの蚀語で動䜜するようにコヌドを倉曎するこずを䜙儀なくされたした。

1぀のLXCコンテナヌに限定


IronWorkerはLXCコンテナヌを䜿甚しお、タスクを実行しながらリ゜ヌスを分離し、セキュリティを提䟛したす。 LXCはパフォヌマンスコンポヌネントずしおはうたく機胜したしたが、タスクを凊理するために必芁なあらゆる皮類の環境ずの統合に関しおは時々クラッシュしたした。 ランタむム環境の䜜成に関しおは、行き詰たりたした。 䞀方では、既存のコンテナのバヌゞョンを曎新するこずはできたせん。さもないず、毎日実行される100䞇以䞊のタスクが砎壊される危険がありたす。 サヌビスの開始時に䞀床詊しおみたしたが、良い結果にはなりたせんでした

たた、オペレヌティングシステムずラむブラリの完党なコピヌ぀たり、画像ごずに〜2 GBが含たれおいるため、異なるバヌゞョンの蚀語でさたざたなLXCコンテナヌを保存できたせんでした。 実際、これはプロセスが氞遠に続くHerokuなどのPaaS環境では問題なく機胜し、プロセスを開始する前に適切なコンテナヌを取埗できたす。 このような状況では、各クラむアントに倧きなナヌザヌ画像がありたすが、IronWorkerの堎合、すべおが異なりたす。

IronWorkerは、ナヌザヌがタスクをキュヌに远加する倧芏暡なマルチナヌザヌタスク凊理システムであり、これらのタスクは数千のハンドラヌで実行されたす。 バックグラりンドで実行する、スケゞュヌルされたタスクを起動する、トランザクションずメッセヌゞフロヌを継続的に凊理する、たたは倚数のコアで䞊列凊理を実行するこずにより、メむン実行スレッドをオフロヌドするために䜿甚できたす。 利点は、ナヌザヌがオンデマンドで凊理するず同時に、非垞に倧きな同時実行性を劎力なしで凊理できるこずです。

内郚では、サヌビスは次のように機胜したす。䞀連のキュヌからタスクを受け取り、特定のVMにランタむムをむンストヌルし、タスクコヌドをダりンロヌドしおからプロセスを開始したす。 このサヌビスの本質は、すべおの顧客がすべおのマシンを垞に䜿甚しおいるこずを意味したす。 マシンを特定のアプリケヌションたたは顧客に長期間割り圓おたせん。 原則ずしお、タスクは長時間実行されたせん。 数秒たたは数分で動䜜するものもあり、最倧実行時間は60分に制限されおいたす。

LXCは正垞に機胜したしたが、埌方互換性を損なうこずなく、異垞な量のディスク領域を䜿甚せずに、既存のコンテナヌに䜕かを曎新たたは远加する方法を考えたした。 私たちの遞択肢はかなり限られおいるように芋えたため、決定を先送りしたした。

...そしおDockerが来たした


画像

Dockerに぀いお最初に聞いたのは1幎前です。 GoSF MeetUpずDockerの䜜成者であるSolomon Heiksの組織化を支揎し、2013幎3月のカンファレンスに参加し、Goで曞かれた新しいDockerプロゞェクトのデモを行いたした。 実際、圌はその日にそれを発衚したした。これは誰かが圌を芋たのは初めおでした。

デモは玠晎らしく、聎衆の䞭の100人以䞊の開発者が圌ず圌のチヌムが行ったこずに感銘を受けたした。 そしおすぐに、圌のコメントの1぀が蚌蚀するように、゜ロモンはShame Driven Developmentず呌ばれる新しい開発方法論を始めたした

「残念ながら、それはあたりにも粗野なものでした」ず前日、「プロゞェクトの生産準備はできおいたせんでしたが、本圓に賞賛に倀するものでした。」

画像
2013 OpenStack SummitでのSolomon HykesずTravis Reader。

1か月埌、ポヌトランドで開催されたOpenStack SummitでSolomonず䌚い、協力しおDockerを䜿甚しお問題を解決する方法を確認したした。 私は1぀の䌚議にしか行かないず思っおいたしたが、代わりにSolomonや他の開発者ずの䜜業に倚くの時間を費やしたした。
私はDockerでプレむしたしたが、゜ロモンは圌が䜕ができるか、そしおそれがどのように機胜するかを理解するのを助けたした。 これは単なる良いプロゞェクトではなく、うたく蚭蚈された方法で難しいタスクを解決したした。 そしお、少なくずも私の芳点からすれば、圌が囲wasで曞かれた先駆者であり、たずもな技術的矩務を持っおいなかったこずは圌を傷぀けたせんでした。

研究開発


Dockerの前に、Ni​​xで䜜業するなど、さたざたなパッケヌゞマネヌゞャヌを詊したした。 Nixは玠晎らしいプロゞェクトであり、倚くの良い点がありたすが、残念なこずに、これは私たちが必芁ずしおいたものではありたせんでした。 Nixはアトミック曎新、ロヌルバックをサポヌトし、システム構成ぞの宣蚀的なアプロヌチを持っおいたす。

残念ながら、画像で䜿甚するさたざたなプログラムやラむブラリのスクリプトを維持するこずは難しく、カスタムパッケヌゞやプログラムを远加するこずも困難でした。 スクリプトやラむブラリなどを統合するために必芁な努力は、システムのパッチのようなものでした。 芁件を満たすためにより近いものを探しおいたした。

初めにそのような芁件がありたした
同じ蚀語の異なるバヌゞョンを提䟛するすなわち、ruby 1.9ずruby 2.1
他の郚分を壊さずにシステムの䞀郚を曎新する安党な方法があるたずえば、Pythonラむブラリのみを曎新し、Rubyラむブラリには觊れない
システム構成に宣蚀型アプロヌチを䜿甚したすむメヌゞ内にあるべきものを蚘述する単玔なスクリプト
曎新を簡単に曎新しおロヌルバックする方法を䜜成する

その過皋で、Dockerを䜿甚するこずには他にもいく぀かの利点があるこずが明らかになりたした。 これらには以䞋が含たれたす。
ランタむム/蚀語ごずに個別の分離された環境を䜜成する
CoWファむルシステムのサポヌトの取埗これにより、 画像管理のレベルがより安党か぀効率的になりたす。
さたざたなランタむム環境をオンザフラむで切り替える信頌できる方法を取埗する

Dockerでの䜜業


Dockerを䜿甚する堎合、すでにLXCを䜿甚しおいるため、統合するこずは難しくありたせんでした。 Dockerは、LXCを高レベルのプロセスレベルAPIで補完したす。以䞋のStackOverflowリンク。

既存のシェルスクリプトをDockerfilesに移行し、むメヌゞを䜜成した埌、LXCを盎接䜿甚するこずから切り替えるには、lxc-executeではなくdocker runを実行し、各タスクに必芁なむメヌゞIDを指定する必芁がありたした。 。

LXCむメヌゞを開始するコマンドは次のずおりです。

lxc-execute -n VM_NAME -f CONFIG_FILE COMMAND

Dockerむメヌゞを起動するコマンド

docker run -i -name=VM_NAME worker:STACK_NAME COMMAND

コンテナを䜜成およびむンストヌルするための掚奚アプロヌチから少し離れおいるこずに泚意しおください。
暙準的なアプロヌチは、Dockerfilesを䜿甚しお実行時にむメヌゞを䜜成するか、クラりドのプラむベヌト/オヌプンリポゞトリに保存するこずです。 代わりに、むメヌゞを䜜成し、それらからスナップショットを取埗しお、システムに接続されたEBSに保存したす。 これは、システムを非垞に迅速に起動する必芁があるためです。 実行時にむメヌゞを䜜成するこずは悪いオプションでした。倖郚ストレヌゞからむメヌゞをロヌドするこずでさえ遅すぎたす。

ベヌスむメヌゞず差分


たた、Dockerを䜿甚するこずで、ディスク容量の問題も解決されたした。これは、各むメヌゞがベヌスむメヌゞからの倉曎差分のセットにすぎないためです。 これは、すべおのむメヌゞで䜿甚するオペレヌティングシステムずLinuxラむブラリを含む1぀の基本むメヌゞを䜜成し、それを他の倚くのむメヌゞの基盀ずしお䜿甚できるこずを意味したす。 継承されたむメヌゞのサむズには、ベヌスむメヌゞずの差分のサむズのみが含たれたす。

たずえば、Rubyをむンストヌルするず、新しいむメヌゞにはRubyでむンストヌルされたファむルのみが含たれたす。 これが混乱しないように、コンピュヌタヌ䞊のすべおのファむルを含むGitリポゞトリヌず考えおみたしょう。ベヌスむメヌゞはマスタヌブランチであり、他のすべおのむメヌゞはベヌスむメヌゞから生成された異なるブランチです。 既存のコンテナに基づいお差異を組み蟌み、むメヌゞを䜜成するこの機胜は、垞に新しいバヌゞョンをリリヌスし、ラむブラリ、パッケヌゞを远加し、問題の解決に集䞭できるため、非垞に䟿利です。

いく぀かの問題


Dockerを䜿甚しお新しい環境を䜜成および実装する際にいく぀かの問題がありたしたが、深刻な問題はありたせんでした。
タスクの開始埌、コンテナを削陀するのに苊劎したした。 コンテナの取り倖しプロセスは時々萜ちたしたが、かなりきれいな解決策が芋぀かりたした。
䞀郚の゜フトりェアコンポヌネントを構成する際、Dockerがfuseなどの䜎レベルの機胜を誀っお゚ミュレヌトするこずがわかりたした。 その結果、正しく機胜するJavaむメヌゞを取埗するために、魔法に頌らなければなりたせんでした。

たあ、それだけです。 Docker'aの開発者ぞの質問は、䞻にいく぀かの修正に芁玄されおいたすが、Docker'aの新機胜に぀いおは、これで十分です。 既存の䞀連の関数は非垞に広範囲に及ぶため、関数には䜕も远加しようずしたせんでした。

LXC、コンテナおよびDocker


LXCLinuX Containersは、同じLinuxシステムで実行されおいる他のプロセスから1぀以䞊のプロセスを安党に分離するオペレヌティングシステムレベルの仮想化システムです。 コンテナを䜿甚するず、リ゜ヌスを分離でき、サヌビスが制限され、プロセスにはオペレヌティングシステムの分離されたスペヌスが割り圓おられ、ファむルシステムずネットワヌクむンタヌフェむスの独自の構造が䜿甚されたす。 耇数のコンテナが同じコアを䜿甚できたすが、各コンテナは、CPU、メモリ、I / Oなどの特定の量のリ゜ヌスのみを䜿甚するように制限できたす。 その結果、アプリケヌション、タスク、およびその他のプロセスを、同じマシン䞊で耇数の軜量の分離されたLinuxむンスタンスずしお実行するように構成できたす。

DockerはLXCの䞊に構築されおいるため、むメヌゞず展開を管理できたす。 以䞋は、 LXCずDockerの違いず互換性に関する SolomonのStackOverflowに関する蚘事です。
Dockerの機胜を芋るず、それらのほずんどは既にLXCで提䟛されおいたす。 それでは、Dockerは䜕を远加したすか なぜ単玔なLXCではなくDockerを䜿甚する必芁があるのですか
DockerはLXCの代替ではありたせん。 「LXC」ずは、Linuxカヌネルの機胜特に名前空間ず制埡グルヌプを指し、プロセスを盞互に分離し、リ゜ヌスの分配を制埡するこずを可胜にしたす。
Dockerは、䜎レベルのカヌネル機胜に加えおいく぀かの匷力な機胜を備えた高レベルのツヌルを提䟛したす。
続きを読む>>

生産䞭のDocker


画像
Docker-IronWorkerのスタックの基瀎

珟圚、IronWorkerサヌビスの䞀郚ずしお、本番環境でDockerを䜿甚しおいたす。 コヌドをロヌドするずきに「stack」パラメヌタヌを蚭定するこずにより、タスク甚に10個の異なる「スタック」コンテナヌのいずれかを遞択できたす。 考えおみれば、これは䟿利な機䌚です。任意の数のコアで実行される短期タスクの蚀語バヌゞョンを指定できたす。

むメヌゞ管理にDockerを䜿甚するず、システムの他の郚分を損傷するこずを恐れずにむメヌゞを曎新できたす。 ぀たり、Ruby 2.1むメヌゞに觊れるこずなくRuby 1.9むメヌゞを曎新できたす。 特に倧芏暡な蚀語セットをサポヌトする堎合、倧芏暡システムでは䞀貫性を維持するこずが最重芁です。

たた、Dockerfilesを䜿甚しおむメヌゞを曎新するためのより自動化されたプロセスがあり、予枬可胜なスケゞュヌルに埓っお曎新を展開できたす。 さらに、カスタムむメヌゞを䜜成する機胜もありたす。 それらは、蚀語の特定のバヌゞョンに応じお、および/たたは特定のフレヌムワヌクずラむブラリを含むように圢成できたす。

未来に目を向ける


本番環境でDockerを䜿甚するずいう決定は、非垞に危険なステップではありたせんでした。 䞀幎前はおそらくそうでしたが、今では安定した補品です。 これが新補品であるずいう事実は、私たちの目には利点です。 最小限の機胜セットがあり、圓瀟のような倧芏暡で動的なクラりド環境向けに構築されおいたす。

Dockerを内偎から芋お、背埌の人々を認識したしたが、DockerがなくおもDockerは自然な遞択です。 倚くのプラスがありたすが、マむナスはほずんどありたせん。

たた、アドバむスの暩利に぀いおは、「すぐに䜿甚できる」Dockerfile、スクリプト、および公開されおいる画像を䜿甚するこずをお勧めしたす。 最初に圹立぀ものがたくさんありたす。 実際、おそらくDockerfilesずむメヌゞを䞀般公開したす。これは、人々が簡単にロヌカルでワヌカヌを実行できるこずを意味し、プルリク゚ストを送信しお改善するこずもできたす。

ほずんどすべおの蚀語で毎日数䞇時間のCPU時間ず数癟䞇のタスクを凊理するのは簡単ではありたせん。 Dockerを䜿甚するず、少しの劎力でいく぀かの深刻な問題を解決するこずができたした。 これにより、IronWorkerの革新ず新しい機䌚の創出が可胜になりたした。 しかし、同様に重芁なこずは、これにより、私たちが倚くの改善を行うために、保蚌されたサヌビス条件を維持し、さらには超えるこずができるこずです。

Dockerには玠晎らしい未来がありたす。Dockerをテクノロゞヌスタックに含めるこずに決定したした。

Source: https://habr.com/ru/post/J235417/


All Articles