今回はDocker上でボリュームを作成し、作成したコンテナにマウントする方法について記載する。
Docker 2種類のマウント
まずDockerには2種類のマウント方法がある。
①ボリュームマウント
②バインドマウント
①は今回説明するもので、Docker Engine上に新しくボリュームを切って、それをコンテナにマウントする方法
<イメージ>
②はDockerをインストールしているマシンの特定のディレクトリを、コンテナにマウントする方法(NASみたいイメージ)
#ボリュームの作成
まずボリュームを作成していこう。
docker volume create testvolume01
> docker volume ls
(省略)
***
***
local testvolume01
他にもコンテナを作成している分、ボリュームが作成されている。
#ボリュームの詳細表示
> docker inspect volume01
[
{
"CreatedAt": "2021-08-07T09:01:56Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/testvolume01/_data",
"Name": "testvolume01",
"Options": {},
"Scope": "local"
}
]
マウントポイントは、docker内となっている。
Apacheコンテナを作成しつつ、ボリュームをマウント
docker run -d --name=httpd_volume01 -p 8080:80 --mount type=volume,src=testvolume01,dst=/usr/local/apache2/htdocs/ httpd
/usr/local/apache2/htdocs/ このフォルダにはindex.htmlが入っている。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bdd01904904 httpd "httpd-foreground" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp, :::8080->80/tcp httpd_volume01
httpd_volume01というコンテナが作成されている。
ブラウザに「http://localhost:8080/」と入力すれば、『IT works!』と表示されるはず。
事前作成したボリュームがマウントされてるかの確認
「httpd_volume01」コンテナの詳細を見てみよう。
> docker container inspect httpd_volume01
(省略)
"Mounts": [
{
"Type": "volume",
"Source": "testvolume01",
"Target": "/usr/local/apache2/htdocs/"
}
],
(省略)
Sourceが作成した「testvolume01」であることがわかる。
コンテナの中に入ってindex.htmlを更新する
docker exec -it httpd_volume01 /bin/bash
# cd /usr/local/apache2/htdocs/
# ls
index.html
<viを使えるように>
# apt-get update ←パッケージの更新
# apt-get install vim
# vi index.html
<「IT works!」を適当な文字に変更>
:wq 保存
先ほどのブラウザで「http://localhost:8080/」と入力すれば、変更した文字列が表示される。
別のコンテナを作成し、変更した文字列が表示されるかの確認
これだけじゃ本当にマウントされてるかわからない、という方は別のコンテナを作成して確認してみてください。
docker run -d --rm --name=httpd_after_volume01 -p 8081:80 --mount type=volume,src=testvolume01,dst=/usr/local/apache2/htdocs/ httpd
新しいブラウザで「http://localhost:8081/」と入力。
変更後の文字列が表示されれば、無事にボリューム内を共有できていることがわかる。
最後に
今回はDockerでボリュームを作成し、マウントをやってきました。
次回はDockerのホストOSのディレクトリとマウントする「バインドマウント」を紹介したいと思います。