【Docker】Dockerメモ


Dockerについて自分用のメモ

Dockerとは

Dockerは、コンテナと呼ばれる隔離された環境でアプリケーションを実行するためのプラットフォーム。

Dockerを使用することでアプリケーションをコンテナ化して実行したり、コンテナ化したアプリケーションを開発者間で共有できたりする。

初期のDockerはコンテナを実行するための「※ランタイム」としての機能が中心だったが、現在ではコンテナを使ったアプリケーションの開発から実行までをサポートするさまざまな機能を持つプラットフォームとなっている。

※ ランタイム:プログラムを動かすときに必要な部品

コンテナとは

コンテナとは、システムから隔離された環境で起動される一連のプロセスの呼称である。隔離された環境の中に起動されるプロセスは、その環境の外にあるシステムには基本的に、アクセスできない。

隔離された環境の中でプロセスを実行するのに必要となるCPUやメモリ、ネットワークインターフェースなどは、そのプロセス専用のリソースとして割り当てられる。

Dockerコンテナとして実行するアプリケーションは「コンテナイメージ」で管理される。これはある時点のファイルシステムの状態を保存したスナップショットのようなものである。

コンテナイメージにはアプリケーション本体のファイルと、アプリケーションの実行に必要なライブラリなどの依存ファイルのすべてが保存されており、これをひとつの単位としてコピーや実行ができる。

Dockerがコンテナを実行するまでの流れ

  1. DockerはOSの機能を利用してアプリケーションを実行するための隔離された環境を作り出す。
  2. コンテナイメージからアプリケーションの実行に必要なバイナリやライブラリなどのファイルを取り出し、隔離された環境にそれらを展開する。
  3. 展開したファイルを使用して隔離された環境の中でアプリケーションのプロセスを起動する。

Dockerの構成

Dockerは以下のようなクライアント/サーバの構成になっている。

CLIはDocker Daemonに命令を送信し、Docker Daemonは送られてきた命令に従ってコンテナの実行などを管理する。Docker Daemonはコンテナを起動するために必要なコンテナイメージも管理する。

コンテナの起動に必要なコンテナイメージがローカルに存在しない場合は、Docker Daemonは外部のDocker Registryからコンテナイメージを取得する。

Dockerとコンテナのメリット

Dockerを利用することで、アプリケーションとその実行に必要なライブラリなどの依存ファイルを1つの標準化されたユニットであるコンテナイメージとして管理できる。コンテナイメージからコンテナを起動すれば、DockerがサポートするLinuxやWindowsなどの環境に加え、AWSをはじめとする主要なクラウドプロパイダでもアプリケーションが実行できる。

つまり、開発環境で動作したアプリケーションがテスト環境や本番環境でも同じ方法で実行できることを意味する。これによりアプリケーションのテストやデバックが容易になるだけでなく、素早いデプロイやロールバックも可能になる。