マウントオプションを持つローカルボリュームを作成する
このステップでは、ローカルの 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