Dockerはどのように動くのか?

はじめに

前回の記事では、Dockerの基本的な概念として、ImageContainerDockerfileの3つを紹介しました。

今回は、さらに一歩踏み込んで、Dockerが内部でどのように動作しているのか、ImageContainerの違い、そして LayerVolumeNetworkの役割について初心者にも分かりやすく解説します。 それでは、一緒にDockerの仕組みを見ていきましょう。

Dockerはどのように動くのか?

Dockerは「コンテナ型仮想化」と呼ばれる技術を使用しています。

従来の仮想マシン(VM)では、OS、アプリケーション、ライブラリなど、あらゆる要素を仮想化する必要がありました。各アプリケーションが個別の OS を使用すると、リソース消費が非常に大きくなります。

ただし、Dockerでは、ホストOSのカーネルを共有しつつアプリケーションをそれぞれ独立した環境で実行します。

そのため、起動が速く、軽量であり、多くのコンテナを同時に動かせるなどのメリットがあります。

これらの利点により、複数のアプリケーションを個別のコンテナで実行できるため、リソース消費を大幅に抑えることができます 。

Docker Layerとは

Docker Imageは「Layer」という仕組みで構成されています。

Layerとは、Imageを小さな層に分けて保存する仕組みです。

例えば、Dockerfileが次のようになっている場合:

FROM ubuntu

RUN apt install nginx

COPY index.html /var/www/html

Dockerは次のLayerを作ります:

1. Ubuntu layer

2. nginx layer

3. application layer

Dockerのレイヤー機構は、キャッシュを利用して重複するデータ層を再利用することで、ストレージ容量の最適化やビルドおよび転送速度の向上を実現しています。

複数の読み取り専用(Read-only)レイヤーを積み重ねることで、Docker はベース環境の一貫性を維持しつつ、コンテナが一時的な書き込みレイヤー上で柔軟に動作できるようにしています。

Volumeとは

コンテナは、停止するとデータが消失する可能性があります。そのため、Volumeが利用されます。Volumeは、コンテナ外にデータを保存する仕組みです。

実際に Docker コンテナ上で DB サーバーを構築する場合、Volumeを定義しないと、コンテナ停止時にデータが消失してしまいます 。

以下は、DockerコンテナでVolumeを宣言して使用する例です。

version: "3.9"

services:

web:

image: nginx:latest

container_name: web-container

ports:

- "8080:80"

networks:

- app-network

db:

image: mysql:8

container_name: db-container

environment:

MYSQL_ROOT_PASSWORD: example

MYSQL_DATABASE: sampledb

volumes:

- db-data:/var/lib/mysql

networks:

- app-network

volumes:

db-data:

networks:

app-network:

Networkとは

Docker Networkは、コンテナ同士が通信するための仕組みです。

例:

· Web container

· API container

· Database container

これらがネットワークで接続されます。

上記のサンプルコンテナ例では、webコンテナと dbコンテナがどちらも app-networkに参加しています。そのため、両コンテナは互いに通信することが可能です。

まとめ

本記事では、Dockerの動作メカニズムについて説明し、従来のVMとの比較を行いました。 次回の記事では、Dockerを用いてアプリケーションをデプロイする方法について、より詳細に解説します。

注釈

Dockerfile

Dockerfile はテキスト形式のファイルであり、Docker が Docker イメージをビルドする際に参照する一連のコマンドを記述したものです。

Image(イメージ)

イメージとは、ソフトウェアを実行するために必要なすべての要素を含んだ、読み取り専用のパッケージファイルです。

Container

イメージから生成される実行環境です。

参考資料:

Reference documentation | Docker Docs

Find reference documentation for the Docker platform’s various APIs, CLIs, and file formats