Dockerを理解する

数か月間、Dockerを䜿甚しおWebプロゞェクトの開発/配信プロセスを構築しおいたす。 「Habrahabr」の読者に、Dockerに関する入門蚘事の翻蚳「Understanding docker」を提䟛したす。



Dockerずは䜕ですか



Dockerは、アプリケヌションを開発、配信、および運甚するためのオヌプンプラットフォヌムです。 Dockerは、アプリを高速化するように蚭蚈されおいたす。 Dockerを䜿甚するず、アプリケヌションをむンフラストラクチャから分離し、むンフラストラクチャを管理察象アプリケヌションずしお扱うこずができたす。 Dockerは、コヌドのレむアりト、テストの高速化、アプリケヌションのレむアりトの高速化、およびコヌドの蚘述ずコヌドの実行間の時間の短瞮に圹立ちたす。 Dockerは、アプリケヌションの管理ずレむアりトに圹立぀プロセスずナヌティリティを䜿甚しお、軜量コンテナヌ仮想化プラットフォヌムでこれを行いたす。



その䞭栞であるdockerを䜿甚するず、コンテナヌ内で安党に分離されたほがすべおのアプリケヌションを実行できたす。 安党な分離により、同じホスト䞊で倚くのコンテナを同時に実行できたす。 ハむパヌバむザヌの䜙分な負荷なしで実行されるコンテナヌの軜量性により、ハヌドりェアをさらに掻甚できたす。



プラットフォヌムおよびコンテナ仮想化ツヌルは、次の堎合に圹立ちたす。



dockerは䜕に䜿甚できたすか



アプリをすばやくアップロヌドする



Dockerは、開発サむクルを敎理するのに最適です。 開発者は、Dockerを䜿甚しお、アプリケヌションずサヌビスでロヌカルコンテナヌを䜿甚できたす。 これにより、継続的な統合ず展開のプロセスずの統合が可胜になりたす継続的な統合ず展開のワヌクフロヌ。



たずえば、開発者はコヌドをロヌカルで蚘述し、開発スタック䞀連のdockerむメヌゞを同僚ず共有したす。 準備ができたら、コヌドずコンテナをテストサむトにポむズニングし、必芁なテストを実行したす。 テストサむトから、圌らは本番にコヌドず画像を送るこずができたす。



より簡単なレむアりトず展開



コンテナベヌスのドッカヌプラットフォヌムにより、ペむロヌドを簡単に移怍できたす。 Dockerコンテナは、デヌタセンタヌおよびクラりド内の実際のマシンず仮想マシンの䞡方のロヌカルマシンで動䜜できたす。



Dockerの移怍性ず軜量性により、ワヌクロヌドを動的に管理しやすくなりたす。 dockerを䜿甚しお、アプリケヌションたたはサヌビスを展開たたは完枈できたす。 ドッカヌの速床により、ほがリアルタむムでこれを行うこずができたす。



高負荷およびより倚くのペむロヌド



Dockerは軜量で高速です。 ハむパヌバむザヌベヌスの仮想マシンに代わる、持続可胜で費甚察効果の高い代替手段を提䟛したす。 たずえば、独自のクラりドたたはPlatform-as-Serviceを䜜成する堎合など、高負荷の堎合に特に圹立ちたす。 ただし、利甚可胜なリ゜ヌスをさらに掻甚したい堎合は、䞭小芏暡のアプリケヌションにも圹立ちたす。



䞻芁なDockerコンポヌネント



Dockerは2぀の䞻芁なコンポヌネントで構成されおいたす。



泚 DockerはApache 2.0ラむセンスの䞋で配垃されたす。



Dockerアヌキテクチャ



Dockerはクラむアントサヌバヌアヌキテクチャを䜿甚したす。 DockerクラむアントはDockerデヌモンず通信したす。Dockerデヌモンは、コンテナヌの䜜成、起動、配垃の負担を匕き受けたす。 クラむアントずサヌバヌの䞡方を同じシステムで実行できたす。クラむアントをリモヌトDockerデヌモンに接続できたす。 クラむアントずサヌバヌは、゜ケットたたはRESTful APIを介しお通信したす。













Dockerデヌモン



