Dockerとは
Dockerは、アプリケーションの開発・配布・実行を効率的に行うためのオープンプラットフォームです。
「コンテナ」と呼ばれる仮想化技術を用いて、アプリケーションを分離された環境にパッケージングし、環境差異の影響を最小限に抑えつつ動作させることができます。
本記事では、Dockerの基本概念と操作方法について、仮想化の基礎から順を追って解説していきます。
仮想化技術の基礎
仮想化とは、物理的なコンピュータ資源を仮想的に分割・再構成し、複数の独立した環境を構築する技術です。
たとえば「サーバー仮想化」では、1台の物理サーバー上に複数の仮想サーバーを立ち上げ、それぞれにメモリやストレージといったリソースを割り当てることが可能になります。
仮想化には以下の3種類のアプローチがあります。
-
ホストOS型
ホストOS上に仮想化ソフトウェア(VMware, VirtualBoxなど)をインストールして仮想マシンを作成・管理する方式です。
-
ハイパーバイザー型
物理サーバーに直接ハイパーバイザー(例:VMware ESXi, Hyper-V)をインストールして仮想マシンを実行する方式です。ホストOSを介さないため、オーバーヘッドが少なく、性能面で有利です。
-
コンテナ型(Docker)
コンテナ型では、ホストOSのカーネルを共有しつつ、アプリケーションごとに分離された実行環境(コンテナ)を提供します。仮想マシンとは異なり、OSごとの起動は不要なため、軽量で高速な環境構築が可能です。
コンテナとは
コンテナは、アプリケーションとその実行に必要なすべて(依存関係や設定ファイルなど)をまとめた単位であり、ホストOS上で隔離されて動作します。
たとえばPHP、Nginx、MySQLなどをそれぞれ別のコンテナで動かし、構成管理することが可能です。
コンテナの特徴
-
ゲストOSが不要
コンテナは仮想マシンと異なり、独自のOSを持たずホストOSのカーネルを共有します。 -
高速な起動・停止
OSの起動が不要なため、数秒で起動・破棄が可能です。 -
プロセス・リソースの隔離
他のコンテナやホストOSから独立しており、ルートディレクトリやIPアドレスも分離されています。
コンテナ利用のメリット
-
アプリケーション管理が容易
コンテナ単位でアプリケーションを管理でき、不要になれば削除するだけで環境をクリーンに保てます。 -
環境の再現性が高い
コンテナをイメージとして共有すれば、チーム全員が同一環境で開発可能です。 -
デプロイの簡素化
イメージをそのまま本番環境へ展開でき、CI/CDと連携すれば自動化も可能です。
Dockerイメージ
Dockerイメージとは、コンテナの元となるテンプレートです。アプリケーションの実行に必要なファイル群(OS、ライブラリ、実行ファイルなど)をレイヤー構造で持ちます。
イメージの特徴
- 変更不可の読み取り専用形式
- 同一イメージからは常に同じ環境のコンテナが作成される
- バージョン管理にタグ(tag)を利用
イメージの作成と利用
イメージは以下の方法で作成・利用されます。
- Dockerfileを用いたビルド
- 既存のコンテナの状態からcommit
- Docker Hubなどのレジストリからpull
|
|
Dockerのインストール
公式ドキュメントを参考に、OSに応じたDockerのインストーラを取得し、インストールを行います。
https://matsuand.github.io/docs.docker.jp.onthefly/get-docker/
インストール後、以下のコマンドで動作確認が可能です。
|
|
Dockerの基本操作
Dockerでは、イメージ・コンテナを中心に操作を行います。
イメージ操作
|
|
コンテナの作成と操作
|
|
コンテナでのコマンド実行
|
|
イメージの作成(commit)
|
|
イメージの保存と読み込み
|
|
デタッチモード
Nginxなど、ターミナルを占有しない起動が望ましいアプリケーションでは、デタッチモード(バックグラウンド)で起動します。
|
|
この状態ではターミナルが自由に使える一方、ログ出力などはリアルタイムで見られません。必要に応じて以下のように切り替えます。
|
|
※コンテナ起動時に-it
オプションがない場合、デタッチ操作は無効になるため注意が必要です。