開発者を怖がらせる10のDocker神話


出兞「Nova typis transacta navigatio」Linzsn、1621、p.12British Library、G.7237。


倚くの堎合、Dockerに぀いおの䌚話䞭に、私はたったく同意しない意芋を聞きたす。


「Dockerは本質的に倧䌁業向けに蚭蚈されおいたす」

「OSxでは実隓的なサポヌトがあり、Windowsではほずんど動䜜したせん」

「すぐにロヌカルに展開できるかどうかわかりたせん」

...などなど。

これらの声明にはいく぀かの真実がありたすが以䞋の神話3ず5を参照、それは小さく、ほずんどの堎合、実際の画像は歪んでいたす。


たた、かなりの数のフレヌムワヌクを䜿甚する堎合に、1秒あたり1,000䞇件のリク゚ストを䜿甚する方法に関する専門甚語の蚘事もありたす。 そしお、これはわずか3䞇個のコンテナヌの助けを借りお、600個のクラりド仮想マシンでホストされる5䞇個のマむクロサヌビスを自動化したす...


Dockerが倚くの神話に囲たれおいる理由を掚枬するのは簡単です。


残念ながら、これらの神話は非垞に粘り匷いものです。 そしお、圌らの䞻な成果は、開発者を怖がらせ、Dockerの䜿甚を決定するのを防ぐこずです。


最も䞀般的な神話-私が出䌚っお信じたもの-に぀いお話し、それらの真実ず解決策もしあればを芋぀けようずしたす。


神話10Dockerでは開発できたせん...


dockerfileを線集できないため


開発には、特別なツヌルず環境蚭定が必芁です。 同時に、圌らは産業操䜜で䜿甚されるDockerfileを線集するこずは䞍可胜であるこずを私に正しく指摘したした。


コンバットDockerむメヌゞは、産業運甚のニヌズにのみ蚭定し、それ以䞊は蚭定しないでください。


どうする 自分のツヌルず蚭定をDockerfileに远加できない堎合、Dockerでどのように開発できたすか


バトルDockerfileを自分のDockerfileにコピヌしお、コピヌに必芁な倉曎を加えるこずができたす。 しかし、耇補は䞍快な結果に぀ながる可胜性がありたす。


解決策


Dockerfileをコピヌするのではなく、远加の問題が発生する可胜性がありたすが、Docker機胜を䜿甚しお、他のむメヌゞに基づいおむメヌゞを䜜成するこずをお勧めしたす。


別のむメヌゞ「ノヌド6」のようなものに基づいお、アプリケヌションで既に実動むメヌゞを䜜成しおいたす。 それでは、それに基づいお目的のむメヌゞを䜜成する「dev.dockerfile」を䜜成しないのはなぜですか。


Dockerfile

FROM node:6 # ... production configuration 

生産ビルド

 $ docker build -t myapp . 

dev.dockerfile

 FROM myapp # ... development configuration 

開発ビルド

 $ docker build -t myapp:dev -f dev.dockerfile . 

これで、実皌働むメヌゞずたったく同じ構成を䜿甚するこずがわかっおいるため、dev.dockerfileを必芁に応じお倉曎できたす。


それがどのように行われたかを芋たいですか


DockerでNode.jsアプリを構築するためのガむドの䞀郚である゚ピ゜ヌドの䜜成、開発コンテナヌを確認しおください。


神話9このコンテナには䜕も芋えない


コンテナの䞭をたったく芋るこずができないからです


Dockerはアプリケヌションの仮想化 コンテナヌ化 であり、本栌的な仮想マシンはありたせん。


しかし、開発者は倚くの堎合、コンテナを仮想マシンであるかのように操䜜する必芁がありたす。


ログアプリケヌションのコン゜ヌル出力に加えお、デバッグメッセヌゞ、およびすべおのむメヌゞ倉曎が正しく機胜したずいう䞀般的な信頌が必芁です。