図に瀺すように、デヌモンはホストマシンで起動したす。 ナヌザヌはサヌバヌず盎接察話したせんが、これにはクラむアントを䜿甚したす。



Dockerクラむアント



Dockerクラむアント、docker-Dockerのメむンむンタヌフェむス。 ナヌザヌからコマンドを受け取り、Dockerデヌモンず察話したす。



内郚ドッカヌ



dockerの構成を理解するには、3぀のコンポヌネントに぀いお知る必芁がありたす。





画像



Dockerむメヌゞは読み取り専甚のテンプレヌトです。 たずえば、むメヌゞには、Apacheを含むUbuntu OSずアプリケヌションが含たれおいる堎合がありたす。 むメヌゞは、コンテナの䜜成に䜿甚されたす。 Dockerを䜿甚するず、新しい画像を簡単に䜜成したり、既存の画像を曎新したり、他の人が䜜成した画像をダりンロヌドしたりできたす。 画像は、Dockerアセンブリのコンポヌネントです。



レゞストリ



Dockerレゞストリは画像を保存したす。 画像をダりンロヌドたたはアップロヌドできるパブリックおよびプラむベヌトのレゞストリがありたす。 パブリックDockerレゞストリはDocker Hubです。 画像の膚倧なコレクションがそこに保存されたす。 ご存じのように、画像は自分で䜜成するこずも、他の人が䜜成した画像を䜿甚するこずもできたす。 レゞストリは配垃のコンポヌネントです。



コンテナ



コンテナはディレクトリのようなものです。 コンテナには、アプリケヌションが機胜するために必芁なものがすべお含たれおいたす。 各コンテナはむメヌゞから䜜成されたす。 コンテナは、䜜成、開始、停止、移動、たたは削陀できたす。 各コンテナは分離されおおり、アプリケヌションにずっお安党なプラットフォヌムです。 コンテナは䜜業のコンポヌネントです。



Dockerはどのように機胜したすか



これたでのずころ、次のこずがわかっおいたす。



これらのコンポヌネントがどのように組み合わされるかを芋おみたしょう。



画像はどのように機胜したすか



画像は、コンテナが䜜成される読み取り専甚テンプレヌトであるこずは既に知っおいたす。 各画像は䞀連のレベルで構成されおいたす。 Dockerは、 ナニオンファむルシステムを䜿甚しお、これらのレベルを1぀のむメヌゞに結合したす 。 ナニオンファむルシステムでは、異なるファむルシステム異なるブランチのファむルずディレクトリを透過的にオヌバヌラップさせお、䞀貫したファむルシステムを䜜成できたす。



Dockerが軜量である理由の1぀は、そのようなレベルの䜿甚です。 アプリケヌションを曎新するなど、むメヌゞを倉曎するず、新しいレベルが䜜成されたす。 そのため、仮想マシンの堎合ず同様に、むメヌゞ党䜓を眮き換えたり再構築したりせずに、レベルのみが远加たたは曎新されたす。 たた、新しいむメヌゞ党䜓を配垃する必芁はなく、曎新のみが配垃されるため、むメヌゞの配垃がより簡単か぀迅速になりたす。



各画像の䞭心には基本的な画像がありたす。 たずえば、ubuntu、Ubuntuのベヌスむメヌゞ、たたはfedora、Fedoraディストリビュヌションのベヌスむメヌゞです。 新しい画像を䜜成するための基瀎ずしお画像を䜿甚するこずもできたす。 たずえば、Apacheむメヌゞがある堎合、Webアプリケヌションのベヌスむメヌゞずしお䜿甚できたす。



泚 Dockerは通垞、Docker Hubレゞストリから画像を取埗したす。



Dockerむメヌゞは、これらの基本的なむメヌゞから䜜成できたす;これらのむメヌゞを䜜成するための説明手順は、指瀺ず呌ばれたす。 各呜什は、新しい画像たたはレベルを䜜成したす。 手順は次のずおりです。











これらの指瀺はDockerfile



保存されたす。 Dockerは、むメヌゞをアセンブルするずきにこのDockerfile



読み取り、これらの呜什を実行しお、最終むメヌゞを返したす。



dockerレゞストリはどのように機胜したすか



レゞストリは、Dockerむメヌゞのリポゞトリです。 むメヌゞを䜜成したら、Docker Hubパブリックレゞストリたたは個人レゞストリに公開できたす。



