1.1 ボリューム(Volumes)
Dockerでのデータ保存は、コンテナを扱う上で重要な部分だよ。コンテナ自体は一時的な存在で、停止や削除後に中のデータは失われちゃう。データを永続的に保存して、実行間でも保持するために、Dockerは主に2つの技術を提供しているんだ:ボリューム(volumes)とバインドマウント(bind mounts)。
ボリューム(Volumes)
ボリュームっていうのは、データを保存するためにDockerが管理するリソースだよ。コンテナのライフサイクルとは独立して存在するから、データを永続的に保存するのに使えるんだ。ボリュームはDockerによって作成・管理されるから、コンテナ外でデータを保存する便利な方法を提供してくれるよ。
ボリュームを使う利点
- ホストからの独立性: ボリュームはDockerが管理するホスト上の特別なディレクトリに保存されるから、独立性が確保されるんだ。
- 管理の簡単さ: Dockerはボリュームを作成・削除・管理するための便利なコマンドを提供してるよ。
- 互換性と移植性: ボリュームは異なるホスト間で簡単に移動できるし、異なるコンテナでも使えるんだ。
ボリュームを作成して使う例
ボリュームの作成:
docker volume create my_volume
コンテナでボリュームを使う:
この例では、ボリュームmy_volume
が/data
ディレクトリとしてコンテナmy_container
内にマウントされてるよ。
docker run -d --name my_container -v my_volume:/data nginx
1.2 バインドマウント (Bind Mounts)
バインドマウントを使用すると、ホストの特定のディレクトリをコンテナにマウントできるよ。これにより、コンテナがホストに存在するファイルやディレクトリを使用できるようになり、とくにローカルファイルで作業する必要がある開発やテストに便利だね。
バインドマウント使用のメリット:
- ホストファイルへの直接アクセス: コンテナはホスト上のファイルやディレクトリを直接使用できるよ。
- 開発の便利さ: 開発者はホスト上のファイルを簡単に変更でき、その変更をリアルタイムでコンテナに反映できる。
- 柔軟性: バインドマウントはホスト上のどんなディレクトリでも使えるから、データ管理における柔軟性が大きい。
バインドマウントの使用例:
バインドディレクトリ付きでコンテナを実行する:
docker run -d --name my_container -v /path/on/host:/data nginx
この例では、ホストのディレクトリ/path/on/host
がコンテナmy_container
内のディレクトリ/data
にマウントされるよ。
ボリュームとバインドマウントの比較:
特徴 | ボリューム | バインドマウント |
---|---|---|
データ保存 | Dockerによって管理 | ユーザーによって管理 |
分離性 | ホストのファイルシステムから分離 | ホストのファイルシステムを使用 |
パフォーマンス | Docker用に最適化 | ホストのファイルシステムに依存 |
用途 | データの長期保存 | 開発とテスト |
1.3 実践的な例
実践的な使用例
例 1: データベースのためのボリュームの使用
データベースのデータを永続的に保存するには、ボリュームを使うことができるよ。
ボリュームの作成:
docker volume create db_data
ボリュームを使用してデータベースコンテナを起動する:
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
例 2: ウェブ開発のためのバインドディレクトリの使用
ウェブアプリケーションを開発する場合、ローカルファイルの変更がすぐにコンテナに反映されるようにするためにバインドディレクトリを使用できるよ。
バインドディレクトリを使ってコンテナを起動:
docker run -d --name web_dev -v $(pwd)/my_website:/usr/share/nginx/html nginx
この例では、現在の作業ディレクトリ my_website
が、コンテナ nginx
のディレクトリ /usr/share/nginx/html
にマウントされているんだ。
GO TO FULL VERSION