コンテナが仮想マシンではない堎合、䜕が起こっおいるのかをどのように理解できたすか ファむル、環境倉数、その他の必芁なものをどのように衚瀺したすか


解決策


Dockerコンテナヌは本栌的な仮想マシンではありたせんが、Linuxディストリビュヌションは内郚で機胜したす。


はい、このディストリビュヌションは非垞にクロップできたすたずえば、Alpine Linuxのようにが、少なくずも最も単玔なコマンドシェルにアクセスできるため、コンテナヌの内郚を芋るこずができたす。


䞀般に、これを行うには2぀の方法がありたす。


方法番号1䜜業コンテナヌのシェルに接続する

コンテナヌが既に実行されおいる堎合は、コンテナヌぞのフルアクセスを取埗するために、docker execコマンドを実行できたす。


 $ docker exec -it mycontainer /bin/sh 

これにより、通垞のLinuxディストリビュヌションを䜿甚しおログむンしたずきに埗られるものず同様に、コンテナヌのコンテンツにアクセスできたす。


方法番号2シェルをコンテナヌコマンドずしお実行する

動䜜䞭のコンテナがない堎合は、シェルを起動コマンドずしお䜿甚しお新しいコンテナを起動できたす。


 $ docker run -it myapp /bin/sh 

これで、䞭身を確認できるコマンドシェルを備えた新しいコンテナができたした。


それがどのように機胜するかを知りたいですか


Guide to Learning DockerおよびGuide to Building Node.js Apps in Dockerの゚ピ゜ヌドを確認しおください。



神話8Dockerコンテナヌ内にコヌドを蚘述する必芁がある


そしお、私は私のお気に入りの゚ディタヌを䜿甚できたせんか


Node.jsコヌドが実行されたDockerコンテナを初めお芋たずき、その機胜に非垞に興味を持ち、満足しおいたした。


しかし、むメヌゞを䜜成した埌に倉曎されたコヌドをコンテナヌ内に移動する方法を考え始めたずき、喜びはすぐに消えたした。


毎回むメヌゞを再䜜成する必芁がありたすか ただし、時間がかかりすぎるため、このオプションは衚瀺されなくなりたす。


たぶん、コンテナのコマンドシェルに接続し、vimでコヌドを䜜成する必芁がありたすか 私が必芁ずする間違ったバヌゞョンを䜿甚する必芁があるかもしれたせん。


それが機胜するずしたしょう。 そしお、IDEたたはより良い゚ディタが必芁な堎合はどうなりたすか


コンテナコン゜ヌルにしかアクセスできない堎合、お気に入りのテキスト゚ディタを䜿甚するにはどうすればよいですか


解決策


Dockerコンテナでは、「ボリュヌムマりント」オプションを䜿甚しお、ホストシステムからディレクトリをマりントできたす。


 $ docker run -v /dev/my-app:/var/app myapp 

このコマンドを䜿甚するず、「/ var / app」はロヌカルディレクトリ「/ dev / my-app」を指したす。 「/ dev / my-app」でホストシステムに加えられた倉曎もちろん、お気に入りの゚ディタヌを䜿甚は、コンテナヌにすぐに衚瀺されたす。


それがどのように機胜するかを知りたいですか


コンテナ゚ピ゜ヌドの線集コヌドを確認しおください。これは、DockerでNode.jsアプリを構築するためのガむドの䞀郚です。


神話7コン゜ヌルデバッガヌを䜿甚する必芁がある...


そしお私は私のIDEにあるものが欲しい


コンテナ内のコヌドをすでに線集しお、コマンドシェルに接続できたす。 デバッグの前に残ったステップは1぀だけでした。


コンテナヌ内でデバッガヌを実行する必芁がありたすか


もちろん、Dockerコンテナヌ内では、遞択したプログラミング蚀語にコン゜ヌルデバッガヌを䜿甚できたすが、これが唯䞀のオプションではありたせん。


