開発工程の中で環境差分により、動かなかったり、開発者が増えた時に同じ環境を整えるのに時間がかかったりと、開発を行う上で環境構築に割く時間は決して少なくないと思います。
Dockerを活用すると開発工程の中で使っていた環境をそのまま本番環境に持っていくことも可能なため、環境差分が少なく、環境による問題を減らすことができます。
また、コンテナ化したアプリケーションを開発者間で共有できるので、スムーズな環境構築ができます。
そんな魅力的なDockerを今回は開発段階で使用する機会があったので、要点をまとめて解説したいと思います。
Docker(ドッカー)とは何か?
Dockerとは、Docker社が開発している、コンテナ型の仮想化環境を提供するオープンソースソフトウェアです。
(https://www.docker.com/what-docker)
当初は開発用途での利用が多かったDockerですが、その導入や利用の手軽さ、多くのクラウドプロバイダの対応などにより、現在は開発から本番環境でのアプリケーションの実行まで幅広く利用されています。
従来の仮想マシン
仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。
ハイパーバイザ型のHyper-Vや、ホスト型のVM WareやVirtual Boxなどの仮想化技術は、仮想環境毎にOSを丸ごとインストールする必要があります。
アプリケーションに必要のないサービスやファイルまでインストールするため、起動が遅くメモリなどの資源も沢山使うのがデメリットとなっていました。
コンテナ型仮想化とは?
コンテナ型仮想化とは、ホストOSのカーネルを利用して、Docker Engine上で動作するアプリケーション“コンテナ”を実行し、ユーザーに仮想的な空間を提供します。
通常は1つのOSの上に1つのユーザー空間があるのですが、コンテナ型仮想化では1つのOSの上で仮想的なユーザー空間であるコンテナを複数提供できます。
各コンテナ内のアプリケーションを分離された場所で実行することで、軽量で高速に起動、停止などが可能です。
従来の仮想マシンとコンテナ型の仮想化の比較
従来の仮想マシンとコンテナを比較した図を作成致しました。図で比較するとどのような構造になっているかわかりやすいと思います。
ホストOSから直接実行するため仮想マシンより余計なプロセスを挟まずに実行できます。
コンテナはRubyやMySQL、CodeIgniterなどのアプリケーションが入った入れ物と考えるとイメージしやすいと思います。
Dockerコンテナの共有
Dockerのイメージ(Dockerコンテナを作成する際に必要となるファイルシステム)は、Web上のDocker Hubで公開されています。
Dockerイメージや、さまざまなミドルウェアやアプリケーションがインストール済みのDockerファイルを多数登録しており、検索もできるので、必要なアプリケーションの習得や、Dockerファイルの共有が可能です。
すでに必要なミドルウェアなどがインストールされた状態のDockerコンテナを習得すれば、すぐに起動でき使用できます。
まとめ
いかがだったでしょうか?
今回は全くわからない人が概要だけでも掴めるように、Dockerの仕組みを簡単に説明させていただきました。
まだまだ魅力的な仕様が沢山あるので気になった人はより深く調べてみて下さい。