通常、ハードディスクはコンピュータ1台に最低1基あると思います。ホスト型仮想環境では、仮想化ソフトにて仮想ディスクが用意されており、仮想環境内から現実のハードディスクと同じように利用可能です。Dockerの場合も、仮想環境(Dockerコンテナ)内に、ハードディスクに相当するものとしてDockerイメージがあります。その部分はリードオンリー領域ではありますが、コピーオンライトという機能により、更新機能が提供されてます。Dockerの場合は、Dockerイメージ上のファイルを更新しても、Dockerコンテナが削除されてしまうと消えてしまいます。ホスト型仮想環境の場合は、仮想ディスクさえ消さなければファイルは残ってます。Dockerにも更新ファイルをずっと保存可能な機能がなければ運用的に破綻してしまいます。実は、Dockerには、コピーオンライトによる更新情報の保存以外に、データボリュームという機能がありまして、Dockerコンテナが消えてしまっても、更新ファイルを残すことが可能な仕組みが用意されてます。今回は、このデータボリュームについて書きたいと思います。本記事の目次Dockerのデータボリュームの詳細説明データボリュームとはデータボリュームの設定方法データボリュームの実体を見てみるDockerホスト上の実ディレクトリを、Dockerコンテナ内のディレクトリに割り当てるDockerのデータボリュームの詳細説明データボリュームとは繰り返しになりますが、Dockerコンテナ内で書き込まれた更新データは、基本的にDockerコンテナが削除されると全て消えてしまいます。commit」コマンドを使用して、新しいDockerイメージを作成すれば、それまでの更新データは保存可能です。このコマンドは、Dockerイメージを作るためのコマンドであって、日常発生する更新データを保存するためのものではありません。このような日々の更新データを、Dockerコンテナが削除されても保存するためには、Dockerコンテナの外で保存する必要があります。これを実現するのが、Dockerのデータボリュームになります。データボリュームは、DockerホストのディレクトリをDockerコンテナにマウントする仕組みです。Dockerコンテナ内で、データボリュームとしてマウントされたディレクトリ内にファイルを保存すると、Dockerホスト上に保存されます。■データボリュームの設定方法データボリュームは、Dockerコンテナ起動時に「-v」オプションで指定します。データボリュームの設定方法は、2つあります。volume」コマンドにて、データボリュームを作成します。コマンドは以下の通りです。<ボリュームドライバ名>データボリューム名は、作成するデータボリュームの名前です。その名前を使用して、Dockerコンテナ内のディレクトリにマウントします。ボリュームドライバ名は、作成するデータボリュームのタイプを指定します。省略した場合はデフォルトの「local」が指定され、Dockerホスト上の実ディレクトリがデータボリュームとしてアサインされます。次に、作成したデータボリュームを「-v」オプションを使用してDockerコンテナにマウントさせます。オプションのフォーマットは以下の通りです。<データボリューム名>:<Dockerコンテナ内のディレクトリ>2.Dockerコンテナ内の実ディレクトリをデータボリューム化する2つめは、データボリューム名を指定しない方法です。「-v」オプションは以下のように指定します。<Dockerコンテナ内のディレクトリ>データボリュームは、Dockerが自動的に作成します。データボリューム名はランダムに生成されます。自動的に作成されたデータボリューム名は、Dockerコマンドで調べればわかりますが、最初にデータボリュームを作成してから「-v」オプションでアサインする1つめの方法のほうが運用的には良いのではないかと思います。■データボリュームの実体を見てみるデータボリュームを作成してから「-v」オプションでそのデータボリュームをアサインする方法で実験してみたいと思います。以下のコマンドでデータボリュームを作成します。testdatavol作成されているか確認します。testdatavolでは、centosのDockerコンテナ内の/home/testvolディレクトリにマウントさせます。init起動したdockerコンテナの中を覗いてみます。bash※xxxxxxxxxxはDockerコンテナIDです。ps」コマンドで確認できます。下はDockerコンテナ内でのオペレーションになります。testvoltestvolディレクトリがあります。これは「-v」オプションを指定したことで作成されたディレクトリですので、データボリュームをマウントしているディレクトリになります。このディレクトリ下にファイルを作成してみましょう。aabbccddeeff.txtでは、Dockerコンテナから抜けて、Dockerホストに戻ります。exit以下のコマンドで、データボリュームtestdatavolにアサインされているDockerホスト上のディレクトを調べます。}]出力された内容の「Mountpoint」部分が、データボリュームの実ディレクトリになります。ここがデータボリュームtestdatavolの実体となります。ファイルが存在するか確認しましょう。許可がありません上記のエラーが出た場合は、rootユーザにて再度確認してください。aabbccddeeff.txt先ほどDockerコンテナ内で作成したファイルがありました。Dockerコンテナ内の/home/testvolディレクトリが、Dockerのデータボリュームtestdatavolをマウントしていることが確認できました。1つだけ確認させてください。先ほど起動したDockerコンテナを削除してみましょう。xxxxxxxxxxxxxxxx※xxxxxxxxxxxxxxxxはDockerコンテナのIDです。再度、ファイルの存在確認をしてください。aabbccddeeff.txtDockerコンテナを削除してもファイルは残ってます。このデータボリュームを指定して、Dockerコンテナを起動すれば、作成したファイルをDockerコンテナ内からまた確認することが出来ます。次に示しますように、データボリュームを使う方法以外に、Dockerホスト上のディレクトリをDockerコンテナにマウントする方法もあります。■Dockerホスト上の実ディレクトリを、Dockerコンテナ内のディレクトリに割り当てるDockerホスト上に、Dockerコンテナにマウントするディレクトリを作成します。作成したディレクトリをDockerコンテナ起動時に「-v」オプションで指定し、Dockerコンテナ内でマウントさせます。オプションのフォーマットは以下の通りです。/data/vol:/var/dataとなります。今回説明させていただいたデータボリュームは、Dockerホストのハードディスク上でしたが、ネットワーク上のストレージも利用できるような情報もあります。調査して記事にしたいと思います。最後までお読みいただきありがとうございました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。テニス、作品鑑賞(映画、アニメ、ドラマ、絵画など)、讃岐うどん食べ歩き。コンピュータ業界に身を置く中年おやじです。世の中にはまだ自分が知らない情報があふれていて、知っているつもりでも全体の半分も知らないことがいっぱいあります。見つけた情報はGoogleKeepにメモる毎日です。ある日、自分が良いと思うことは、同じように感じる方も、数は少ないかもしれないけどいるはず、と思いまして、そのことが本サイト「めもたんす」を作るきっかけとなりました。自分がいいなと思ったことを記事にまとめたサイトです。technology.。