Dockerとは?コンテナとは?
よく聞くけど、あんまりよくわかっていなかったので
調べてみました。自分のメモ書きとして残しておきます。
間違っていたらコメントで教えていただけるとありがたいです...
一旦、以下がまとめです。
▼コンテナとは
アプリケーション・ライブラリ・ミドルウェアを含む仮想環境のこと
▼Dockerとは
コンテナを展開するためのプラットフォーム(コンテナ管理ソフトウェア)のこと
Dockerとは?
環境構築する場面で、よくDockerという名前を聞きます。
Dockerってなんのための何に使うものなんでしょうか...
Dockerとは、Docker社が開発したコンテナタイプの仮想環境のなかで、アプリケーションを作成したり、配布したり、実行したりするためのプラットフォームです。
(参照:【入門編】Dockerとは?メリットと何ができるかをわかりやすく解説)
らしいです。
うーん、そもそもの「コンテナタイプの仮想環境」がわからないので、
仮想環境とコンテナについて調べてみます。
仮想環境とは?
仮想環境とは、パソコンやサーバなど一つのハードウェアの中で、仮想的な環境を構築したものをいいます。
実質、CPUやメモリなどは実装された物理的な数しかありませんが、論理的にそれらを割り当てて、環境を分離したり統合したりする技術です。
(参照:仮想環境とは?メリットやデメリット、代表的なソフトウェア「VMware」について解説)
要するに、自分のPC環境の中に、全く違う環境を作ったりできるんですね。
例えば友達から、友達のPC環境のコンテナを貰って、自分のPC内で展開すれば、友達のPC環境(仮想環境)を自分のPC上で再現したりできます。
じゃあ、仮想環境=コンテナってこと?という気持ちになりましたが、
さっきは「コンテナタイプの仮想環境」と書いてありました。
つまり、コンテナタイプではない仮想環境があるということです。
コンテナタイプ以外のものも見てみて、理解を深めようと思います。
コンテナとは?(仮想化技術の種類から理解を深める)
そもそも仮想環境を作るための技術には、3種類あるみたいです。
ホスト型
ハイパーバイザー型
コンテナ型
(参照:Dockerのメリット・デメリット)
先程のコンテナタイプの仮想環境とは、コンテナ型の仮想化技術で構築する仮想環境のことを言っていたんですね。
そもそも、仮想環境には色々なレイヤーがあるみたいです。
上記記事の画像を見るとわかりやすいですが、
PC環境と一口に言っても、
アプリケーション自体やアプリが依存するライブラリ、アプリで利用するミドルウェアからOS、ハードウェアなどの様々なレイヤーがあります。
その中でも、どこからどこまで仮想化するかによって、
ホスト型・ハイパーバイザー型・コンテナ型を使うかを判断するんですね。
Dockerが該当するコンテナ型は、主にアプリケーション・ライブラリ・ミドルウェアまでを仮想化してくれるみたいです。
つまり、「コンテナタイプの仮想環境」とは、
アプリケーション・ライブラリ・ミドルウェアまでが仮想化されている仮想環境、ということですね。
これがみんなが呼んでいるコンテナのことみたいです。
あらためてDockerとは?
コンテナは、それ単体ではどうにもできません。
ここでDockerの出番です。
Dockerとは、Docker社が開発したコンテナタイプの仮想環境のなかで、アプリケーションを作成したり、配布したり、実行したりするためのプラットフォームです。
(参照:【入門編】Dockerとは?メリットと何ができるかをわかりやすく解説)
再掲しましたが、つまり
コンテナ(コンテナタイプの仮想環境)のなかで、アプリを作ったり実行したりできるプラットフォーム、ということになります。
(プラットフォームとありますが、コンテナ管理ソフトウェアとかコンテナエンジンとか呼ばれてるみたいです。)
Dockerとはコンテナ管理ソフトウェアのことで、
このソフトウェアを使ってコンテナを展開します。
(上記はDocker社が提供しているコンテナの話をしていますが、他が提供しているコンテナもあります。)
また、コンテナ自体を作る時にも、Dockerは不可欠です。
要するに、コンテナ自体を扱うのに必要なソフトウェアということですね!
ものすごい雑にまとめましたが、
一旦、なんとなくのコンテナやDockerのイメージは掴めてきたので、
実際に触ってまた理解を深めようと思います。
Discussion