マウントオプションを指定したローカルボリュームの作成
このステップでは、ローカルの Docker ボリュームを作成し、マウントオプションを指定する方法を学びます。マウントオプションを使用すると、ファイルシステムのマウント方法を制御できます。たとえば、パーミッションの設定、特定の機能の有効化、またはパフォーマンスの最適化などが可能です。
myvolume3
という名前のローカルボリュームを作成し、o
オプションを使用してマウントオプションを指定します。この例では、uid
と gid
オプションを設定して、コンテナによってボリューム内に作成されたファイルがホスト上の特定のユーザーとグループによって所有されるようにします。これは、コンテナとホスト間でデータを共有する際のパーミッション管理に役立ちます。
まず、ボリュームのソースとして使用するディレクトリをホスト上に作成しましょう。標準的なローカルボリュームではこれは必ずしも必要ありませんが、マウントオプションが基になるファイルシステムにどのように影響するかを説明するのに役立ちます。
mkdir -p ~/project/myvolumedata
次に、local
ドライバを使用して myvolume3
ボリュームを作成し、uid
と gid
を指定した o
オプションを設定します。現在の labex
ユーザーのユーザー ID とグループ ID を使用します。id -u
と id -g
コマンドを使用して、自分のユーザー ID とグループ ID を確認できます。
USER_ID=$(id -u)
GROUP_ID=$(id -g)
docker volume create --driver local --opt type=none --opt device=/home/labex/project/myvolumedata --opt o=bind,uid=$USER_ID,gid=$GROUP_ID myvolume3
このコマンドを分解して説明します。
docker volume create
:ボリュームを作成するコマンドです。
--driver local
:local
ボリュームドライバを指定します。
--opt type=none
:自動的にファイルシステムの種類を作成しないことを指定します。既存のディレクトリにバインドします。
--opt device=/home/labex/project/myvolumedata
:マウントするデバイスを指定します。これは、ホスト上で作成したディレクトリです。絶対パス /home/labex/project/myvolumedata
を使用していることに注意してください。
--opt o=bind,uid=$USER_ID,gid=$GROUP_ID
:マウントオプションを渡します。
bind
:バインドマウントを指定し、ボリュームを指定されたデバイス(ホストディレクトリ)にリンクします。
uid=$USER_ID
:ボリューム内に作成されるファイルのユーザー ID を現在のユーザーの ID に設定します。
gid=$GROUP_ID
:ボリューム内に作成されるファイルのグループ ID を現在のユーザーのグループ ID に設定します。
myvolume3
:ボリュームの名前です。
コンソールにボリュームの名前が表示されるはずです。
次に、オプションを確認するためにボリュームを調査しましょう。
docker volume inspect myvolume3
出力では、Driver
が local
、Options
に type=none
、device=/home/labex/project/myvolumedata
、および o=bind,uid=...,gid=...
(あなたのユーザー ID とグループ ID が表示されます)が含まれているはずです。Mountpoint
は device
のパスと同じになります。
次に、コンテナを実行し、このボリュームをアタッチします。ubuntu
イメージを使用し、myvolume3
をコンテナ内の /app
にマウントします。その後、コンテナの /app
ディレクトリ内にファイルを作成し、ホスト上でその所有権を確認します。
必要に応じて、ubuntu
イメージを取得します。
docker pull ubuntu
次に、コンテナを実行し、マウントされたボリューム内にファイルを作成します。
docker run --rm -v myvolume3:/app ubuntu bash -c "echo 'Testing ownership' > /app/testfile.txt && ls -l /app/testfile.txt"
このコマンドは、ubuntu
コンテナを実行し、myvolume3
を /app
にマウントし、/app/testfile.txt
に "Testing ownership" を書き込み、その後コンテナ内のファイルの詳細を表示します。コンテナは通常デフォルトで root として実行されるため、コンテナ内ではファイルが root 所有として表示されるはずです。
次に、ホストマシンの ~/project/myvolumedata
ディレクトリ内のファイルの所有権を確認しましょう。
ls -l ~/project/myvolumedata/testfile.txt
ボリュームを作成する際に指定した uid
と gid
マウントオプションのおかげで、testfile.txt
ファイルがホスト上の labex
ユーザーとグループによって所有されていることがわかるはずです。
最後に、作成したディレクトリをクリーンアップしましょう。
rm -rf ~/project/myvolumedata