#はじめに
この記事はDocker初学者を対象としています。
特に(私のような)Linuxやサーバ構築の経験が皆無の方です。
今回はDockerについて概念的な理解を備忘録も兼ねて整理していきたいと思います。
#Dockerとは
DockerはDocker社が開発した「オープンソースのコンテナ管理ソフトウェア」です。
昨今では本番環境やフロントエンジニアの開発環境にも多く取り入れられるようになりました。
次に「コンテナ」とは何かを見ていきます。
#コンテナとは
WebサーバやDBサーバなどが動く仮想環境のことを指しています。
PCやサーバ上の環境を分けたもので、そこにはデータやプログラムが入っています。
このコンテナを使うことができる仕組みがDockerであり、
コンテナの理解に従ってDockerというものを捉え直すと
Dockerとは、
「複数のデータやプログラムを、それぞれ独立した環境に隔離できる仕組み」と換言できます。
#コンテナの作成方法
コンテナはDocker Engineの操作の中でイメージによって作成されます。
Dockerではコンポーネント単位で複数の機能が開発されており、
その中でもDocker Engineはイメージ作成やコンテナ起動などを行うコアコンポーネントです。
イメージには多くの種類があり、ソフトウェアによって、それぞれ用意されたイメージを使います。
またコンテナは複数作成することができます。
容量が許す限り、Dockerの上にいくつもコンテナを用意することが可能です。
#データやプログラムを隔離する理由
前述で「Dockerとはデータやプログラムをそれぞれ独立した環境に隔離できる仕組み」と表現しましたが、そもそもなぜデータやプログラムを隔離する必要があるのでしょうか。
結論から申し上げますと
その理由は「システムの共有部分に関わるトラブルを回避するため」です。
具体的に見ていきます。
そもそもの前提として多くのプログラムは他のプログラムと連携して動き、
ソフトウェアは複数のプログラムで構成されています。
例えばPythonで書かれたプログラムはライブラリを使用することが殆どです。
このように複数のプログラムが関係している場合に起こり得るのが
前述した「共有部分に関わるトラブル」です。
以下に例を示します。
システムAとシステムBがあり、
それらがPostgreSQLのようなプログラムを共有していたとします。
そこで、それぞれのシステムにとって適したPostgreSQLのバージョンが異なってしまうとき
一方にバージョンを合わせるともう一方は動かなくなる、なんてことが起きます。
これが「共有部分に関わるトラブル」です。
そして、このトラブルを解消するのが本記事の主役の「Docker」です。
何度も書きますがDockerはデータやプログラムをそれぞれ独立した環境に隔離できます。
それ故に先ほどの例であればDockerでは
「システムAにとって最適なバージョンのPostgreSQL」、
「システムBにとって最適なバージョンのPostgreSQL」を用意してあげることができるのです。
#おわりに
次の記事では実際にDockerを動かし、その操作方法について書いていきたいと思います。