[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
質問
Dockerコンテナの永続的なストレージはどのように扱われていますか?
私は現在この方法をとっています。例えばPostgreSQL用のイメージを構築し、コンテナを起動する際に
docker run --volumes-from c0dbc34fd631 -d app_name/postgres
IMHOでは、コンテナ "c0dbc34fd631" を(誤って)削除してはいけないという欠点があります。
もう一つのアイデアは、ホスト・ボリュームをコンテナにマウントすることです。 ユーザーID と一致するとは限りません。 ユーザーID を実行すると、パーミッションがめちゃくちゃになる可能性があります。
注意:
--volumes-from 'cryptic_id'
を使用することもできます。
--volumes-from my-data-container
ここで
my-data-container
は、データのみのコンテナに割り当てた名前です。
docker run --name my-data-container ...
(受理済み回答参照)
どのように解決するのですか?
Docker 1.9.0以上
使用方法 ボリュームAPI
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
つまり、データ専用のコンテナ・パターンを捨てて、新しいボリュームを採用しなければならないのです。
実はボリュームAPIは、データコンテナ・パターンを実現するためのより良い方法に過ぎないのです。
でコンテナを作成すると
-v volume_name:/container/fs/path
Dockerは、自動的にそのようなことができる名前付きボリュームを作成します。
-
を通して一覧表示されます。
docker volume ls
-
を通じて識別される。
docker volume inspect volume_name
- 通常のディレクトリとしてバックアップされる
-
を経由して従来通りバックアップ。
--volumes-from
接続
新しいボリューム API には、ダングリングボリュームを特定するための便利なコマンドが追加されています。
docker volume ls -f dangling=true
そして、その名前を通して削除します。
docker volume rm <volume name>
コメントで@mpugachが強調しているように、素敵なワンライナーですべてのダングリングボリュームを取り除くことができます。
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のドキュメントに、DEFINITIVEの記述が追加されました。 コンテナをボリューム/秒 のパターンがあります。
Docker 1.8.x以下でのバックアップ・リストア手順は以下の通りです。
BACKUPを行います。
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 ファイルを作成します。
RESTOREを行います。
# 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
ここで、素敵な ブライアン・ゴフ氏による記事 コンテナとデータコンテナに同じ画像を使用することが良い理由を説明しています。
関連
-
[解決済み] docker ERROR: 不明なブロブ
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Docker共有ボリュームのパーミッションを管理する(最良の)方法は何ですか?
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み】Dockerコンテナのディスク使用量を分析する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ドッカーコンテナがすぐに終了してしまう理由
-
[解決済み] ansibleでdocker-composeのコマンドを実行するには?
-
[解決済み] DockerでPillowを使用する
-
httpコード中にdocker registry apiのインタラクションを呼び出す コード詳細
-
エラー:入力デバイスはTTYではありません。
-
DockerのインストールとRocketMQの利用について
-
docker base container in bash: sudo: command not found 問題が解決されました。
-
UbuntuでDockerインストールしたgogsは、サービスを時々再起動するとアクセスできなくなります。
-
Docker pullでマニフェスト不明エラーが発生する
-
[解決済み] Docker共有ボリュームのパーミッションを管理する(最良の)方法は何ですか?