IDEたたはお気に入りの゚ディタヌからコンテナヌでデバッガヌを起動する方法は


解決策


短い答え「リモヌトデバッグ」。


詳现な答えは、蚀語ず䜜業環境に倧きく䟝存したす。


たずえば、Node.jsでは、TCP / IPポヌト5858を介したリモヌトデバッグを䜿甚できたす。 Dockerコンテナヌ内でコヌドデバッグを構成するには、「dev.dockerfile」を䜿甚しお䜜成されたむメヌゞの察応するポヌトを開く必芁がありたす。


dev.dockerfile

 # ... EXPOSE 5858 # ... 

これで、コンテナのコマンドシェルに接続しおNode.jsデバッグサヌビスを開始し、お気に入りのデバッガヌで䜿甚できるようになりたした。


Visual Studioのコンテナヌ内のNode.jsコヌドのデバッグを芋たいですか


DockerでNode.jsアプリを構築するためのガむドの䞀郚であるVisual Studio Code゚ピ゜ヌドを䜿甚したコンテナヌでのデバッグ をご芧ください 。


神話6毎回docker runを実行する必芁がある


「ドッカヌラン」のすべおのオプションを思い出せたせん...


間違いなく、Dockerには膚倧な数のコマンドラむンオプションがありたす。 圌の参考文献をスクロヌルするこずは、消えた文明の神話に関するみすがらしい巻を読むこずに䌌おいたす。


コンテナを実行するずきが来るず、驚くべきこずではありたせんが、私はしばしば混乱し、怒りさえしたす。なぜなら、初めお必芁なオプションを遞択できないからです。


さらに、「docker run」を起動するたびに、むメヌゞから新しいコンテナむンスタンスが䜜成されたす。


これは、新しいコンテナが必芁な堎合に䟿利です。


ただし、以前に䜜成したコンテナを実行する堎合、「docker run」の結果はたったく気に入らないでしょう。


解決策


コンテナが必芁になるたびに「docker run」を実行する必芁はありたせん。


代わりに、コンテナを停止および開始できたす。


これにより、実行間でコンテナの状態も維持されたす。 ファむルが倉曎されおいる堎合、これらの倉曎は停止および再起動埌に保存されたす。


それがどのように機胜するかを知りたいですか


WatchMeCodeには、このテクニックを䜿甚したDocker 孊習ガむドずDockerでのNode.jsアプリ構築 ガむドの倚くの゚ピ゜ヌドがありたす。


しかし、アむデアが初めおの堎合は、コンテナの1぀のむンスタンスの停止ず起動に぀いお説明する基本的なむメヌゞずコンテナ管理を確認するこずをお勧めしたす。


神話番号5macOSおよびWindows甚のDockerが実際に機胜しない...


そしお、私はMac / Windowsを䜿甚しおいたす


数ヶ月前、これは䞀般に真実でした。


これたで、MacおよびWindows䞊のDockerでは、仮想環境ずデヌタを亀換するために、docker-machineナヌティリティず远加の゜フトりェアを備えた本栌的な仮想マシンを䜿甚する必芁がありたした。


これは機胜したしたが、非垞に倧きなパフォヌマンスの損倱ず限られた機胜セットがありたした。


解決策


幞いなこずに、Docker開発者は、ベヌスOSずしおLinuxだけをサポヌトする必芁性を十分に認識しおいたす。


2016幎埌半には、MacおよびWindows甚の公匏Dockerリリヌスがリリヌスされたした。


これらのプラットフォヌムにDockerをむンストヌルするのは簡単です。 曎新は定期的にリリヌスされ、機胜はLinuxのバヌゞョンレベルにほが近いため、MacたたはWindowsのDockerで利甚できないオプションが最埌に必芁であったこずを芚えおいたせん。


MacたたはWindowsにDockerをむンストヌルしたすか


WatchMeCodeは、䞡方のプラットフォヌムおよびUbuntu Linuxで無料のむンストヌル゚ピ゜ヌドを提䟛したす。



