第1章
Dockerとは何か

Dockerに興味はあるけれど、仕組みや使い方がいまいちよく分からないという方が多いようです。

この章ではDockerがどのようなものであるか、対応について学んでいきます。

1.1 Dockerとは何か

「Dockerとは何か?」という話になると、「コンテナ技術がどう」だとか「薄い皮が何とか」だとかいう話が出てきて、イメージのつかみづらい人も多いでしょう。Dockerとは、何者でしょうか。

1.2 Dockerとはパソコンやサーバ上に独立したプログラムの実行環境を作れる仕組み

Dockerとはパソコンやサーバ上に独立したプログラムの実行環境を作れる仕組みです。

パソコンやサーバでは、複数のプログラムが動いています。そのため、1つのプログラムをアップデートすると、他のプログラムに悪い影響が出てしまうことがあります。

Dockerは、パソコンやサーバ上の環境を、イナバの物置のような細かい部屋に分けるようなものなので、独立した環境(部屋)に、特定のプログラムを入れられるようになります。

このイナバの物置部屋のことをコンテナ(container)と言います。

コンテナは、完全に他のコンテナから隔離されているので、普通であればできないようなこともできます。

例えば、通常の環境であれば、1台のサーバやパソコンには、同じバージョンのWordは、1つしか入れられません。Chromeだろうと、Photoshopであろうと、これは同じで、同じバージョンは、1つしか入らないものです。

しかしコンテナであれば、完全に独立しているので、複数のコンテナに、それぞれ同じWordを入れることができるのです。どうです、すごい隔離っぷりでしょう! ほとんど別のパソコンに近い環境です。

「いくらなんでもWordは、そんなにいらないよ!」と思われるかも知れないので、開発環境でどのように使うか考えてみましょう。

サーバには2種類の意味がある

システムの開発時には、サーバが欠かせません。サーバとは、「Server」の名のとおり、「何かサービス(Service)を提供するもの」を指します。

開発現場で「サーバ」と言った場合、2通りの意味があります。1つは「機能としてのサーバ」であり、もう1つは「物理的なマシンとしてのサーバ」です。

「Webサーバにアップしておいて」や「メル鯖が死んだ」と言ったときのサーバは、機能としてのサーバです。「ほにゃららサーバ」とは、「ほにゃらら機能」を提供するという意味です。「Webサーバ」が「Web機能を提供するサーバ」であり、「メル鯖」が「メール機能を提供するサーバ」です。

物理的なマシンとしてのサーバは、「ちょっと新しい人が来るから、その机の上のサーバ片付けといて」だとか、「この間、社長がサーバに刺さってたLANケーブルを引っこ抜いちゃってさ」と言ったときのサーバです。つまり、現物です。

「サーバはサーバでしょ」と思われるかもしれませんね。なぜこのような話をするかといえば、「物理的なマシン」としてのサーバに、複数の「機能としてのサーバ」を同居させることができるからです。

「ほにゃららサーバ」の機能は、ソフトウェアで提供されます。サーバマシン上では、普段使っているパソコンと同じようにOSが動いており、その上でソフトウェアが動きます。Webサーバ用ソフトを入れればWeb機能を持ちますし、メールサーバ用ソフトを入れればメール機能を持つというわけです。

つまり、「ほにゃららサーバを作ること」は、「ほにゃらら用ソフトを入れて、その機能を持たせること」と同義だと考えて良いでしょう。

機能がソフトウェアによって実現されるということは、複数のソフトウェアを、1つのサーバマシンに入れてしまってもいいということです。具体的な例で言えば、Webサーバとメル鯖やFTPサーバが同居していることはよくありますし、システムのサーバとDBサーバが同居していることもあります。

表1.1: 詳しくない人のための代表的なサーバの種類

