コンテナでサービスを実行しているときにDBのバックアップ方法は色々とあると思いますが、比較的お手軽にできる方法を一つご紹介。
考え方は、
① docker でコンテナ起動時にホストのディレクトリをボリュームマウントしておく
② ホスト側で、docker exec する .sh ファイルを用意する
③ ホスト側で cron で定期的に .sh を実行する
となります。
① docker でコンテナ起動時にボリュームマウント
docker-compose.yml は以下のようなイメージ。
volumes で コンテナ内の /backup を ホストの /home/backup と連携させています。
version: '3'
services:
db:
image: postgresxxx
environment:
- POSTGRES_USER=hoge
- POSTGRES_PASSWORD=figa
- POSTGRES_DB=data-name
user: "hogehoge"
volumes:
- /home/backup: /backup
container_name: postgres-db
:
② シェル( .sh )の作成
ホスト側に用意するシェルファイルは、以下のイメージ。
docker exec でコンテナに入り、DB の backup を実行する。ここで、ホスト側のディレクトリにバックアップされたファイルが生成される。
バックアップ後は、毎日の実行を想定して、7日より古いファイルを削除していく。
#!/bin/bash
DATE=`date "+%Y%m%d"`
# /backup はコンテナ内のパス。ホスト側は、~/backup になる
docker exec postgres-db /bin/bash -c "pg_dump -U hogehoge -h localhost -Fc data-name > /backup/db_$DATE.dump"
# 7日より古いファイルを削除
find /home/backup -type f -name "db_*.dump" -mtime +7 -exec rm -f {} \;
③ ホストで cron 設定
ホスト側で、②のシェルが毎日実行されるように cron を設定してください。
cron設定については、こちら をご確認ください。
コメント