Dockerのボリューム入門:volumesでデータを永続化する
今回の記事は「Dockerのボリューム永続化が重要な理由とその方法」の続きとなります。
ボリューム永続化方法にはvolumesを使用する方法とbind mountの2つがあります。この記事ではvolumesについて掘り下げて解説していきます。
volumesで永続化の利点と使うケース
volumesを使用する場合、Dockerが管理するファイルシステムにデータを保存します。
メリット:Dockerが管理するファイルシステムなのでファイルへのアクセスが速いです。
使用例:データベースなどのデータのやりとりが多いアプリケーションで使用します。
リソースの準備
本記事では、データベース(postgres)のイメージを使用してデータベースを作成し、作成したデータベースが永続化されることを確認します。
早速、リソースを準備していきましょう。
Dockerfileを準備する(データベースのイメージ)
今回は「postgres:17.0」のイメージを使用していきます。以下の内容でDockerfileを作成しましょう。
DockerfileFROM postgres:17.0
volumesで永続化する
作成したDockerfileを使用し、volumesで永続化する方法を見ていきましょう!
イメージのビルド
Dockerfileを作成したディレクトリで「docker build」コマンドを実行しましょう。
ターミナルdocker build . -t postgres
コンテナの起動(volumesオプション)
作成したイメージでコンテナを起動していきましょう。
オプションの解説
- --name(コンテナ名) : db
- -d : バックグラウンドで起動
- --rm : コンテナ停止時に削除
- -e(環境変数) : POSTGRES_PASSWORD=postgres(postgresqlのパスワード)
- -v(volume) : postgres_volume:/var/lib/postgresql/data(<ボリューム名>:<コンテナのマウント先ディレクトリ>)
- postgres : イメージ名
ターミナルdocker run --name db -d --rm -e POSTGRES_PASSWORD=postgres -v postgres_volume:/var/lib/postgresql/data postgres
コンテナが起動し、VOLUMESの個所に「postgres_volume」が追加されていることを確認してください。
データベース作る
データベースを作成するためにdbコンテナにシェルをアタッチして作業していきます。
以下、postgresのコマンドで現在のデータベースを確認し、testという名前のデータベースを作成、作成できていることを確認しましょう。
posggresコンテナpsql -h localhost -U postgres -d postgres -c "\l" psql -h localhost -U postgres -d postgres -c "create database test;" psql -h localhost -U postgres -d postgres -c "\l"
「create database」でtestデータベースが作成されることを確認します。
永続化できているか確認する
コンテナを削除し、再度起動したときにtestデータベースが残っていることを確認していきます。
コンテナの起動(volumesオプション)で実行したコンテナ起動コマンドを再度実行します。
ターミナルdocker run --name db -d --rm -e POSTGRES_PASSWORD=postgres -v postgres_volume:/var/lib/postgresql/data postgres
postgresにtestデータベースがあるか「\l」コマンドで確認してみましょう。
posggresコンテナpsql -h localhost -U postgres -d postgres -c "\l"
下図のようにtestデータベースが存在する場合、コンテナを削除してもデータが残っている(永続化できている)状態になっています。お疲れさまでした!
最後に
今回はvolumesでデータを永続化する方法についてハンズオン形式でやってみました。これでコンテナを削除したときにデータが消えてしまうということはないでしょう!
今回の記事が役に立った、ほかにも記事が見たいという方は最新情報を公式Xで配信しているのでフォローお願いします!