Docker で永続ストレージ (データベースなど) を扱う方法 質問する

Docker で永続ストレージ (データベースなど) を扱う方法 質問する

Docker コンテナの永続ストレージはどのように扱われるのでしょうか?

私は現在、このアプローチを使用しています。例えばPostgreSQL用のイメージをビルドし、コンテナを起動します。

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

私の意見では、これには欠点があり、コンテナ「c0dbc34fd631」を(誤って)削除してはならないということです。

もう 1 つのアイデアは、ホスト ボリュームを "-v" でコンテナーにマウントすることですが、コンテナー内のユーザー ID は必ずしもホストのユーザー IDと一致するとは限らず、アクセス許可が混乱する可能性があります。

注: の代わりに、データのみのコンテナに割り当てた名前を使用することもできます。例: (--volumes-from 'cryptic_id'承認された回答を参照)--volumes-from my-data-containermy-data-containerdocker run --name my-data-container ...

ベストアンサー1

Docker 1.9.0 以上

使用ボリュームAPI

docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command

つまり、データのみのコンテナ パターンを放棄し、新しいボリュームを採用する必要があります。

実際、ボリューム API は、データ コンテナー パターンを実現するためのより優れた方法にすぎません。

Dockerを使用してコンテナを作成すると、-v volume_name:/container/fs/path次のことができる名前付きボリュームが自動的に作成されます。

  1. リストに掲載されるdocker volume ls
  2. を通じて識別されるdocker volume inspect volume_name
  3. 通常のディレクトリとしてバックアップ
  4. --volumes-from接続を介して以前と同じようにバックアップ

新しいボリューム API には、未解決のボリュームを識別できる便利なコマンドが追加されています。

docker volume ls -f dangling=true

次に、名前を使用して削除します。

docker volume rm <volume name>

@mpugach がコメントで強調しているように、1 行の便利なコードで、ぶら下がっているボリュームをすべて取り除くことができます。

docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune

Docker 1.8.x 以下

実稼働環境に最適なアプローチは、データのみのコンテナを使用することです。

データのみのコンテナはベアボーン イメージ上で実行され、実際にはデータ ボリュームを公開する以外は何も行いません。

その後、他のコンテナを実行してデータ コンテナ ボリュームにアクセスできるようになります。

docker run --volumes-from data-container some-other-container command-to-execute
  • ここさまざまなコンテナをどのように配置するかをよく理解できます。
  • ここボリュームがどのように機能するかについての良い洞察が得られます。

このブログ投稿いわゆるコンテナをボリューム パターンとして適切に説明されており、データのみのコンテナを持つことの主なポイントが明確にされています。

Docker ドキュメントには、コンテナをボリューム/sパターンとして明確に説明するようになりました。

以下は、Docker 1.8.x 以下のバックアップ/復元手順です。

バックアップ:

sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • --rm: 終了時にコンテナを削除する
  • --volumes-from DATA: DATAコンテナによって共有されるボリュームに接続します
  • -v $(pwd):/backup: 現在のディレクトリをコンテナにバインドマウントします。tarファイルを書き込むには
  • busybox: 小さくてシンプルなイメージ - 素早いメンテナンスに最適
  • tar cvf /backup/backup.tar /data: /dataディレクトリ内のすべてのファイルの非圧縮tarファイルを作成します。

復元する:

# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt

ここに素敵な素晴らしいブライアン・ゴフの記事コンテナとデータ コンテナに同じイメージを使用することがなぜ良いのかを説明します。

おすすめ記事