Dockerとは
Dockerとは仮想化環境でアプリを管理・実行するためのオープンソースのプラットフォームのことです。
オンプレミスな環境だけでなく、AWSなどのクラウド環境でも動作します。
またDockerは、よく仮想マシンと比較されます。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。
Dockerの必要性
Dockerはどんなときに役に立つのでしょうか?
それは、アプリケーション開発において、複数人で同一アプリを管理したいときや、サービスによって異なるバージョンのライブラリやミドルウェアを用いるときです。
そもそも開発した業務アプリケーションを本番環境で可動させるには、次の要素が必要になります。
- 業務アプリケーションの実行モジュール(プログラム本体)
- ミドルウェアやライブラリ群
- OS / ネットワークなどのインフラ設定
Dockerはこれらの要素をコンテナにまとめて管理します。
開発プロセスにおいて、開発環境やテスト環境で正しく動作しても、本番環境にデプロイすると正常に動かないことがあります。構成や設定が、環境によって異なる可能性があるためです。
Dockerを用いると、すべての環境においてDockerのコンテナーと呼ばれるものがアプリケーションの実行に必要なすべてをまとめてくれます。
コンテナーはDockerをインストールしている環境であれば、どこでも動作するため、開発・テスト環境・本番環境のギャップがない状態で動作させることが可能になります。
Dockerの機能
Dockerには大きく分けて、次の3つの機能があります。
- Dockerイメージの作成
- Dockerコンテナの実行
- Dockerイメージの共有
順を追って説明していきます。
Dockerイメージの作成
Dockerでは、アプリの実行に必要になるプログラム本体 / ライブラリ / ミドルウェアや、OS、ネットワーク設定などを1つにまとめてDockerイメージを作成します。イメージは、Dockerのコマンドを使って作成することもできますが、Dockerfileというコードから自動で作ることもできます。
完成したDockerイメージは、実行環境で動くコンテナのもとになります。Dockerイメージの正体は、アプリの実行に必要なファイル群が格納されたフォルダです。Dockerコマンドを使うとイメージをtarファイルに出力できます。
Dockerコンテナの実行
Dockerは、Linux上でコンテナ単位でサーバー機能を動かします。このコンテナのもとになるのが、Dockerイメージです。Dockerイメージさえ存在していれば、Linux上にDockerがインストールされている環境において、どこでもコンテナを動かすことができます。
また一つのDockerイメージから複数のコンテナを起動することもできます。
コンテナの起動 / 停止 / 破棄にはDockerコマンドを使います。
Dockerイメージの共有
Dockerイメージは、Dockerレジストリで一元管理が可能です。例えば、Docker Hubでは、UbuntuやCentOSなどのLinuxディストリビューションの基本機能を提供するベースイメージが配布されています。これらのベースイメージにミドルウェアやライブラリ / デプロイするアプリなどを入れたイメージを積み重ねることによって、独自のDockerイメージを作っていきます。