Docker Volumne

Dockerの基礎知識 */N

公開日: 2024-07-01
更新日: 2024-08-04

DockerにおけるVolumeとは?

コンテナ内のファイルシステムをホストのファイルシステムに接続する方法として

  • Volume mount
  • bind mount

の2つが有ります.bind mountがホストマシーンのOSやディレクトリ構造に依存する一方, volumeはDockerに寄って管理されるという差分が有ります.

▶  Volumeの特徴

  • Dockerの管理下でストレージ領域を確保
    • Linuxならば/var/lib/docker/volumes/
    • Dockerコマンドを使って管理可能
  • データのバックアップと復元が容易
  • Linux DockerとWindows Dockerどちらでも動作する
  • 他のコンテナとの共有が容易 and 複数のコンテナ間でボリュームを安全に共有可能
  • bind mountよりもI/O効率が良い
  • 永続データを扱う場合でも,volumeのコンテンツはコンテナ外に存在するのでコンテナサイズを増加させない
    • bindはコンテナ内のファイルシステムとホストのファイルシステムが直接リンクする仕組み

Docker volumeの作成

Docker Volumeは以下のコマンドで作成可能です

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
% docker volume create docker-sandbox
docker-sandbox

# list all your volumes
% docker volume ls                   
DRIVER    VOLUME NAME
local     docker-sandbox
local     vscode

# inspect the detail
% docker volume inspect docker-sandbox 
[
    {
        "CreatedAt": "2024-07-01T13:25:23Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/docker-sandbox/_data",
        "Name": "docker-sandbox",
        "Options": null,
        "Scope": "local"
    }
]

Docker Volumeの利用

上で作成した新規volumeをコンテナにattachして起動する場合以下のコマンドとなります

1
2
3
% docker container run --rm \
     --mount source=docker-sandbox,target=/app \
     ubuntu:latest touch /app/my-persistent-data

別のコンテナにも以下のようにattach可能です

1
2
3
% docker container run --rm \
    --mount source=docker-sandbox,target=/app \
    fedora:latest ls -lFa /app/my-persistent-data

📘 REMARKS

  • sourceにvolumeを指定しますが,上記コマンド実行時にvolumeに存在しない名前を入力すると自動的にvolumeが作成されます


volumeを削除する場合は

1
% docker volume rm docker-sandbox

使用されていないvolumeを一括で削除したい場合は

1
% docker volume prune

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)