Konteynerdən dump çıxarmaq və onu ana maşınında saxlamaq necə mümkündür?
sobes.tech Süni İntellekt
AI-dan cavab
Containerdən dump çıxarmaq və onu host maşınında saxlamaq üçün müxtəlif yanaşmalar istifadə oluna bilər, dump növündən (məsələn, verilənlər bazası, yaddaş) asılı olaraq.
1. docker exec və çıxışın yönləndirilməsi istifadə edərək:
Bu metod, konteyner daxilində standart çıxışa dump yaradan bir komanda varsa uyğundur.
// <container_adı> yerinə konteynerinizin adı və ya ID-sini,
// <dump_komandası> yerinə dump-u yaradan əmri (məsələn, pg_dump, mysqldump),
// və <host_yolu> yerinə faylı saxlamaq istədiyiniz yolu yazın.
docker exec <container_adı> <dump_komandası> > <host_yolu>/dump.sql
PostgreSQL nümunəsi:
// 'mydatabase' verilənlər bazasının dump-un 'my-postgres-container' konteynerindən çıxarılması
// və hostda /tmp/postgres_dump.sql faylına saxlanması.
docker exec my-postgres-container pg_dump -U myuser mydatabase > /tmp/postgres_dump.sql
MySQL nümunəsi:
// 'mydatabase' verilənlər bazasının dump-un 'my-mysql-container' konteynerindən çıxarılması
// və hostda /tmp/mysql_dump.sql faylına saxlanması.
docker exec my-mysql-container mysqldump -u myuser -p mydatabase > /tmp/mysql_dump.sql
2. docker cp istifadə edərək:
Bu metod, dump-u konteyner daxilində müvəqqəti faylda saxlamaq və sonra bu faylı hosta köçürmək mümkündürsə uyğundur.
// <container_adı> yerinə konteynerinizin adı və ya ID-sini,
// <konteynerdə_yol> yerinə müvəqqəti dump faylının yaradıldığı yolu,
// və <host_yolu> yerinə faylı saxlamaq istədiyiniz yolu yazın.
// Addım 1: Dump-u konteyner daxilində müvəqqəti fayla yaradın
docker exec <container_adı> <dump_komandası> <konteynerdə_yol>/temp_dump.sql
// Addım 2: Faylı hosta köçürün
docker cp <container_adı>:<konteynerdə_yol>/temp_dump.sql <host_yolu>/dump.sql
// Addım 3: (İstəyə bağlı) Müvəqqəti faylı konteynerdə silin
docker exec <container_adı> rm <konteynerdə_yol>/temp_dump.sql
PostgreSQL nümunəsi:
// 1-ci addım: 'mydatabase' verilənlər bazasının dump-unü /tmp/temp_dump.sql faylına konteynerdə 'my-postgres-container' daxilində yaradın
docker exec my-postgres-container pg_dump -U myuser mydatabase > /tmp/temp_dump.sql
// 2-ci addım: Faylı konteynerdən hosta köçürün
docker cp my-postgres-container:/tmp/temp_dump.sql /tmp/postgres_dump.sql
// 3-cü addım: Müvəqqəti faylı silin
docker exec my-postgres-container rm /tmp/temp_dump.sql
3. Volumes istifadə etmək:
Daha çox tövsiyə olunan və rahat olan metod, Docker Volumes istifadə etməkdir. Birbaşa hostdakı qovluğu konteynerə montaj edə və dump-ləri birbaşa bu qovluqda saxlaya bilərsiniz.
// Volume montajı ilə Docker Compose nümunəsi
services:
mydb:
image: my-database-image
volumes:
- ./dumps:/app/dumps // hostdakı 'dumps' qovluğunu konteynerdə '/app/dumps' kimi montaj edir
# ... digər konfiqurasiyalar
Konteyner daxilində, dump yaratma əmri bu montaj olunmuş qovluqda (bu nümunədə /app/dumps) faylı saxlamalıdır. Fayllar avtomatik olaraq hostda ./dumps qovluğunda mövcud olacaq.
4. Yaddaş dump-u:
Konteynerin yaddaş dump-unu almaq üçün, host əməliyyat sisteminin əmrlərindən və ya coredumpctl (systemd olan sistemlərdə) və ya gcore kimi ixtisaslaşmış alətlərdən istifadə edə bilərsiniz. Bu metodlardan istifadə etməzdən əvvəl, konteynerdə coredump yaradılmasının aktivləşdirildiyinə və resurs limitlərinin düzgün qurulduğuna əmin olun.
// PID 123 olan prosesdən coredump alma nümunəsi
// Hostda uyğun hüquqlar və konteynerdə konfiqurasiya tələb edir
sudo gcore -o /tmp/coredump 123
Yaddaş dump-unun çıxarılması daha mürəkkəb və konteyner daxilindəki proseslər və host əməliyyat sisteminin konfiqurasiyası haqqında dərin biliklər tələb edir.
Metod seçimi, konkret tapşırığa, dump növünə və üstünlüklərinizə bağlıdır. Məlumat bazalarının müntəzəm dump-u üçün Volumes istifadə etmək ən çevik və etibarlı yanaşmadır. Bir dəfəlik çıxarış və ya debugging üçün isə docker exec və docker cp də effektiv variantlardır.