Dockerコンテナとは何か知りたいですか?この記事で知っておくべきことをすべて、わかりやすい言葉で調べてください。
Dockerの人気には理由があります。これにより、開発者によるアプリケーション開発への取り組み方が大きく変わりました。
分散アプリケーションを簡単にパッケージ化、展開、実行するためのIT業界の標準になりました。
Dockerの主な利点は、ユーザーがすべての依存関係を持つアプリケーションをコンテナと呼ばれる標準化されたユニットにパッケージ化できることです。
Dockerはコンテナ化プラットフォームであるため、コンテナ化の背後にある歴史を理解する必要があります。
コンテナ化が登場する前は、アプリケーションとその依存関係を分離して整理するための最善の方法は、各アプリケーションを仮想マシンに配置することでした。
これらのマシンは、同じ物理ハードウェア上で複数のアプリケーションを実行します。このプロセスは、仮想化に他なりません。 。
ただし、仮想化には、仮想マシンのサイズがかさばるなど、いくつかの欠点がありました。さらに、複数の仮想マシンを実行すると、パフォーマンスが不安定になります。
通常、起動プロセスには長い時間がかかり、VMは移植性、ソフトウェアの更新、継続的インテグレーションや継続的デリバリーなどの問題を解決しません。
これらの欠点により、コンテナ化と呼ばれる新しい手法が登場しました。 。
コンテナ化は、仮想化をオペレーティングシステムレベルにもたらす一種の仮想化です。
仮想化はハードウェアに抽象化をもたらしますが、コンテナ化はオペレーティングシステムに抽象化をもたらします。
「コンテナ」と「仮想マシン」という用語は、しばしば同じ意味で使用されます。ただし、これは誤解されることがよくあります。
ただし、どちらもオペレーティングシステムの仮想化を提供するための異なる方法です。
仮想マシン
仮想マシン 通常、オペレーティングシステム全体、パッケージ、および必要に応じていくつかのアプリケーションが含まれます。
ハイパーバイザーはこれを可能にし、仮想マシンにハードウェア仮想化を提供します。
これにより、単一のサーバーで多くのスタンドアロンオペレーティングシステムを仮想ゲストとして実行できます。一般的に、仮想マシンはコンピューターとまったく同じように機能するシステムです。
コンテナ
コンテナ コンテナがオペレーティングシステム全体ではないことを除いて、仮想マシンに似ています。コンテナには通常、必要なOSパッケージとアプリケーションのみが含まれています。
通常、オペレーティングシステム全体やハードウェア仮想化は含まれていません。これらは「軽量」です。
コンテナは通常、単一のホスト内で実行中のプロセスを分離して、分離されたプロセスが同じシステム内の他のプロセスと相互作用できないようにするために使用されます。コンテナは、プロセスを相互にサンドボックス化します。
簡単に言うと、Dockerコンテナは仮想マシンと同等の軽量なものと考えることができます。
Dockerを使用すると、コンテナの作成と操作を可能な限り効率的に行うことができます。
Dockerコンテナを使用する理由
- コンテナにはゲストOSがなく、ホストのオペレーティングシステムを使用します。そのため、必要に応じて、関連するライブラリとリソースを共有します。
- アプリの分離:1つのサーバーで複数のアプリケーションを実行する場合は、各アプリケーションのコンポーネントを別々のコンテナーに保持することで、依存関係の管理に関する問題を防ぐことができます。
- アプリケーション固有のバイナリとコンテナのライブラリがホストカーネルで実行されるため、アプリケーションの処理と実行は非常に高速です。
- コンテナの起動にはほんの一瞬しかかかりません。
- コンテナは軽量で、仮想マシンよりも高速です。
Dockerコンテナとは何ですか?
Dockerはそのプラットフォームです アプリケーションとそのすべての依存関係をコンテナの形式で一緒にパッケージ化します。
コンテナを使用して、アプリケーションの作成、デプロイ、実行を容易にします。 Dockerは、アプリケーションとその依存関係をコンテナー内にバインドします。
コンテナを使用すると、開発者は、ライブラリやその他の依存関係など、必要なすべての部分を含むアプリケーションをパッケージ化し、すべてを1つのパッケージとして出荷できます。
アプリケーションを構築する必要があるとしましょう。そのアプリケーションを一般に公開するには、それをホストする場所が必要です。以前は、コンピューターを構築する必要がありました。
次に、「サーバー」と呼ばれる専用のWebサービス、つまりWebサイトまたはWebサービスのホスティング専用のコンピューターをセットアップする必要があります。
ただし、アプリケーションのサイズは、最初はおよそ300メガバイトしかない場合があります。
では、アプリケーションがそれよりはるかに小さい場合に、仮想化の結果として生じる仮想化環境である「仮想マシン」が1GB以上のサイズである必要があるのはなぜですか?
それを修正するために「コンテナ」の概念が登場します。 Dockerは次のようにそれを行います。アプリケーションごとに各オペレーティングシステムをホストする代わりに、いくつかの共通のリソースを共有できます。オペレーティングシステムの上にある「dockerengine」と呼ばれるものがあります。
Dockerまたはコンテナーを採用すると、アプリケーションをより迅速にデプロイまたはアンデプロイできます。より迅速に開始および停止し、別の「イメージ」にすばやく変更し、処理して多くのことをより迅速に実行します。
ただし、開始時にDockerエコシステムに関連する重要な要素とツールを理解しておくと役立ちます。
Dockerfile
Dockerfileは、新しいDockerイメージを作成する方法を示す一連の正確な指示であり、それに基づいて実行されるコンテナーのデフォルトを設定します。
これは、ユーザーがコマンドラインで呼び出して画像を組み立てることができるすべてのコマンドを含むテキストドキュメントです。
そのため、DockerはDockerfileからの指示を読み取ることで、イメージを自動的に構築できます。
Docker Imageは、Dockerコンテナーの作成に使用される読み取り専用テンプレートと比較できます。つまり、イメージは、任意の数の新しいコンテナを開始できる青写真です。
「現在実行中のコマンド」は画像に保存されません。コンテナを作成するときは、電源を切った後にマシンを起動するようなものです。
アプリケーションの実行に必要なパッケージ全体を保持しているため、Dockerイメージの実行中のインスタンスです。
システム上の他のすべてから分離されたコマンドを実行したいとします。許可されているリソースにのみ正確にアクセスする必要があり、マシン上に他に何かがあることを認識していません。
コンテナ内で実行されているプロセスは、ベアボーンLinuxが画像に記述されているものをディストリビューションするのを見るのはそれだけだと考えています。
コンテナを実行しているマシンは、内部の内容をあまり気にする必要はありません。ドッキングされたアプリは、Kubernetesクラスタ上にあるか、単一のサーバー上にあるかを気にしません。とにかく実行できます。
コンテナは、一度に複数のプロセスを実行できます。したがって、たとえば、多くのサービスを1つのコンテナにパッケージ化して、並べて実行することができます。
Dockerコンテナーが削除された場合、イメージを再起動すると、以前に実行されていたコンテナーで行われた変更なしでコンテナーが新たに開始されます。これらの変更は失われます。
画像は変わりません。新しいものを作成することはできますが、それだけです。一方、コンテナはデフォルトでは何も残しません。したがって、コンテナに加えられた変更は、削除されるとすぐに失われます。
データを保存(永続化)し、コンテナ間でデータを共有するために、Dockerはボリュームの概念を考案しました 。簡単に言うと、ボリュームはデフォルトのファイルシステム外のディレクトリ(またはファイル)であり、ホストファイルシステム上に標準のディレクトリおよびファイルとして存在します。
つまり、Dockerボリュームにより、データを永続化し、コンテナー間で共有できるようになりました。
この記事が、DockerとDockerコンテナとは何かという基本的なDockerの基本と、それがソフトウェア開発にどのように革命をもたらしたかを理解するのに役立つことを願っています。
上記の知識があれば、Dockerのコアとなるものをしっかりと把握する必要があります。
Dockerの詳細については、プロジェクトのウェブサイトにアクセスするか、公式ドキュメントを参照してください。