システム開発する場合、エンジニア一人ひとりに開発用のパソコンを用意し開発環境を整える必要があります。
また、作ったサーバーとして本格稼働させる場合にもハードウェアやネットワークを用意し、OSやアプリを準備しなければいけません。機器やアプリの構成とバージョンを統一しておかないとプログラムが動かなくなる危険があり、構成管理も重要になります。
そういった開発環境に関する問題や、サーバー上で稼働しているシステムの構成管理を効率的に行えるのがDockerです。Dockerを使うと個々のエンジニアが同じ環境下で開発できたり、サーバーのバージョンアップなどがしやすくなります。
本章では、Dockerの概要や動く仕組みや、導入することで得られるメリット・デメリットを解説します。
Dockerとは
そもそもDockerとは何か?何が出来るのかを中心に解説していきます。
Dockerとは
Dockerは、2010年頃に登場したオープンソースソフトウェアです。
オープンソースソフトウェアとはソースコードが無償で公開されるもので、誰でも製品を改良できるようになっています。
Dockerで出来ること
Dockerは、アプリを動かすために必要なモジュールなどを一つにまとめて動かします。その中にはアプリが動くのに必要なサーバーやモジュールやプログラムなどが全て含まれています。アプリの動作に必要なものがまとまっているので、アプリの開発と実行が出来ます。
一般的には、Webシステムを開発する場合、以下の手順で環境を整える必要がありますが、Dockerでは以下1〜3の手順が一つにまとまっていてインフラの構築が不要です。
- サーバーになるハードウェアを用意する
- サーバーにOSをインストールする
- サーバーにWebサーバーをインストールする
- 開発するプログラムを動かすたモジュールを入れる
- 開発したプログラムをその都度いれていく
Dockerが動く仕組み
Dockerを説明する前に仮想化技術について知っておく必要があるので仮想化について解説します。
仮想化とは
仮想化とは、CPUやメモリなどハードウェアのリソースをソフトウェアの技術で統合・分配する技術です。この技術を使うことで、1台しかないサーバー上に複数のOSやアプリを動かしたり、ネットワークを複数構成することができます。
仮想化の種類
一口に仮想化と言っても様々な形態があります。それには大きく3つの種類があります。
- ホスト型
サーバーとなる筐体に仮想化ソフトを入れて、そこから仮想マシンを起動します。導入した仮想マシンにOSを入れて必要となるソフトを稼働させます。
- ハイパーバイザー型
土台となるOSの代わりにハイパーバイザーと呼ばれてる仮想化専用のソフトウェアをハードウェアにインストールし、そこから仮想マシンを起動する方法です。
- コンテナ型
コンテナ型はサーバーにOSをインストールし、その上でコンテナエンジンを起動します。このエンジン上で作成したコンテナイメージを動作させることで仮想環境を実現します。またDockerはこのコンテナ型に該当します。
Dockerを構成するもの
Dockerはコンテナ型を使って仮想環境を実現します。どういったものがあるのか説明していきます。
Dockerエンジン
その名の通りDockerのエンジンとなるものです。これを使ってDockerを動かします。
コンテナ
コンテナは仮想環境です。Dockerエンジンを使ってコンテナを動かすことで、一つのハードウェアの中に複数のOSやアプリを稼働させる事ができます。
イメージ
イメージとはDockerのコンテナで動かすものを定義したテンプレートのようなものです。例えばあるアプリをDockerで動かす場合、アプリが動くのに必要なソースコードやライブラリが含まれています。
Dockerfile
Dockerfileはどのようなイメージを作るか記載するものです。仮想化で動かす場合のアプリの設定や構成情報を記載します。
これを使う事でイメージの配布が簡単になり同じ仮想環境を作る事ができます。
Docker導入のメリット
Dockerを導入すると次のようなメリットがあります。
動作が高速
Dockerは土台となるOSを全てのコンテナで共有します。OSから見るとコンテナは一つのプロセスのように動くことで、高速に稼働します。
一方、ホスト型やハイパーバイザー型では土台となるOSに加え仮想環境内にもOSを導入する必要があります。そのためリソースを多く消費し動作が遅くなります。
環境を統一するのが簡単
Dockerfileを実行するとその通りのDockerイメージが出来ます。同じ環境にしたい人にDockerfileを配布して実行してもらえば、簡単に同じものを提供できます。
環境の運用管理が簡単
システム開発中に使っている製品やモジュールのバージョンアップをした場合、製作中のプログラムが動かなくなることがあります。さらに一度変わってしまった構成を元に戻すのも難しいものです。
こういった問題をDockerは解決してくれます。初期導入時のイメージの保存や、変更管理が起こるたびにその差分の保存ができるからです。
Docker導入のデメリット
Dockerの導入にはメリットだけでなくデメリットもあります。本章では、そのデメリットについても触れていきます。
技術者が少ない
Dockerはまだ十分普及しているとは言えません。IDC Japanが行った2021年に行った調査によるとコンテナ技術を本番環境で導入している企業は16%程です。(出典:iMagazine)このことからもDockerを導入・運用できる技術者が不足していると言えます。
OSの構成を変えにくい
土台になるOSと違うシステムをコンテナで動かせません。土台になるOSの一部を全コンテナで共有するためです。そのため土台となるOSの構成を簡単に変更できません。
セキュリティに不安がある
Dockerはクラウド上からイメージを利用する仕組みも用意されています。便利な仕組みですが、入手したイメージにセキュリティホールがあるかもしれません。クラウド上に用意されているDockerイメージを使うときは注意が必要です。
まとめ
Dockerを導入すると開発環境の整備や、サーバー構成管理が効率的に行えます。しかし、コンテナがOSを共有するなど構成に制約があることや、技術者が不足していることも考慮する必要があります。導入にあたり、社内にDockerに関する知見がない場合は、外部に相談することをおすすめいたします。
また、システム開発の外注先選びでお困りの方は、弊社までお気軽にご相談ください。
当社がこれまで支援してきた開発事例の共有、企画・コンサルティング、要件定義や実際の開発支援まで包括的にサポートさせていただくことが可能です。
システム開発を失敗しないために、弊社が相見積もりの取得までをサポートさせていただくことも可能です。むやみな営業電話などは決して行いませんので、まずは無料のご相談をお待ちしております。