irakliの答えに基づいて構築するために、更新されたソリューションは次のとおりです。
- 新しいバージョン2のDocker作成ファイルを使用する
- 個別の
volumes
セクション - 余分な設定が削除されました
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
デモ
Postgresデータベースサーバーを起動します:
$ docker-compose up
データベース内のすべてのテーブルを表示します。別のターミナルで、コンテナのPostgresに話しかけます:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
データベースが空白であるため、何も表示されません。テーブルを作成します:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
新しく作成されたテーブルを一覧表示します:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
わーい!これで、共有ストレージボリュームを使用してPostgresデータベースを起動し、そこにいくつかのデータを保存しました。次のステップは、サーバーが停止した後、データが実際に残っていることを確認することです。
次に、Postgresサーバーコンテナを強制終了します:
$ docker-compose stop
Postgresコンテナを再度起動します:
$ docker-compose up
データベースサーバーがストレージを再利用することを期待しているため、非常に重要なデータがまだそこにあります。チェック:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
新しいスタイルのDockerComposeファイルを使用して、外部データボリュームを使用してPostgresデータベースを実行し、データの安全性と健全性が維持されていることを確認しました。
データの保存
まず、バックアップを作成し、データをホストに保存します:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
ゲストデータベースからデータをザッピングします:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
バックアップ(ホストに保存されている)をPostgresコンテナに復元します。
注: 「exec-i」を使用します。ではありません 「-it」を指定しないと、「入力デバイスはTTYではありません」というエラーが発生します。
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
テーブルを一覧表示して、復元が機能したことを確認します。
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
要約すると、データベースを起動でき、再起動後もデータが保持され、ホストからデータベースにバックアップを復元できることを確認しました。
Tomaszに感謝します!