Kaedah: 1. Gunakan arahan run, sintaksnya ialah "docker run --name test1 -it -v"; ["/data1" ,"/data2"]"; 3. Gunakan volum kongsi bekas.
Persekitaran pengendalian tutorial ini: sistem linux7.3, versi docker-1.13.1, komputer Dell G3.
Sebelum memperkenalkan arahan VOLUME, mari kita lihat keperluan senario berikut:
1 . Akhir sekali Sistem fail bekas termasuk lapisan baca sahaja dan lapisan imej yang boleh ditulis. Kegigihan data operasi proses dalam bekas disimpan pada lapisan bekas yang boleh ditulis. Setelah bekas dipadamkan, data itu hilang melainkan kami menyandarkannya secara manual (atau mencipta imej baharu berdasarkan bekas). Bolehkah data yang dikekalkan oleh proses kontena disimpan pada hos? Dengan cara ini, walaupun bekas itu dipadamkan, data masih ada.
2. Apabila kami membangunkan aplikasi web, persekitaran pembangunan adalah setempat kepada hos, tetapi persekitaran ujian berjalan diletakkan pada bekas docker.
Dalam kes ini, selepas saya mengubah suai fail (seperti html, js, dll.) pada hos, saya perlu menyegerakkannya ke bekas. Ini jelas lebih menyusahkan.
3. Berbilang bekas menjalankan satu set perkhidmatan yang berkaitan. Bagaimana jika mereka ingin berkongsi beberapa data?
Sudah tentu kita boleh memikirkan pelbagai penyelesaian kepada masalah ini. Docker sendiri menyediakan mekanisme yang boleh mengaitkan direktori pada hos dengan direktori dalam bekas (dipanggil titik pelekap, atau volum Kandungan di bawah titik pelekap pada bekas adalah hos kandungan direktori itu). mekanisme pelekap di bawah sistem Linux. Dalam kes ini, apabila kami mengubah suai kandungan direktori pada hos, kami tidak perlu menyegerakkan bekas, dan ia akan berkuat kuasa serta-merta untuk bekas. Titik lekap boleh dikongsi oleh berbilang bekas.
Mari perkenalkan mekanisme pelaksanaan khusus.
1 Jalankan arahan: docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash
Bendera -v menetapkan titik pelekap /data dalam bekas (iaitu direktori dalam bekas), dan mengaitkan kandungan direktori /home/xqh/myimage pada hos kepada /data.
Dengan cara ini, operasi pada direktori /data dalam bekas dan operasi pada /home/xqh/myimage pada hos disegerakkan sepenuhnya dalam masa nyata, kerana kedua-dua direktori ini sebenarnya menghala ke direktori hos .
2. Jalankan arahan: docker run --name test1 -it -v /data ubuntu /bin/bash
Bendera -v di atas hanya menetapkan titik pelekapan bekas dan tidak Menentukan direktori hos yang berkaitan. Pada masa ini, docker secara automatik akan mengikat direktori pada hos. Anda boleh melihatnya melalui arahan inspect docker.
xqh@ubuntu:~/myimage$ docker inspect test1 [ { "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c", ............................. "Mounts": [ { "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01", "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true } ],
Setiap maklumat di bawah Lekapan di atas merekodkan maklumat titik lekap pada bekas Nilai "Destinasi" ialah titik lekap bekas dan nilai "Sumber" ialah hos yang sepadan. direktori. Ia boleh dilihat bahawa direktori hos yang sepadan dengan kaedah ini dibuat secara automatik Tujuannya bukan untuk mengubah suai pada hos, tetapi untuk berkongsinya dengan berbilang bekas.
Titik lekap yang dicipta oleh bendera -v perintah larian docker yang diterangkan di atas hanya sah untuk bekas yang dibuat. Titik pelekap boleh dibuat dalam imej melalui arahan VOLUME fail docker, supaya semua bekas yang dibuat melalui imej akan mempunyai titik pelekap. Perbezaan lain ialah titik pelekap yang dibuat melalui arahan VOLUME tidak boleh menentukan direktori yang sepadan pada hos dan dijana secara automatik.
#test FROM ubuntu MAINTAINER hello1 VOLUME ["/data1","/data2"]
Fail dok di atas menentukan dua titik lekapan /data1 dan /data2 melalui arahan VOLUME.
Kami menggunakan pemeriksaan docker untuk melihat imej yang dihasilkan oleh fail docker ini. anda boleh melihat maklumat berikut
"Mounts": [ { "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21", "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data", "Destination": "/data1", "Driver": "local", "Mode": "", "RW": true }, { "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36", "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data", "Destination": "/data2", "Driver": "local", "Mode": "", "RW": true } ],
Anda boleh melihat maklumat dua titik lekap.
Seterusnya kami mencipta bekas lain yang boleh berkongsi jilid /data1 dan /data2 dengan test1 (bekas yang telah dibuat ini dilakukan dalam larian buruh). Gunakan teg --volumes-from, seperti:
boleh daripada cermin berbeza, seperti:
docker run --name test2 -it --volumes-from test1 ubuntu /bin/bash
, atau boleh jadi cermin yang sama, seperti:
docker run --name test3 -it --volumes-from test1 myimage /bin/bash
Tiga bekas di atas, test1, test2 dan test3, semuanya mempunyai dua direktori: /data1 dan /data2, dan kandungan dalam direktori dikongsi Jika mana-mana bekas mengubah suai kandungan, bekas lain boleh mendapatkannya ia.
Jika berbilang bekas perlu berkongsi data (seperti pangkalan data berterusan, fail konfigurasi atau fail data, dsb.), anda boleh mempertimbangkan untuk membuat bekas data tertentu. Bekas mempunyai 1 atau lebih jilid.
Bekas lain berkongsi volum bekas data ini melalui --volumes-from.
Oleh kerana volum bekas pada asasnya sepadan dengan direktori pada hos, bekas data ini tidak perlu dimulakan.
Contohnya: docker run --name dbdata myimage echo “data container”
Penjelasan: Terdapat kelantangan, perkongsian data antara bekas lebih mudah, tetapi terdapat juga banyak masalah yang perlu untuk diselesaikan, seperti Kawalan kebenaran, sandaran data, pemadaman volum, dsb. Kandungan ini akan diperkenalkan dalam artikel seterusnya.
Pembelajaran yang disyorkan: "tutorial video buruh pelabuhan"
Atas ialah kandungan terperinci Apakah kaedah pemasangan docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!