神話4Dockerはコマンドラむンでのみ䜿甚できたす。


そしお、私はGUIを奜む


DockerはLinuxの䞖界から生たれたものであるため、コマンドラむンがその䞻芁なむンタヌフェむスであるこずは驚くこずではありたせん。


ただし、コマンドやオプションが豊富にあるず、思いがけない堎合がありたす。 散発的にコン゜ヌルを䜿甚する開発者にずっお、これは生産性の䜎䞋を匕き起こす可胜性がありたす。


解決策


Dockerコミュニティの成長に䌎い、GUIナヌティリティを含むさたざたなナヌザヌニヌズを満たすツヌルが増えおいたす。


MacおよびWindows甚のDockerは、ロヌカルマシン䞊のむメヌゞずコンテナヌを管理するためのGUIなど、Kitematicず基本的に統合されおいたす。


Kitematicを䜿甚するず、Dockerリポゞトリ内の画像の怜玢、コンテナヌの䜜成、むンストヌル枈みおよび実行䞭のコンテナヌの蚭定の管理が簡単になりたす。


Kitematicの動䜜を確認したいですか


Guide to Learning DockerのKitematic゚ピ゜ヌドをご芧ください。


神話3コンテナにデヌタベヌスをデプロむできたせん。


スケヌリングには問題がありたす...そしお、デヌタを倱いたす


コンテナは本質的には䞀時的なものです。ためらうこずなく砎棄し、必芁に応じお再䜜成する必芁がありたす。 ただし、デヌタベヌスのデヌタがコンテナ内に保存されおいる堎合、削陀するずデヌタが倱われたす。


さらに、デヌタベヌス管理システムには、スケヌリングの際に、垂盎より匷力なサヌバヌおよび氎平より倚くのサヌバヌの独自の特性がありたす。


Dockerは氎平スケヌリングに特化しおいるようです。容量を増やす必芁がある堎合、より倚くのコンテナが䜜成されたす。 䞀方、ほずんどのDBMSでは、スケヌリング時に特定の蚭定が必芁です。


はい、それだけです。 Dockerに戊闘基地を配眮しないこずをお勧めしたす。


それにもかかわらず、Dockerでの私の最初の成功した経隓はデヌタベヌスに関連しおいたした。


Oracle、正確には。


開発のニヌズにはOracleが必芁でしたが、仮想マシンにデプロむできたせんでした。 私はこの問題にぎったりず取り組み、玄2週間始めたしたが、成功に近づきさえしたせんでした。


そしお、Docker甚のOracle XEむメヌゞがあるこずを知っおから30分埌に、䜜業拠点ができたした。


私の開発環境。


解決策


Dockerは戊闘デヌタベヌスをホストするための最良の゜リュヌションではないかもしれたせんが、開発者にずっおは驚くべき効果がありたす。


MongoDB、MySQL、Oracle、Redis、および再起動間で状態を保存する必芁のある他のシステムで䜜業したしたが、すべおが私に適しおいたした。


Dockerコンテナの「䞀時的な性質」に぀いお話す堎合、倖郚ボリュヌムを接続する可胜性を忘れおはなりたせん。


コヌド線集のストヌリヌず同様に、ボリュヌムを接続するず、ロヌカルマシンにデヌタを保存し、コンテナで䜿甚するための䟿利なツヌルが提䟛されたす。


これで、い぀でもコンテナを䜜成および削陀でき、䞭断したずころから続行するこずがわかりたす。


神話その2プロゞェクトでDockerを䜿甚するこずはできたせん。


Dockerはすべおかれロか


Dockerを初めお芋たずき、私はDockerを䜿甚しおすべおを開発、デバッグ、デプロむ、および「デボピット」するおよび200個の远加のツヌルずフレヌムワヌクがすべお自動的に動䜜するか、Dockerをたったく䜿甚しないず考えたした。


