前置き

今回は名前ぐらいは聞いたことがあるかもしれないDockerについて解説していこうと思っていますが、筆者も執筆中の段階では実務経験がなく独学で何度か触れた程度なのでアウトプットも兼ねた記事になります。

なので、すでに現場でDockerを使ってガリガリ開発したことがある方ではなく私と同じようにこれから開発の経験を積んでいこうとしている方向けに書いていくのでまず全体像を掴むために簡単にお話します。
経験者の方には少し物足りない内容かもしれませんがよろしくお願いいたします。

Dockerとは

そもそもDockerとはタイトルにもある通りMacやWindows、LinuxでもOSを問わずに同じ環境で開発をしやすくするためのソフトウェアです。

従来であればそれぞれのPCの中で言語やデータベースのバージョンなどを揃えるのに苦労したり、すでにPCのなかにある環境を変更する事によって様々な不具合が出てくる可能性もあります。
Dockerの場合はコンテナ仮想化を使って仮想の開発環境を構築するのでPCの環境を変更せずにプロジェクト毎の開発を可能にします。

環境構築とは

環境構築とは簡単に言うと「システム開発を行うにあたって適した環境を作り上げること」です。
環境構築をするにのに構築する環境とは「実行環境」と「開発環境」です。
エンジニアにとって一番難しいのがこの2つの環境を構築で、これを簡単にしてくれるのがDockerと言うわけです。

開発環境

開発環境とはシステム開発をする為に必要な物が揃っている場の事で作業場所を整える事です。
システムの設計書が完成して実際にアプリケーションの開発をする環境の事でシステムが出来上がるとなるべく本番環境に近いテスト環境に移してテストをして問題がなければ本番環境(実行環境)へと移行します。

実行環境

実行環境とはプログラムを動かす為に必要なソフトウェアが揃った場の事で
開発環境で作成されたものを一般に公開する環境です。
システムを運用してみて何かしらの不具合があったり、新機能を追加する場合は開発環境に戻りプログラムを組んでからまた実行環境に移行します。

コンテナ仮想化とは

先ほどの説明の中にコンテナ仮想化と言いましたが詳しくご説明するといくつかある仮想化技術の中の1つにDockerがあるという事です。

仮想化というのは現実にあるPCの中に架空のPCを用意するイメージで、例えばMacを使ってWindows10を使うイメージです。

仮想化の技術にはホスト型、ハイパーバイザ型、コンテナ型の3つの方式があります。

ホスト型とは

MacであればmacOS、WindowsであればwindowsOSのようにPCに入っているOSをホストOSと言い
その中に仮想化ソフト(VirtualBoxやParallesといったソフト)をインストールし動作させる方式です。

dockerホスト型

ホスト型のメリットデメリット

・メリット
 自身のPCのなかに別のOSを入れるのでお手軽(別のマシンを必要としない)

・デメリット
 ホストOSとゲストOS(ホストOS上で動かすOS)の両方が起動しているので動作
 が重くなる

ハイパーバイザ型

ホスト型はPCのなかにすでに入っているOS上で動かすのに対してハイパーバイザ型はそのOSの上階層にあるハードウェア上にハイパーバイザのソフトウェアを用意してゲストOSを動作させる方式

dockerハイパーバイザ型の構造を表した図

ハイパーバイザ型のメリットデメリット

・メリット
 ホストOSを必要としない為処理速度の低下が最小限でゲストOSは自由に変更可能
 サーバーの仮想化ができるのでサーバーの購入、管理のコストを削減すること
 ができる。

・デメリット
 運用をしていくにあたって様々なゲストOSのバージョン管理、安全の確保を
 するための技術的コスト、多くのゲストOSを扱う場合それなりのサーバーのス
 ペックが必要なので物理的コストが求められる。

コンテナ型とは

Dockerがこのコンテナ型に該当しており、コンテナというのはコンテナエンジンというハイパーバイザの代わりの役目を果たすものを使いその上に様々なコンテナ(設定ファイルやアプリケーション、ライブラリなど)を置いて仮想化環境を作る方式です。

dockerコンテナ型の構造を表した図

コンテナ型のメリットデメリット

・メリット
 必要なメモリーやCPUが最低限なので動作が軽い
 設定ファイルさえ決めればコマンド一つで開発環境が整う
 コンテナ上で環境構築をするので自身のPCの不具合があまり出ない

・デメリット
 学習コストが高い
 土台のOSとは違うOSをコンテナとして使うことが出来ない
 カーネル(OSの中身の1つでハードウェアとソフトウェアを繋ぐ役割をになってている)を全てのコンテナで共有しているので個別に変更することはできない

まとめ

・エンジニアにとって一番難しい環境構築を簡単にしてくれるのが「Docker」
・Dockerとはコンテナ仮想型と言う仮想化技術を使っている
・学習コストはかかるものの自身のPCの環境を汚すことあまりない

作者情報
料理が好きなIT初心者。バックエンドエンジニアを目指して学習中。 キッチン周りの物を揃えたりフライパンの育成、包丁を研ぐのが特に好きです。