CodeGym /コース /Docker SELF /Dockerにおけるデータ保存の基本

Dockerにおけるデータ保存の基本

Docker SELF
レベル 19 , レッスン 0
使用可能

1.1 ボリューム(Volumes)

Dockerでのデータ保存は、コンテナを扱う上で重要な部分だよ。コンテナ自体は一時的な存在で、停止や削除後に中のデータは失われちゃう。データを永続的に保存して、実行間でも保持するために、Dockerは主に2つの技術を提供しているんだ:ボリューム(volumes)とバインドマウント(bind mounts)。

ボリューム(Volumes)

ボリュームっていうのは、データを保存するためにDockerが管理するリソースだよ。コンテナのライフサイクルとは独立して存在するから、データを永続的に保存するのに使えるんだ。ボリュームはDockerによって作成・管理されるから、コンテナ外でデータを保存する便利な方法を提供してくれるよ。

ボリュームを使う利点

  1. ホストからの独立性: ボリュームはDockerが管理するホスト上の特別なディレクトリに保存されるから、独立性が確保されるんだ。
  2. 管理の簡単さ: Dockerはボリュームを作成・削除・管理するための便利なコマンドを提供してるよ。
  3. 互換性と移植性: ボリュームは異なるホスト間で簡単に移動できるし、異なるコンテナでも使えるんだ。

ボリュームを作成して使う例

ボリュームの作成:

Terminal

docker volume create my_volume

コンテナでボリュームを使う:

この例では、ボリュームmy_volume/dataディレクトリとしてコンテナmy_container内にマウントされてるよ。

Terminal

docker run -d --name my_container -v my_volume:/data nginx

1.2 バインドマウント (Bind Mounts)

バインドマウントを使用すると、ホストの特定のディレクトリをコンテナにマウントできるよ。これにより、コンテナがホストに存在するファイルやディレクトリを使用できるようになり、とくにローカルファイルで作業する必要がある開発やテストに便利だね。

バインドマウント使用のメリット:

  1. ホストファイルへの直接アクセス: コンテナはホスト上のファイルやディレクトリを直接使用できるよ。
  2. 開発の便利さ: 開発者はホスト上のファイルを簡単に変更でき、その変更をリアルタイムでコンテナに反映できる。
  3. 柔軟性: バインドマウントはホスト上のどんなディレクトリでも使えるから、データ管理における柔軟性が大きい。

バインドマウントの使用例:

バインドディレクトリ付きでコンテナを実行する:

Terminal

docker run -d --name my_container -v /path/on/host:/data nginx

この例では、ホストのディレクトリ/path/on/hostがコンテナmy_container内のディレクトリ/dataにマウントされるよ。

ボリュームとバインドマウントの比較:

特徴 ボリューム バインドマウント
データ保存 Dockerによって管理 ユーザーによって管理
分離性 ホストのファイルシステムから分離 ホストのファイルシステムを使用
パフォーマンス Docker用に最適化 ホストのファイルシステムに依存
用途 データの長期保存 開発とテスト

1.3 実践的な例

実践的な使用例

例 1: データベースのためのボリュームの使用

データベースのデータを永続的に保存するには、ボリュームを使うことができるよ。

ボリュームの作成:

Terminal

docker volume create db_data

ボリュームを使用してデータベースコンテナを起動する:

Terminal

docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v 
db_data:/var/lib/postgresql/data postgres

例 2: ウェブ開発のためのバインドディレクトリの使用

ウェブアプリケーションを開発する場合、ローカルファイルの変更がすぐにコンテナに反映されるようにするためにバインドディレクトリを使用できるよ。

バインドディレクトリを使ってコンテナを起動:

Terminal

docker run -d --name web_dev -v $(pwd)/my_website:/usr/share/nginx/html nginx

この例では、現在の作業ディレクトリ my_website が、コンテナ nginx のディレクトリ /usr/share/nginx/html にマウントされているんだ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION