このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】Dockerfileからボリュームを作成する①
ここでは、Dockerfileからイメージを作成して、コンテナにボリュームをマウントさせていきます。
少し長くなりますので、2部に分けて解説します。
イメージの作成
Dockerfileからボリュームを作成する手順は次の通りです。
Dockerfileを作成する
最初に、ボリュームを作成するためのDockerfileを作成します。このDockerfileには、ボリュームをマウントするためのディレクトリを作成する命令を含める必要があります。
作業ディレクトリに移動
作業ディレクトリに移動します。
・「cd desktop/docker」と入力します。
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>
「volume-test」ディレクトリを作成
Dockerfile を格納する「volume-test」ディレクトリを作成します。
・「mkdir volume-test」コマンドを実行します。
「volume-test」ディレクトリが作成されます。
PS C:\Users\joeac\Desktop\docker> mkdir volume-test
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/03/24 2:39 volume-test
「volume-test」ディレクトリに移動します。
・「cd volume-test」と入力します。
PS C:\Users\joeac\Desktop\docker> cd volume-test
PS C:\Users\joeac\Desktop\docker\volume-test>
Dockerfileの作成
イメージをビルドするための「Dockerfile」を作成します。
VSCodeを起動します。
・「code Dockerfile」を実行します。
PS C:\Users\joeac\Desktop\docker\volume-test> code Dockerfile
VSCodeが起動します。
次のようなDockerfileを作成します。
・以下の内容を入力して保存します。
FROM ubuntu:latest
# ボリュームをマウントするためのディレクトリを作成
RUN mkdir /app
RUN echo "This is App Data" > /app/sample.txt
VOLUME /app
# その他の設定や命令
Dockerfileの各行の解説を表形式でまとめます。
行番号 | コマンド | 解説 |
---|---|---|
1 | FROM ubuntu:latest | Ubuntuの最新バージョンをベースに新しいイメージを作成 |
2 | RUN mkdir /app | コンテナ内に「/app 」ディレクトリを作成 |
3 | RUN echo "This is App Data" > /app/sample.txt | 「/app/sample.txt 」にテキストを書き込む。 |
4 | VOLUME /app | 「/app 」ディレクトリをボリュームにマウント |
5 | その他の設定や命令 | ボリューム以外の設定や命令はここに含まれる。 |
作成したディレクトリをボリュームにマウントするために、「VOLUME
」命令を使用します。これにより、Dockerイメージのボリュームとしてマークされ、後でコンテナを作成する際にマウントポイントとして使用されます。
Dockerfile内でボリュームを作成することはできません。代わりに、後で「docker run
」コマンドでボリュームを作成して、それをコンテナにマウントします。
イメージのビルド
【コマンド】docker build -t volume-test .
このコマンドの意味は以下のとおりです。
コマンド | 解説 |
---|---|
docker build | Dockerイメージをビルドするためのコマンド |
-t volume-test | 作成されるイメージに「volume-test 」というタグを付ける |
. | カレントディレクトリにあるDockerfileを使用してビルドする |
このコマンドは、カレントディレクトリにあるDockerfileを使用して、「volume-test
」という名前のイメージをビルドします。
以下のコマンドを実行します。「volume-test」というイメージを作成して、作成したイメージを確認します。
- 「
docker build -t volume-test .
」コマンド - 「
docker image ls
」コマンド
PS C:\Users\joeac\Desktop\docker\volume-test> docker build -t volume-test .
[+] Building 0.7s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 244B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 0.0s
=> [1/3] FROM docker.io/library/ubuntu:latest 0.0s
=> [2/3] RUN mkdir /app 0.2s
=> [3/3] RUN echo "This is App Data" > /app/sample.txt 0.5s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:8dc22bfe5e96255809e4826b572f6f88a7e6c9447d3dfc58ea085922064aaba1 0.0s
=> => naming to docker.io/library/volume-test 0.0s
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
PS C:\Users\joeac\Desktop\docker\volume-test> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
volume-test latest 8dc22bfe5e96 About a minute ago 77.9MB
ubuntu latest ca2b0f26964c 3 weeks ago 77.9MB
busybox latest ba5dc23f65d4 10 months ago 4.26MB
「volume-test」イメージが作成されていることが確認できます。
ボリュームの確認
作成されているボリュームを確認します。
・「docker volume ls」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\volume-test> docker volume ls
DRIVER VOLUME NAME
local vol1
「app」ボリュームは、まだ、作成されていないことが確認できます。
Dockerfileを元にビルドしてもボリュームは作成されないことが分かります。
代わりに、後で「docker run
」コマンドでボリュームを作成して、それをコンテナにマウントします。
コンテナの作成と実行
作成した「volume-test」を使用してコンテナを作成し実行します。この際に、ボリュームが自動的に作成され、指定されたディレクトリがボリュームにマウントされます。
docker run -v app:/app --rm -it volume-test
コマンドの意味は下表のとおりです。
コマンドパーツ | 説明 |
---|---|
docker run | Dockerコンテナを実行するためのコマンド |
-v app:/app | ホストマシンの「app 」ディレクトリをコンテナ内の「/app 」ディレクトリにマウントする |
--rm | コンテナが終了したら自動的に削除する |
-it | 対話的なセッションを確立し、端末に出力を提供する |
volume-test | 使用するDockerイメージの名前 |
このコマンドは、ホストマシンのapp
ディレクトリをDockerコンテナ内の/app
ディレクトリにマウントし、そのコンテナを実行します。コンテナが終了すると自動的に削除され、対話的なセッションが提供されます。
・「docker run -v app:/app --rm -it volume-test
」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\volume-test> docker run -v app:/app --rm -it volume-test
root@886405c9123d:/#
以下のコマンドを実行して、ファイルの書き込みと読み込みを行います。
- 「cd /app」コマンド
- 「cat sample.txt」コマンド
root@886405c9123d:/# cd app
root@886405c9123d:/app# cat sample.txt
This is App Data
root@886405c9123d:/app#
コンテナとボリュームの関係
コンテナとボリュームとの関係を確認します。
以下のことを確認します。
コンテナは消滅してもボリュームは残る。
コンテナの終了
・「exit」コマンドを実行します。
「--rm
」オプションを指定して、「docker run」コマンドを実行したので、コンテナは削除されるはずです。
root@886405c9123d:/app# exit
exit
PS C:\Users\joeac\Desktop\docker\volume-test>
コンテナの確認
・「docker container ls -a」
PS C:\Users\joeac\Desktop\docker\volume-test> docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ボリュームの確認
・「docker volume ls」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\volume-test> docker volume ls
DRIVER VOLUME NAME
local app
local vol1
ボリュームが存在することが分かります。
この続きは「Dockerfileからボリュームを作成する②」で、別のコンテナを作成して「app」ボリュームにマウントしていきます。