2016-05-06 6 views

答えて

-1

DO NOTあなたのデータベースと同じイメージであなたのデータベースデータを発送してください!これは反パターンであり、ほとんど直ちに大きな問題を作り出します。 を個別にのアーカイブとして配送し、バインドマウント(-v /home/foo/db:/var/lib/mysql)でデータベースコンテナにマウントします。 docker runステートメントのバインド・マウント・ボリュームは、VOLUME Dockerfileディレクティブより優先されます。または、データベースをダンプしてコンテナに出荷し、ダンプを使用して復元するための自動化を作成します。あなたがしていることは、データベースイメージ内のデータを使ってイメージを作成するよりも優れています。なぜこれが悪い考えであるのかの例の1つだけです。現在変更されているデータ/データベースの変異体を移動する必要がある場合はどうなりますか?おそらくdocker exportを使用して、コンテナのファイルシステム全体を新しいイメージにダンプすることになります。そして今、あなたは監査が難しい大雑把なクラップを回っています。ドッカーのコンテナ(およびマイクロサービスは一般的に)ephemeralとステートレスに設計されています。つまり、コンテナを1つ用意して再作成すれば、作業を続けることができます。あなたは、あなたがデータベースイメージの中にデータのBLOBを送るなら、これを行うことはできません。

DockerfileのVOLUMEディレクティブについて:Dockerfilesはdocker buildの間に使用されるため、ホスト依存の情報や操作は含まれていないことに注意してください。したがって、VOLUME /var/lib/mysqlはあなたの画像を配布することを不可能にしていません。 that directive doesは、そのディレクトリのデータをコンテナの存続期間を超えて持続する汎用(つまり、バインドされていないマウント)データボリュームを作成します。 ではなく、docker run -v "/var/docker/app/data:/var/lib/mysql" ...などのバインドマウントボリュームと同じものがではありません。このDockerfileディレクティブは、ホスト依存の情報を指定していないため、イメージの配布を妨げません。

+1

これは、DBのデータディレクトリをレジストリからの配布が不可能にします。私はまだビルドされた画像をプッシュ&プルできることを理解していますが、その中のデータがなければ私を助けません。 – amwinter

+0

データベースディレクトリを画像の中に入れようとしていることを暗示していますか?それらの海には多くのサメの鰭があります、私の友人。 – L0j1k

+1

私は同じ問題を抱えていますが、PHPではベースイメージにはVOLUME/var/www/htmlがあり、ビルド時にこのディレクトリにアプリケーションソースを追加したいと思います。 –

1

私はこれをあきらめています - DBデータディレクトリの圧縮されたコピーを配布するほうが簡単です。より良い選択肢があれば投稿してください。

+0

将来の視聴者向けに投稿すると、**あなたのデータベースイメージの中にあなたのデータベースデータブロブを発送しません**。これは反パターンであり、すぐに問題が発生します。これを行うための「正しい」方法は、ダンプを配送してダンプで復元すること、またはここで述べたようにデータBLOBのアーカイブ/ ZIPを配送し(そしてホストからコンテナにマウントする)あなたのコンテナイメージはきれいで、監査可能です。 – L0j1k

0

私はまったく同じ問題を抱えていましたが、別のデータベース(arangodb)だけでした。

しかし、私はこの問題の直接的な解決策を見つけられませんでしたが、私のケースでは(これはmysqlでもうまくいくはずです)、データベースのデータディレクトリをDockerfileの非ボリュームディレクトリに変更しました。

今のところ、あなたのデータを含む完全なイメージを構築できるので、これは最善の解決策のようです。

関連する問題