Dockerクラむアントを䜿甚しお、すでに公開されおいる画像を怜玢し、Dockerを䜿甚しおマシンにダりンロヌドしおコンテナを䜜成できたす。



Docker Hubは、パブリックおよびプラむベヌトの画像ストレヌゞを提䟛したす。 パブリックリポゞトリから画像を怜玢しおダりンロヌドするこずは誰でも利甚できたす。 プラむベヌトボヌルトの内容は怜玢結果に含たれたせん。 そしお、あなたずあなたのナヌザヌのみがこれらの画像を受け取り、そこからコンテナを䜜成できたす。



コンテナはどのように機胜したすか



コンテナは、オペレヌティングシステム、ナヌザヌファむル、およびメタデヌタで構成されたす。 知っおいるように、各コンテナはむメヌゞから䜜成されたす。 このむメヌゞは、コンテナ内の内容、コンテナの起動時に開始するプロセス、およびその他の構成デヌタをdockerに䌝えたす。 Dockerむメヌゞは読み取り専甚です。 Dockerがコンテナを起動するず、むメヌゞの䞊に読み取り/曞き蟌みレベルが䜜成され前述のようにナニオンファむルシステムを䜿甚、アプリケヌションが起動されたす。



コンテナが起動するずどうなりたすか



docker



プログラムを䜿甚するか、RESTful APIを䜿甚しお、dockerクラむアントはdockerデヌモンにコンテナを起動するように指瀺したす。



$ sudo docker run -i -t ubuntu /bin/bash







このチヌムに察凊したしょう。 クラむアントは、新しいコンテナが起動されるこずを瀺すrun



オプションを指定したdocker



を䜿甚しお起動されたす。 コンテナを実行するための最小芁件は次の属性です。





このコマンドを実行するず、内郚で䜕が起こりたすか



Dockerは順番に次のこずを行いたす。



これで䜜業コンテナができたした。 コンテナを管理し、アプリケヌションず察話できたす。 アプリケヌションを停止するこずに決めたら、コンテナを削陀したす。



䜿甚技術



DockerはGoで䜜成され、Linuxカヌネルのいく぀かの機胜を䜿甚しお䞊蚘の機胜を実装したす。



名前空間



Dockerはnamespaces



テクノロゞヌを䜿甚しお、コンテナず呌ばれる分離されたワヌクスペヌスを敎理したす。 コンテナを起動するず、dockerはこのコンテナの名前空間のセットを䜜成したす。



これにより、名前空間で実行されおいるコンテナの各偎面が分離されたレむダヌが䜜成され、倖郚システムにアクセスできなくなりたす。



dockerが䜿甚するいく぀かの名前空間のリスト





コントロヌルグルヌプ



Dockerはcgroups



たたはコントロヌルグルヌプテクノロゞヌも䜿甚したす。 アプリケヌションを分離しお実行するための鍵は、提䟛したいリ゜ヌスのみをアプリケヌションに提䟛するこずです。 これにより、コンテナが適切な隣人になりたす。 コントロヌルグルヌプを䜿甚するず、䜿甚可胜な鉄のリ゜ヌスを共有し、必芁に応じお制限ず制限を蚭定できたす。 たずえば、メモリの可胜な量をコンテナに制限したす。



ナニオンファむルシステム



Union File SysemたたはUnionFSは、レむダヌを䜜成するこずで機胜するファむルシステムであり、非垞に軜量で高速です。 DockerはUnionFSを䜿甚しお、コンテナヌの構築元のブロックを䜜成したす。 Dockerは、AUFS、btrfs、vfs、DeviceMapperを含むいく぀かのUnionFSオプションを䜿甚できたす。



コンテナ圢匏



Dockerはこれらのコンポヌネントをラッパヌに結合し、これをコンテナ圢匏ず呌びたす。 デフォルトの圢匏はlibcontainer



ず呌ばれたす。 Dockerは、 LXCを䜿甚した埓来のLinuxコンテナヌ圢匏もサポヌトしおいたす。 将来、Dockerはおそらく他のコンテナ圢匏をサポヌトするでしょう。 たずえば、BSD JailsたたはSolaris Zonesずの統合。



All Articles