8.1 仮想ディスクとの出会い
ボリューム (Volumes) のマウントは、Docker の一番便利な機能の一つだよ。これを使えば、コンテナがホストマシンのデータとうまくやり取りできるようになるんだ。この機能はデータ管理を柔軟かつ便利にするのさ:データを長期間保存したり、複数のコンテナ間でシェアしたり、問題が起きた時にデータをバックアップまたは復元するのも簡単になるよ。
Docker のボリューム (Volumes) は、データをコンテナから独立して保存する手段だよ。コンテナが削除されても、ボリュームに保存されたデータは安全に保たれる。ボリュームはコンテナに接続 (マウント) できるから、データを別々に保存して何度でも使い回せるんだ。コンテナをいくら作り直して削除してもね。
主なボリュームの種類
- 匿名ボリューム (Anonymous Volumes)
- コンテナにボリュームを明示的に指定しない場合、Docker が自動的に作成する。
- 一時的なデータ保存に使われる。
- 名前付きボリューム (Named Volumes)
- Docker によって作成および管理される。
- いくつかのコンテナに接続でき、削除や停止後も保持される。
- バインドマウント (Bind Mounts)
- ホストマシンのディレクトリとコンテナ内のディレクトリをリンクさせる。
- ホストシステムのデータにアクセスするのに便利で、開発時にかなり役立つ。
docker run
コマンドを使ったボリュームのマウントの基本構文
-v <host_path>:<container_path>
完全な構文:
docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]
ボリュームをマウントするための主なパラメータ
1. パラメータ -v
または --volume
名前付きボリュームまたはバインドマウントを作成するために使用される。
例:
docker run -d -v /host/data:/container/data nginx
2. パラメータ --mount
もっと柔軟で詳細なボリュームのマウント方法を提供し、追加パラメータもサポートする。
例:
docker run -d --mount type=bind,source=/host/data,target=/container/data nginx
8.2 ボリュームの作成と使用
1. 名前付きボリューム
名前付きボリュームはDockerによって作成および管理されるよ。これらは、コンテナを再起動したり削除した後でもデータを保持する必要がある場合にデータを永続的に保存するために使用されるんだ。
名前付きボリュームの作成:
docker volume create my_volume
ボリュームをマウントしてコンテナを起動:
次の例では、ボリュームmy_volume
がコンテナ内部のディレクトリ/data
にマウントされるよ。/data
に書き込まれたすべてのデータはボリューム内に保存されて、コンテナを削除した後でも利用可能なんだ。
docker run -d -v my_volume:/data --name my_container nginx
2. 匿名ボリューム
匿名ボリュームはDockerによって自動的に作成されて、特定のコンテナに関連付けられるんだ。これらは、コンテナが削除された後に保持する必要のない一時データに便利だよ。
匿名ボリュームでコンテナを起動:
この例では、Dockerが匿名のボリュームを自動的に作成して、コンテナ内部のディレクトリ/data
にマウントするよ。
docker run -d -v /data --name my_container nginx
3. バインドディレクトリ
バインドディレクトリを使うと、ホストシステムのディレクトリをコンテナにマウントできるんだ。この方法は、コンテナとホストシステム間でデータを共有するのに便利だよ。また、開発プロセス中にホストシステムにソースコードを保存する場合にもよく使われるね。
バインドディレクトリを使ってコンテナを起動:
次の例では、ホストマシンのディレクトリ/host/data
がコンテナ内部のディレクトリ/container/data
にマウントされるんだ。
docker run -d -v /host/data:/container/data --name my_container nginx
8.3 ボリュームの使用例
1. データベースのデータの保存
データベースでボリュームを使うと、コンテナを再起動したりアップデートしたりしてもデータを保持することができるよ。これは特に本番環境での信頼性のために重要なんだ。
例:
この例では、PostgreSQLのデータがボリュームdb_data
に保存されることで、再起動やコンテナ削除の際にもデータが保護されます。
docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres
2. コンテナ間でのデータ共有
時々、複数のコンテナでデータをシェアしたい場合もあるよね。ボリュームを使うと、このプロセスがとても簡単になるんだ。
例:
ボリュームを作成して、それを使う2つのコンテナを起動します。両方のコンテナがshared_data
内のデータにアクセスできるんだ。こうすることでデータを簡単にシェアできるよ。
docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx
3. 開発とテスト
アプリケーションを開発するとき、ホストのマシンとコンテナの間でソースコードを共有できるディレクトリを使うと便利だね。これで開発者はホスト上でコードを編集して、コンテナが即座にその更新内容を使うことができるよ。
例:
この例では、ホストマシンのディレクトリ/path/to/source
をコンテナの/app
ディレクトリにマウントしているよ。これでコンテナはホストシステムの最新のソースコードを使うことができるんだ。
docker run -d -v /path/to/source:/app --name dev_container node
8.4 ボリュームの管理
Dockerにはボリュームを管理するための便利なコマンドがあって、それを使えばボリュームの作成、削除、情報の確認が簡単にできるよ!
1. すべてのボリュームの表示
このコマンドは、ホストマシン上で利用可能なすべてのボリュームのリストを表示するよ。
docker volume ls
2. ボリュームの情報を表示
このコマンドを使うと、ボリュームmy_volume
の詳細情報を確認できるよ。ホストファイルシステム上の場所や、このボリュームを使っているコンテナの情報などがわかるんだ。
docker volume inspect my_volume
3. ボリュームを削除
このコマンドはボリュームmy_volume
を削除するよ。でも削除する前に、このボリュームを使っているコンテナがないことを確認してね。使われている場合、コマンドは実行されないから注意だよ。
docker volume rm my_volume
8.5 ボリュームのバックアップ
データの安全性を確保するためには、ボリュームのバックアップを作成し、必要に応じて復元できることが重要だよ。
1. ボリュームのバックアップ
この例では、ボリュームmy_volume
の内容をmy_volume_backup.tar.gz
ファイルにアーカイブし、それをホストマシンの/backup
ディレクトリに保存するよ。
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume
2. ボリュームの復元
この例では、my_volume_backup.tar.gz
ファイルに保存されているバックアップからボリュームmy_volume
の内容を復元するよ。
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
GO TO FULL VERSION