サーバ 特徴
ウェブサーバ ウェブサイトの機能を提供するサーバ。HTMLファイルや画像ファイル、プログラムなどを置いておく。クライアントのブラウザがアクセスしてくると、それらのファイルを提供する。代表的なソフトは、Apache、Nginx、IIS
メールサーバ メールの送受信を担当するSMTPサーバと、クライアントにメールを受信させるPOP3サーバがある。これら2つを合わせてメールサーバと呼ぶことが多い。メールをダウンロードしてから読むのではなく、サーバに置いたまま読めるIMAP4サーバもある。代表的なソフトは、Sendmail、Postfix、Dovecot
データベースサーバ データを保存したり、検索したりするためのデータベースを置くサーバ。代表的なソフトは、MySQL、PostgreSQL、MariaDB、SQL Server、Oracle Database
ファイルサーバ ファイルを保存して、皆で共有するためのサーバ。代表的なソフトは、Samba
DNSサーバ IPアドレスと、ドメインを結びつけるDNS機能を持つサーバ
DHCPサーバ IPアドレスを自動的に振る機能を持つサーバ
FTPサーバ FTPプロトコルを使って、ファイルの送受信を行うサーバ。ウェブサーバと同居させることが多く、ファイルの設置に使う
プロキシサーバ 通信を中継する役割をもつサーバの総称。社内LANなどインターネットから隔離された場所からインターネット上のサーバに接続するときに使う。また、プロキシサーバを経由すると、接続先から自分のアクセス元を隠すことができるため、自分の身元をアクセスしたいときにも使われることもある。
認証サーバ ユーザー認証するためのサーバ。Windowsネットワークにログインするための「Active Directory」と呼ばれるサーバや、無線LANやリモート接続する際にユーザー認証する「Radiusサーバ」などがある代表的なソフトは、OpenLDAP、Active Directory

さて、ここでDockerの話に戻りましょう。

Dockerの環境でコンテナを使用すれば、完全に隔離できることはお話ししました。それであれば、普通は予算の関係で同居させているWebサーバとメル鯖や、システムのサーバとDBサーバを、別々の部屋に分けて安全に運用することができるようになります。

またWordの例でお話しした通り、普通の環境では、1台のサーバマシンには、1つのWebサーバしか載せられません。しかし、コンテナ技術を使えば、複数のWebサーバを作って載せることができるのです。これは大変便利です。

複数のサーバ機能を1台のマシンに入れられると何が便利なのか

複数のサーバ機能を、隔離して1台のマシンに入れられると、何が便利なのでしょうか。

まずひとつは、隔離していることで、アップデートなどの影響を、最小限に抑えることができるということです。後でお話ししますが、OS環境も隔離されているので、1つのソフトをアップデートしたらOSの環境が書き換えられてしまって、他に影響が生じてしまったということがありません。

そして、「複数の同じサーバ機能を1つのマシンに入れられる」ということは、サーバマシンの節約にもなります。例えば、ある開発会社(ZooZoo社)が管理している顧客(ネコネコ社とワンコロ社)のWebサーバがあったとします。顧客のWebサーバは、どちらも使う容量が少ないのに、1台ずつサーバマシンを用意していては無駄です。そこで1台のマシンに2つのWebサーバを同居させてしまえば、顧客が負担しなければならないサーバマシンの代金は折半で済みます。 もしコンテナ技術を使わずに同居させるとなると、ネコネコ社が、ワンコロ社の環境を触ってしまうこともありうるかも知れません。コンテナがあれば、こうしたリスクなしにサーバを同居させることができます。

またDockerは、テスト環境を準備するのにも便利です。本番環境と、まったく同じコンテナを同じサーバ内に作り、テスト環境として、実際に動くかどうかを確かめてみるということができるようになるのです。これはメリットが大きい人が多いのではないでしょうか。

コンテナはDockerの上であれば動く

本番環境とテスト環境の話をもう少し続けましょう。

実はコンテナは、持ち運ぶことができます。

コンテナはDocker環境の上で実行することができます。というか、Dockerがなければコンテナは動きません。コンテナを実行するには、Dockerをインストールすることが必須です。

逆を言えば、Dockerさえあればコンテナは動くので、開発サーバと本番サーバの両方にDockerを入れてしまえば、開発サーバから本番サーバへとコンテナを移すだけで移行が済みます。本番サーバと開発サーバの環境が少し違っていてうまくいかなかったということはままあることですが、Dockerがあれば物理的な環境の違いを無視できるので、こうした面倒が一気に解決するのです。

Dockerとコンテナの特徴まとめ

さて、Dockerとコンテナについて、なんとなくどういったものか見えてきたでしょうか。

次は、少し技術的な話をしましょう。仮想化技術との比較や作っては壊しの話は、もう少し後にするので、ちょっと待っててください。

試し読みはここまでです。
この続きは、製品版でお楽しみください。