質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

9720閲覧

docker永続化について

chiku_

総合スコア1464

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

2クリップ

投稿2016/01/01 02:11

Dockerですが、下記のように永続化という表現が出てきます。
Docker でデータのポータビリティをあげ永続化しよう

Dockerコンテナの再起動を行っても、コンテナ内のデータが失われるような事はないように思われます。
Dockerコンテナでなにかデータが失われるようなケースがあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

再起動ではなく、コンテナのバージョンアップ時に威力を発揮するかと思います。

例えばMySQL等のデータベースもコンテナ内にデータディレクトリを設定してファイルを保存していく為、
セキュリティホール修正や、バグフィックスでバージョン上げる時に
何も考えずにコンテナを交換すると全情報が飛びます。

こういったコンテナ内にファイルを作って参照するコンテナは上記のように永続化すると良いと思います。

投稿2016/01/01 03:59

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chiku_

2016/01/01 07:52

回答ありがとうございます。 確かに本番運用する際は永続化しておいた方が、後々でよさそうですね。
guest

0

ベストアンサー

docker run した時のimage以降の更新(ログや、データベースの中身)などは、-v オプションでローカルディスク等に永続化しておかないと、基本消えてなくなります。
docker commit して、image化しておけば、commitした時点のimageは残りますが、disk i/o が発生するたびにcommitもしてられません。

ただ、永続化を-vでするということは、ホストに依存する=可搬性が失われるという事で、仮想化のメリットが損なわれます。そこでアンバサダー方式など工夫を凝らした方式が出てきていますが、規模に応じた選択を迫られることになると思います。

SoftWareDesign2015年12月号が、お安く手っ取り早く情報を仕入れられるのではないかと思います。

投稿2016/01/01 06:29

編集2016/01/01 18:49
Ken.sakanakana

総合スコア1768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chiku_

2016/01/01 07:45

> docker run した時のimage以降の更新(ログや、データベースの中身)などは、-v オプションでローカルディスク等に永続化しておかないと、基本消えてなくなります。 docker runすると新規でコンテナ作成されるので前回使用していたコンテナの保存情報が失われるのは分かります。 ただ前回使用していたコンテナを再度docker startしてやれば前回保存していた情報はそのまま保存されているように思われます。 ここが分からないのですが、コンテナ自体の永続化がされないようなdockerの仕組みがなにかあるのかと思い、質問させてもらっています。 オンメモリに保存情報が保持されている訳ではないので、コンテナを使い回せばデータ自体は保持されるのではないかという認識なのですが。。
Ken.sakanakana

2016/01/01 19:00

dockerをお使いの環境や目的はサーバ1台に複数コンテナを起動するような開発目的の使い方ですか?その場合であれば、dockerデーモンがimageからの更新差分がメモリ上ではなく、当該ホストOS上のディスクに残っており、ホストOSを再起動してもstop状態で停止時点から開始できる状態となっています。そして、rmするまで存在し続けるようですので、利用上の不便はないかもしれません。 ただ、dockerデーモンのバージョンアップで一時ファイルの互換性がなくなった場合、一度rmしなければならなくなれば、消滅します。その際は、事前にstop & commitすればよいのかもしれませんが。 もし、複数のホストOS上にまたがる冗長化や、停止できないサービスを運用されるという場合ですが、dockerをサービス用として運用で利用しようと考えた場合、1つのOSを大事に育て、個性豊かなサーバを運用していくという思想ではなく、オートメーション化された個性の無い均一なサーバとして大量生産する=dockerデーモン上で更新される個性は不要で、そのようなデータは局所化したいという発想=永続化という流れから来るものです。 サーバ個性の変更はせず、新しいコンテナのひな形の作成・動作検証・リリース(それもchefやansible等の自動化ツールで)という流れです。 このあたりの発想というか考え方については一度書籍等で確認されるのが良いと思います。ただ開発等でLinuxコンテナとして利用したいだけの場合は不要な知識となります・・・ 例えば以下の資料は興味深いです。 http://www.slideshare.net/zembutsu/automation-myth-we-can-advance 考え方のキーワード「Immutable Infrastructure」 SoftwareDesign2014年11月号
chiku_

2016/01/02 02:09

回答ありがとうございます。 dockerは現状、開発環境でのみ使用しています。 > dockerデーモンのバージョンアップで一時ファイルの互換性がなくなった場合、一度rmしなければならなくなれば、消滅します。 なるほど、そのようなケースで消滅するのですね。 永続化とは言葉そのままに捉えるのではなく、インフラを抽象化をした場合の実ファイルやデータなどの永続化、と捉えればいいという事でしょうか。 参考資料の情報などもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問