このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:Dockerfileからボリュームを作成してマウントする方法①

Dockerfileからボリュームを作成してマウントする方法①

 Dockerでは、コンテナの寿命とは切り離してデータを保存するために「ボリューム」を利用します。ここでは、Dockerfileからイメージを作成し、実際にコンテナでボリュームをマウントして動作を確認する流れを、順を追って解説します。今回は「方法①」として、ボリュームの基本的な作成とマウントを扱います。

作業環境をクリーンにする

まず、古いコンテナやイメージを整理してクリーンな状態から始めます。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y

 このコマンドを実行すると、停止済みのコンテナや不要なイメージが削除され、以降の操作がスッキリ見やすくなります。

ボリュームも残っているようであれば、ここで削除しておきます。

作業ディレクトリの準備

作業用のディレクトリを作成し、そこに移動します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir volume-test

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/09/29     1:19                volume-test

PS C:\Users\joeac\Desktop\docker> cd volume-test
PS C:\Users\joeac\Desktop\docker\volume-test>

この volume-test ディレクトリの中にDockerfileを作成していきます。

Dockerfileの作成

次に、VS Codeなどで Dockerfile を作成します。

「code Dockerfile」を実行します。

PS C:\Users\joeac\Desktop\docker\volume-test> code Dockerfile

VSCodeが起動します。

以下の内容を入力して保存します。

FROM ubuntu:latest

# ボリュームをマウントするためのディレクトリを作成
RUN mkdir /app
RUN echo "This is App Data" > /app/sample.txt
VOLUME /app

# その他の設定や命令

各行の解説を表にまとめます。

行番号コマンド解説
1FROM ubuntu:latestUbuntuの最新バージョンをベースにイメージを作成
2RUN mkdir /app/app ディレクトリを作成
3RUN echo "This is App Data" > /app/sample.txtサンプルファイルを作成しテキストを書き込む
4VOLUME /app/app をボリュームとしてマーク
5その他追加の設定や命令を記述可能

重要ポイント

  • VOLUME命令は「このディレクトリをボリュームに使う」とマークするだけで、ビルド時にボリュームそのものが作成されるわけではありません。

イメージのビルド

Dockerfileを元にイメージを作成します。

コマンド書式

docker build -t <イメージ名> .

実行例

docker build -t volume-test .
コマンド要素解説
docker buildイメージをビルドするコマンド
-t volume-testvolume-test というタグを付与
.カレントディレクトリのDockerfileを使用

実行結果

PS C:\Users\joeac\Desktop\docker\volume-test> docker build -t volume-test .
[+] Building 6.9s (8/8) FINISHED                                        docker:desktop-linux
 => [internal] load build definition from Dockerfile                                    0.2s

(省略)

 => => unpacking to docker.io/library/volume-test:latest                                0.1s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/fohiweq7rswwgisknewj1gb6h

 実行後、docker image ls で確認すると、volume-test イメージが作成されていることが分かります。

ボリュームの確認

PS C:\Users\joeac\Desktop\docker\volume-test> docker volume ls
DRIVER    VOLUME NAME

ここで確認しても app というボリュームはまだ存在しません。
理由は、Dockerfileをビルドしてもボリュームは実際には作成されないためです。

コンテナの作成と実行

ここで、ビルドしたイメージからコンテナを実行し、ボリュームをマウントします。

コマンド書式

docker run -v <ボリューム名>:<ディレクトリ> --rm -it <イメージ名>

実行例

docker run -v app:/app --rm -it volume-test
コマンドパーツ説明
docker runコンテナを実行
-v app:/appapp というボリュームをコンテナ内の /app にマウント
--rmコンテナ終了時に自動削除
-it対話モードで起動しターミナルを割り当てる
volume-test使用するイメージ名

実行結果

PS C:\Users\joeac\Desktop\docker\volume-test> docker run -v app:/app --rm -it volume-test
root@3d74daaba71a:/#

コンテナ内での確認

コンテナが起動したら以下を実行してみます。

root@3d74daaba71a:/# cd /app
root@3d74daaba71a:/app# cat sample.txt
This is App Data

ファイルが正しく読み込めることを確認できます。

コンテナ終了後のボリューム確認

コンテナは消滅してもボリュームは残るということを確認します。

コンテナを終了します。

root@3d74daaba71a:/app# exit
exit

その後に確認します。

PS C:\Users\joeac\Desktop\docker\volume-test> docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

結果:コンテナは存在しない。

ボリュームを確認します。

PS C:\Users\joeac\Desktop\docker\volume-test> docker volume ls
DRIVER    VOLUME NAME
local     app

ここで初めて app ボリュームが作成されていることが確認できます。

ポイント

  • コンテナは消えてもボリュームは残るため、データを永続化できる。

まとめ

  • Dockerfileで VOLUME命令 を使うと、ディレクトリをボリュームとしてマークできる。
  • ただし、ビルド段階ではボリュームは作成されない。
  • docker run -v を使って初めてボリュームが作成され、マウントされる。
  • コンテナが消えてもボリュームは残るため、データの永続化が実現できる。

 次の「Dockerfileからボリュームを作成してマウントする方法②」では、今回作成した app ボリュームを別のコンテナにマウントし、データを共有する方法を解説していきます。