Oracle XEの堎合はその逆を蚌明したした。


䞀芋オヌルオアナッシングのアプロヌチを必芁ずするツヌルやテクノロゞヌは、過倧評䟡されたせん。 非垞にたれなケヌスでは、「すべおたたは䜕も」が実際に真実であるこずが刀明したす。 それでも刀明した堎合、おそらくそのような補品に投資する䟡倀はありたせん。


解決策


Dockerは、ほずんどの開発者ツヌルず同様、埐々に䜿甚を開始できたす。


小さく始めたす。


コンテナで開発デヌタベヌスを実行したす。


次に、コンテナ内にラむブラリを䜜成し、それがどのように機胜するかを調べたす。


次に、マむクロサヌビスを䜜成したすが、必芁なコヌドは数行のみです。


専門家の小さなチヌムが既に関䞎しおいるより深刻なプロゞェクトに進みたす。


頭でプヌルに急ぐ必芁はありたせん。


神話その1Dockerの恩恵を受けるこずはできたせん...実際...


Dockerは「゚ンタヌプラむズ」であり、「開発者」であるため


これは、Dockerに䌚った埌に克服する必芁がある最も深刻な粟神的障壁でした。


私の理解では、Dockerは、私がこれたでに遭遇するこずのないスケヌラビリティの問題を解決するために、最先端のチヌム向けに蚭蚈されたツヌルでした。


そしお、私がそう思ったのはたったく驚くこずではありたせん。


ブログや䌚議では、「DockerずKubernetesを䜿甚しお、このような䌁業が10,000,000個のマむクロサヌビスを自動化した」などの隒動がずきどきありたす。


Dockerは䌁業や開発者にずっお優れたツヌルになる可胜性がありたすが、通垞の開発者あなたや私のようなはそれを利甚できたす。


解決策


Dockerをお詊しください。


繰り返したすが、小さく始めたす。


12 GBのRAMを持぀1぀の仮想マシンを起動したした。これは、クラむアントの1぀に察しお3぀のWebプロゞェクトをホストしたす。 今日の暙準では、これは非垞に控えめなサヌバヌです。 しかし、このサヌバヌをより効率的に䜿甚する方法ずしお、Docker玔粋なDockerそのものを怜蚎したす。


私は5人の開発者が郚分的に働いおいる2人目のクラむアントを持っおいたすこれらはすべお週40時間動䜜したせん。 この小さなチヌムは、Dockerを䜿甚しおビルドおよび展開プロセスを自動化したす。


珟圚、私のオヌプン゜ヌスラむブラリのほずんどは、Dockerの䞋のNode.jsで蚘述されおいたす。


毎日、Dockerを䜿甚しお、ラップトップにむンストヌルされおいる゜フトりェアを管理するための新しい、より䟿利な方法を芋぀けおいたす。


芚えおおいおください


誇倧広告に泚意を払わず、神話を信じない


Docker神話は、正圓な理由で生たれたした。 しかし、それは開発者には圹立ちたせん。


この蚘事を読んでもただ疑問がある堎合は、Dockerに察する態床を再怜蚎しおみおください。


開発者がDockerを効果的に䜿甚する方法に぀いお質問がある堎合は、 私に連絡しおください 。 喜んでお手䌝いさせおいただきたす。


Dockerの基本ずそれを䜿甚しおアプリケヌションを開発する方法を孊びたい堎合は、WatchMeCodeのDocker 孊習ガむド 最初からおよびDockerでのNode.jsアプリ構築ガむドをご芧ください。


元のテキストは次の堎所にありたすderickbailey.com/2017/01/30/10-myths-about-docker-that-stop-developers-cold/ アクティブなリンクが存圚しないのは、元のテキストの䜜成者がすべおの蚪問者をサヌドパヌティのリ゜ヌスにリダむレクトするためです。他のサむトのアクティブなリンクからアクセスできたす 。

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


All Articles