2017-08-22 11 views
0

実行した後にMySQLドッカー(最新)&を取得しましたこのデータを追加した後にコンテナをコミットしようとしています。&新しいスキーマの&テーブルをこのmysqlドッカー・インスタンスに追加します。 >http://www.servermom.org/pull-docker-images-run-docker-containers/3225/ドッキング・コンテナ/イメージが変更を保存しない

しかし、たとえ複数のバリエーションを試した後、私はするつもり何を達成していないです - 参考のために

私は、このリンクを次のようしています。だから私は何をしている私のコンテナに新しいテーブルとスキーマを追加した後に私は& Dockerのハブにリンクで述べたようにコミットしています。

その後、私は新しいデータをコンテナに追加し、別のタグを使って新しいイメージとしてコミットしたので、最初のプルされたイメージを削除しています。最初に引っ張ったイメージを削除します。 (私がこれをやっているのは、自分のマシンを変更していると言うと、ドッカーが私のコミットされたイメージをプルするときにデータを元の状態に戻すことができるからです)

コミットすればgitのようになります。&プッシュマシンが壊れたので、新しいマシンではgit pullを実行しなければならず、私はすべての損失をせずにすべてを取得します。だから私はドッカーが変更を保存していない理由を理解できません

答えて

0

mysqlイメージのデータはボリュームに格納されています。つまり、そのボリューム内のファイルはイメージの一部ではなく、ホストに格納され、1つまたは複数の実行中のコンテナに割り当てられます。あなたは、私は2つのオプション見たいものを達成するために

:あなたはボリュームの外でのMySQLのストレージ・パスを変更(または単にボリュームせずに新しいMySQLのイメージを作成するカスタムMySQLの画像を、ビルド)

1)。 https://docs.docker.com/engine/admin/volumes/volumes/

+0

オプション-1の話私がしている:

2)カスタム実行スクリプト/エントリポイントでコンテナの起動時に画像を拡張し、スキーマの変更コマンドを含めることができ

ここでは、ボリュームに関するドキュメントページです単にdocker pull mysql:latestを使用してmysqlイメージを取得します。それに私は自分のスキーマとデータを追加しました。 – AJm

+0

あなたが[ここ](https://github.com/docker-library/mysql/blob/0590e4efd2b31ec794383f084d419dea9bc752c4/5.7/Dockerfile)(これはあなたが使用しているイメージのDockerfile)に見える場合、68行目には: 'VOLUME/var/lib/mysql'。このディレクトリは、mysqlイメージがそのデータを格納する場所です。したがって、実行中のコンテナに挿入を実行すると、変更されるコンテナ内の唯一のパスは/ var/lib/mysqlになります。これはボリュームなので、その変更はコミットしてもイメージに保存されません。これはドッカーの仕組みの一部です。 – whites11

+0

データの変更をイメージ内に残したい場合は、mysqlがデータを格納するmysql設定ファイル(実際には/ var/lib/mysqlに編集することで元のイメージをカスタマイズする必要があります。 )。このようにして、DBMSの実際のデータは、コミットするとイメージ内で永続的になります。それは今より意味があるのですか? – whites11

関連する問題