最近のアプリケーションのデプロイや設計において、Dockerの利用を考慮するのは当たり前となってきています。システム管理やWeb開発の世界に大きな影響を与えた革新的な技術となっているためです。ちまたではDockerの名前は耳にしますが、私たち技術者にとってはこの革新的な技術を学び、自身の知識をこの技術に追いつかせ、そしてフルに活用していくことが求められます。
以後、勉強も兼ねて、どのようにDockerを効率的に活用するのか、またどのような活用方法があるかを記事にしていきたいと思います。
Dockerとは
Dockerとは何でしょうか。Docker社のWebサイトを確認してみましょう。少し要約してみると以下のような説明になります。
DockerはDocker社が2013年に世に広め始めたソフトウェアコンテナまたはコンテナプラットフォームです。コンテナとは、ソフトウェアの標準単位であり、アプリケーションのコードと関連するライブラリやファイルなどをパッケージとしてまとめたものです。つまり、そのアプリケーションを1つのコンピュータ環境から他の環境へ持っていき、素早くまた確実に(持っていった先のコンピュータ環境に依存せずに)アプリケーションを起動できるようになります。
これは開発者やシステム運用者の従来からの悩みを解決するものですね。
Dockerのユースケース
開発環境も本番環境も全く同じ環境で利用
システム開発の現場でよーく聞く言葉です。
「開発者の環境では問題なく動作するのに、本番環境ではうまく動かない」
開発者が開発してテストしたら問題なく動くのに、実際の運用現場では問題が発生するのです。そんなことあるか?と思われる方もいるかもしれませんが、本当によく発生する問題です。
最近は、DevOpsが考慮されてきたというものの、まだまだ開発者の開発・実行環境と本番環境が一致しないことがあります。例えば、開発者はWindowsでJavaアプリケーションを開発しますが、本番環境のLinuxサーバの実行環境バージョンとは異なるかもしれません。一致したとしても、ファイルのパーミッションやパスの違いなど設定ファイルに差分が出てくる可能性があります。
「違いを明確にし記録し、デプロイ時に環境に合わせて変える」
従来はこのように、環境ごとに手順やビルドスクリプトを変えて対応していました。しかしながら、理想はどの環境でも全く同じであることです。
そこで、Dockerの活用です。開発環境がMacであれWindowsであれ、開発者は動作する実行ファイルやライブラリおよび設定をコンテナ内に格納すればよいのです。
別バージョンのソフトウェアが必要なアプリケーションをデプロイ
現在アプリケーションAを運用しており、複数Webサーバ上で稼働しています。PuppetやChefなどのツールを使って各Webサーバには同一のソフトウェアが配布できており、完璧な運用です。さて、稼働も安定しており、次の機能であるアプリケーションBをリリースすることになりました。このアプリケーションBはより上位バージョンのソフトウェアでのみ互換性があります。さてどうしましょうか。
従来は、(1)複数Webサーバを筐体ごとにアプリケーションAとBに分ける、(2)予算があればサーバを追加する、(3)ソフトウェアのバージョンを上げてAとBを共存させるなどの対応が必要でした。この対応はお金も時間もかかります。
そこで、Dockerの活用です。アプリケーションAもBもコンテナとして作成しておけば、お互いに独立して動作します。同じサーバ内で、デプロイの方法も、設定も、2バージョンのソフトウェア管理も一切悩む必要がなくなるのです。
Dockerと仮想マシンの違い
DockerはLinuxコンテナを簡単に管理できるコンテナ管理システムです。コンピュータ上に仮想環境を作成し、ローカル環境で作業するのと同じようにそのコンテナに対してコマンド操作を行うことができます。仮想環境を作成するという点では仮想マシン(Virtual Machine; VM)と同じですが、コンテナにはゲストOSが不要という点で仮想環境のサイズに大きな違いがあります。以下にコンテナと仮想マシンの違いを簡単に示します。
ゲストOSが不要ということは、仮想環境の起動時に毎回OSの起動が不要であり、すばやく起動できるということです。サイズが小さいということは可搬性があり、他の環境へ簡単に移植できるということです。
DockerはホストOSのLinuxカーネルに依存します。ホストOSの上に他のLinuxベースのOSのレイヤーを設けることもできます。コンテナ内のアプリケーションはDocker経由でホストOSのライブラリやコマンドを使うため、コンテナ内には個別に必要となるバイナリやライブラリがあればアプリケーションの実行には十分となります。よって、上記のメリットとなるサイズの最小化が可能となります。
おわりに
Dockerの概要としてDockerとは何かとそのメリットについて記載しました。次はDockerのインストールについて記載したいと思います。