Dockerの基礎: ボリュームとdocker-composeでのボリュームの管理

June 12, 2023

top画像

Docker とは

Docker は、ソフトウェアをパッケージ化し、一貫した操作性を提供するためのオープンソースプラットフォームです。Docker は、アプリケーションとその依存関係をコンテナと呼ばれるスタンドアローンの実行可能パッケージにまとめます。これにより、開発者は環境に左右されずにアプリケーションを動作させることが可能となります。

Docker ボリュームとは

Docker ボリュームは、Docker コンテナが作成、使用するデータを永続化するための方法の一つです。ボリュームを使用すると、コンテナが停止または削除されても、そのコンテナが作成または使用したデータを保持できます。これは、データベースのデータ、ログファイル、設定ファイルなど、永続化したいデータを安全に保管するために非常に重要です。

Docker ボリュームは以下のような特徴を持っています。

  • ホストと独立しています:ボリュームは Docker 管理下にあり、ホストのファイルシステムから独立しています。これにより、ボリュームを簡単にバックアップしたり、別のホストに移行したりできます。
  • データの永続性:コンテナが停止または削除されても、ボリュームは保持されます。これにより、データの永続性が確保されます。
  • 共有ストレージ:同じボリュームを複数のコンテナ間で共有することが可能です。これにより、複数のコンテナが同じデータにアクセスしたり、データを共有したりすることが可能となります。

ボリュームは以下のコマンドで作成できます。

docker volume create my-volume

そして、以下のようにして Docker コンテナとボリュームをマウントします。


docker run -d -v my-volume:/path/in/container my-image

これで、コンテナ内の/path/in/containerディレクトリの内容がボリュームmy-volumeに保存されます。

docker-compose におけるボリュームの管理

docker-compose は複数の Docker コンテナを一元的に管理するためのツールです。docker-compose を使うと、YAML 形式の設定ファイル(通常はdocker-compose.yml)を使用して、複数のコンテナとそれらの設定を定義できます。そして、docker-compose コマンド一つでコンテナの作成、起動、停止が行えます。

docker-compose では、ボリュームを直感的に管理できます。docker-compose.ymlファイルの中でボリュームを定義し、それを各サービス(コンテナ)にマウントすることができます。

以下に、docker-compose を使用してボリュームを作成し、それをサービスにマウントする例を示します。

version: "3.9"
services:
  web:
    image: my-web-app
    volumes:
      - my-data:/var/www/data
volumes:
  my-data:

上記の設定では、my-dataという名前のボリュームを作成し、それをwebサービスの/var/www/dataディレクトリにマウントしています。このように、docker-compose を使うと、複数のコンテナが同じボリュームを共有し、それぞれが独自のデータを持つことなく、データの一貫性を保つことが可能になります。

さらに、docker-compose を使用すると、一度に複数のボリュームを作成し、それぞれを異なるサービスにマウントすることも可能です。これにより、複雑なアプリケーションのデータ管理が容易になります。

ボリュームの利点と注意点

ボリュームの使用は、コンテナのデータ管理において大きな利点をもたらします。それは、データの永続性を確保し、複数のコンテナ間でデータを共有する能力を持つためです。また、ボリュームはホストから独立しているため、データの移行やバックアップが容易です。

しかし、ボリュームを使用する際には、以下のような点に注意が必要です。

  • ボリュームのデータは、それを使用するコンテナにとって透明です。つまり、コンテナはボリュームのデータを直接管理することはできません。データの管理は Docker エンジンによって行われます。
  • ボリュームはホストのファイルシステムから独立しています。そのため、ホストから直接ボリュームのデータにアクセスすることはできません。ボリュームのデータにアクセスするためには、それをマウントするコンテナを通じて行う必要があります。

まとめ

この記事では、Docker のボリュームと docker-compose におけるボリューム管理について詳細に紹介しました。ボリュームは Docker コンテナが生成、利用するデータを永続化するための重要な機能で、docker-compose を使うとその管理がさらに容易になります。この記事が Docker ボリュームと docker-compose の理解に役立つことを願っています。

これからも、Docker や docker-compose を活用して、より効率的で安全なアプリケーション開発を行いましょう。


Profile picture

Written by Mittsu
ベンチャー企業のしがないエンジニア。趣味はサッカーとTCG.

© 2024