コンテナへの永続ストレージのアタッチ

Red Hat Enterprise LinuxBeginner
オンラインで実践に進む

はじめに

このチャレンジでは、podman を使用してコンテナに永続ストレージ(Persistent Storage)をアタッチします。コンテナは本質的にエフェメラル(一時的)なものであり、コンテナ内で作成されたデータはコンテナが削除されると失われてしまいます。データを保存し続けるには、ホストシステムのディレクトリをコンテナ内にマウントします。このマウントされたディレクトリは永続ボリューム(Persistent Volume)と呼ばれ、コンテナが停止、削除、または再作成されたとしても、データを確実に残すことができます。

コンテナへの永続ストレージのアタッチ

このチャレンジでは、まずホストシステム上に永続ボリュームとして機能するディレクトリを作成します。次に、新しいコンテナを実行し、その永続ボリュームをアタッチします。最後に、コンテナ内からボリュームに書き込まれたデータが、コンテナの再起動後も保持されていることを確認します。

タスク

  • ホストシステム上に、永続ボリュームとして機能するディレクトリを作成する。
  • 新しいコンテナを実行し、永続ボリュームをアタッチする。
  • コンテナ内からボリュームに書き込まれたデータが、コンテナの再起動後も保持されていることを確認する。

要件

  • ホストシステム上に /data という名前のディレクトリを作成してください。このディレクトリはボリュームマウントのホスト側パスとして使用されます。
  • nginx イメージを使用してコンテナを実行してください。コンテナ名は my-nginx-container とします。
  • ホストの /data ディレクトリを、コンテナ内の /usr/share/nginx/html ディレクトリにマウントしてください。
  • 実行中のコンテナ内で、/usr/share/nginx/html/my-file.txt というファイルを作成し、その内容を正確に This is a persistent file としてください。

タスク完了後、コンテナのマウントされたディレクトリ内で、デフォルトの Nginx ファイルとともに作成したカスタムファイルを確認できるはずです。また、ホスト側のディレクトリ /data を確認しても、同じファイルが存在していることがわかります。

[labex@host ~]$ podman exec my-nginx-container cat /usr/share/nginx/html/my-file.txt
This is a persistent file
[labex@host ~]$ podman exec my-nginx-container ls /usr/share/nginx/html
my-file.txt

ヒント

  • /data ディレクトリを作成するには sudo mkdir コマンドを使用します。
  • コンテナのプロセスが書き込みを行えるように、sudo chown による所有権の変更や sudo chmod による権限の設定が必要になる場合があります。
  • podman run コマンドでホストディレクトリをコンテナにマウントするには、-v または --volume フラグを使用します。形式は -v /host/path:/container/path です。
  • RHEL のような SELinux が有効なシステムでは、ホストディレクトリに適切な SELinux コンテキストを設定する必要があります。sudo semanage fcontext -a -t container_file_t "/data(/.*)?"sudo restorecon -R /data を使用して SELinux ラベルを構成してください。
  • 権限エラーが発生した場合は、ディレクトリの所有権をコンテナのユーザー ID(nginx の場合は通常 1000:1000)に合わせてみてください。
✨ 解答を確認して練習

まとめ

このチャレンジでは、バインドマウント(Bind Mount)を使用してコンテナに永続ストレージを提供する方法を学びました。ホストシステムのディレクトリをコンテナにマウントすることで、コンテナが停止、削除、または再起動された場合でも、アプリケーションによって生成されたデータが保持されるようになります。この手法は、コンテナでステートフル(状態を持つ)なアプリケーションを実行するための基本となります。