Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

docker komit mysql tidak menyimpan

Beberapa hal terjadi di sini:

Pertama, docker commit adalah bau kode. Ini cenderung digunakan oleh mereka yang membuat gambar dengan proses manual, daripada mengotomatiskan build mereka dengan Dockerfile yang memungkinkan rekreasi yang mudah. Jika memungkinkan, saya sarankan Anda beralih ke Dockerfile untuk pembuatan gambar Anda.

Selanjutnya, sebuah docker commit tidak akan merekam perubahan yang dibuat pada volume. Dan masalah yang sama ini terjadi jika Anda mencoba memperbarui volume dengan RUN langkah dalam file Docker. Keduanya menangkap perubahan pada sistem file kontainer dan menyimpan perubahan tersebut sebagai lapisan dalam gambar buruh pelabuhan, dan volumenya bukan bagian dari sistem file kontainer. Ini juga terlihat jika Anda menjalankan docker diff terhadap sebuah wadah. Dalam hal ini, gambar upstream telah menentukan volume di Dockerfile mereka:

VOLUME /var/lib/mysql

Dan buruh pelabuhan tidak memiliki perintah untuk membatalkan volume yang dibuat dari Dockerfile. Anda perlu memodifikasi definisi gambar secara langsung dari luar buruh pelabuhan (tidak disarankan) atau membuat gambar upstream Anda sendiri dengan menghapus langkah tersebut (disarankan).

Apa yang disediakan oleh gambar mysql adalah kemampuan untuk menyuntikkan skrip pembuatan basis data Anda sendiri di /docker-entrypoint-initdb.d , yang dapat Anda tambahkan dengan gambar Anda sendiri yang memperluas mysql, atau mount sebagai volume. Di sinilah Anda akan memasukkan skema Anda, atau menginisialisasi dari cadangan yang diketahui untuk pengembangan.

Terakhir, jika tujuannya adalah untuk memiliki kegigihan, Anda harus menyimpan data Anda dalam volume, bukan dengan melakukan container:

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

Volume memungkinkan Anda untuk membuat ulang wadah, memutakhirkan ke versi mysql yang lebih baru ketika tambalan dirilis (misalnya perbaikan keamanan) tanpa kehilangan data Anda.

Untuk mencadangkan volume, ini akan diekspor ke tgz:

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

Dan untuk memulihkan volume, ini membuatnya dari tgz:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP_CONCAT dengan JOINLEFT di Zend Db Select

  2. Bagaimana saya bisa menulis fungsi yang ditentukan pengguna di MySQL sehingga ketika saya menghapus baris dari satu tabel, baris tertentu dari tabel lain juga akan dihapus?

  3. Memisahkan Datetime menjadi tanggal dan nilai waktu

  4. Bagaimana saya bisa mengatur tanggal ke NULL di Yii?

  5. kueri wordpress - dua acara berikutnya berdasarkan tanggal metadata