sql >> データベース >  >> RDS >> Mysql

dockercommitmysqlは保存されません

    ここで起こっているいくつかのこと:

    まず、docker commit コードの臭いです。これは、簡単に再作成できるDockerfileを使用してビルドを自動化するのではなく、手動プロセスでイメージを作成する場合に使用される傾向があります。可能であれば、イメージを作成するためにDockerfileに移行することをお勧めします。

    次に、docker commit ボリュームに加えられた変更はキャプチャされません。 また、RUNでボリュームを更新しようとすると、これと同じ問題が発生します。 Dockerfileにステップインします。これらは両方とも、コンテナーファイルシステムへの変更をキャプチャし、それらの変更をDockerイメージのレイヤーとして保存します。ボリュームは、コンテナーファイルシステムの一部ではありません。これは、docker diffを実行した場合にも表示されます コンテナに対して。この場合、アップストリームイメージはDockerfileでボリュームを定義しています:

    VOLUME /var/lib/mysql
    

    また、dockerには、Dockerfileから作成されたボリュームを元に戻すコマンドがありません。 Dockerの外部からイメージ定義を直接変更するか(非推奨)、そのステップを削除して独自のアップストリームイメージを構築する必要があります(推奨)。

    mysqlイメージが提供するのは、/docker-entrypoint-initdb.dに独自のデータベース作成スクリプトを挿入する機能です。 、mysqlを拡張する独自のイメージで追加したり、ボリュームとしてマウントしたりできます。ここで、スキーマを挿入するか、開発用の既知のバックアップから初期化します。

    最後に、永続性を確保することが目標である場合は、コンテナをコミットするのではなく、データをボリュームに保存する必要があります。

    docker run -v mysql-data:/var/lib/mysql \
      -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
    

    ボリュームを使用すると、データを失うことなく、コンテナを再作成し、パッチがリリースされたときにmysqlの新しいバージョンにアップグレードできます(セキュリティ修正など)。

    ボリュームをバックアップするには、これをtgzにエクスポートします:

    docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz
    

    そして、ボリュームを復元するために、これはtgzからボリュームを作成します:

    docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz
    



    1. Mysql jconnectorはcom.myql.jdbc.utils.ReadAheadInputStream.fill()で50%の時間を費やします

    2. android2.Xおよび3.XでのSQLiteOpenHelperの問題

    3. 複数のテーブルからのSQLINSERTINTO

    4. SQL Serverでの日付と時刻のデータ型間の変換(T-SQLの例)