Cara Membina Gambar Docker Menggunakan Dockerfile
- 3165
- 912
- Clay Weber
Kemahiran Docker sangat tinggi kerana, terima kasih kepada Docker
Kami boleh mengautomasikan penggunaan aplikasi yang dipanggil bekas
, mewujudkan persekitaran yang disesuaikan yang boleh direplikasi dengan mudah di mana sahaja Docker
Teknologi disokong. Dalam tutorial ini kita akan melihat cara membuat a Imej Docker
Dari awal, menggunakan a Dockerfile
. Kami akan mempelajari arahan yang paling penting yang boleh kami gunakan untuk menyesuaikan imej kami, bagaimana membina imej, dan bagaimana untuk menjalankan bekas berdasarkannya.
Dalam tutorial ini anda akan belajar:
- Cara membuat imej Docker menggunakan Dockerfile
- Beberapa arahan dockerfile yang paling kerap digunakan
- Cara mencapai kegigihan data dalam bekas
Keperluan perisian dan konvensyen yang digunakan
Kategori | Keperluan, konvensyen atau versi perisian yang digunakan |
---|---|
Sistem | OS-bebas |
Perisian | Docker |
Yang lain |
|
Konvensyen | # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak |
Imej dan bekas
Sebelum kita memulakan, mungkin berguna untuk menentukan dengan jelas apa yang kita maksudkan ketika kita bercakap imej
dan bekas
dalam konteks Docker
. Imej boleh dianggap sebagai blok bangunan dunia Docker. Mereka mewakili "cetak biru" yang digunakan untuk membuat bekas. Sesungguhnya, apabila bekas dicipta, ia mewakili contoh konkrit imej yang berdasarkannya.
Banyak bekas boleh dibuat dari gambar yang sama. Selebihnya artikel ini kita akan belajar bagaimana memberikan arahan yang diperlukan untuk membuat imej yang disesuaikan dengan keperluan kita di dalam Dockerfile
, Cara Betul Membina Imej, Dan Cara Menjalankan Bekas Berdasarkannya.
Bina gambar kita sendiri menggunakan fail docker
Untuk membina imej kita sendiri, kita akan menggunakan a Dockerfile.
Dockerfile mengandungi semua arahan yang diperlukan untuk membuat dan menyiapkan gambar. Sebaik sahaja Dockerfile kami siap, kami akan menggunakannya Docker membina
perintah untuk benar -benar membina gambar.
Perkara pertama yang harus kita lakukan ialah membuat direktori baru untuk menjadi tuan rumah projek kami. Demi tutorial ini kita akan membina imej yang mengandungi Apache
Pelayan web, jadi kami akan menamakan direktori root projek "dockerized-apache":
$ mkdir dockerized-apache
Direktori ini adalah apa yang kita panggil membina konteks
. Semasa proses membina, semua fail dan direktori yang terkandung di dalamnya, termasuk Dockerfile
Kami akan membuat, dihantar ke daemon docker supaya mereka dapat diakses dengan mudah, kecuali jika mereka disenaraikan ke dalam .DocKerignore
fail.
Mari buat kita Dockerfile
. Fail mesti dipanggil Dockerfile
dan akan mengandungi, seperti yang kita katakan di atas, semua arahan yang diperlukan untuk membuat imej dengan ciri -ciri yang dikehendaki. Kami membakar editor teks kegemaran kami dan mulakan dengan menulis arahan berikut:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "
Salinan Arahan pertama yang mesti kami sediakan adalah Dari
: dengan itu kita dapat menentukan imej yang ada yang akan kita gunakan sebagai pangkalan (ini dipanggil a imej asas
), untuk mencipta sendiri. Dalam hal ini imej asas kita akan Ubuntu
. Selain nama gambar, kami juga menggunakan tag, untuk menentukan versi imej yang ingin kami gunakan, dalam kes ini 18.10
. Sekiranya tiada tag yang dinyatakan terkini
Tag digunakan secara lalai: ini akan menyebabkan versi terkini imej asas yang akan digunakan. Sekiranya gambar belum ada di sistem kami, ia akan dimuat turun dari DockerHub.
Selepas Dari
arahan, kami menggunakan Label
. Arahan ini adalah pilihan, boleh diulang beberapa kali, dan digunakan untuk menambah metadata ke imej kami. Dalam kes ini kami menggunakannya untuk menentukan penyelenggara imej.
Arahan larian
Pada ketika ini, jika kita berlari Docker membina
, Kami hanya akan menghasilkan imej yang sama dengan asas, kecuali metadata yang kami tambah. Ini tidak akan berguna untuk kita. Kami mengatakan bahawa kami mahu "dockerize" Apache
pelayan web, jadi perkara seterusnya yang perlu dilakukan di kami Dockerfile
, adalah untuk memberikan arahan untuk memasang pelayan web sebagai sebahagian daripada imej. Arahan yang membolehkan kita menyelesaikan tugas ini adalah Jalankan
:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update & apt-get -y install Apache2
Salinan The Jalankan
Arahan digunakan untuk melaksanakan arahan di atas gambar. Satu perkara yang sangat penting untuk diingat ialah untuk setiap Jalankan
arahan yang kami gunakan, a lapisan baru dibuat dan ditambah pada timbunan. Mengenai hal ini Docker sangat pintar: Lapisan yang sudah dibina akan "di -cache": ini bermakna bahawa jika kita membina imej berdasarkan kita Dockerfile
, Dan kemudian kami memutuskan, sebagai contoh, untuk menambah yang lain Jalankan
Arahan (dan dengan itu lapisan baru) pada akhirnya, binaan tidak akan bermula dari awal, tetapi hanya akan menjalankan arahan baru.
Untuk ini berlaku, tentu saja, arahan yang telah dibina di atas Dockerfile
tidak boleh diubah suai. Malah mungkin untuk mengelakkan tingkah laku ini sepenuhnya semasa membina imej, hanya menggunakan --tidak sakit
Pilihan Docker membina
perintah.
Dalam kes kami kami menggunakan Jalankan
arahan untuk melaksanakan apt-get update & apt-get -y install Apache2
Perintah. Perhatikan bagaimana kita melewati -y
pilihan untuk apt-get pemasangan
Perintah: Pilihan ini dibuat supaya jawapan afirmatif diberikan secara automatik kepada semua pengesahan yang diperlukan oleh arahan. Ini perlu kerana kita memasang pakej yang tidak interaktif.
Mendedahkan port 80
Seperti yang kita ketahui, pelayan web Apache mendengarkan port 80
untuk sambungan standard. Kita mesti mengarahkan Docker untuk menjadikan pelabuhan itu boleh diakses di bekas. Untuk melaksanakan tugas kami menggunakan Dedahkan
berfungsi dan berikan nombor port. Atas sebab keselamatan pelabuhan yang ditentukan hanya dibuka apabila bekas dilancarkan. Mari tambahkan arahan ini kepada kami Dockerfile
:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update & & apt-get -y install Apache2 dedahkan 80
Salinan Membina imej
Pada ketika ini kita sudah dapat berusaha membina gambar kita. Dari dalam direktori akar projek kami, "dockerized-apache", kami menjalankan arahan berikut:
$ sudo docker binaan -t linuxconfig/dockerized -apache .
Mari kita periksa arahan. Pertama sekali, kami mengutamakan arahan dengan sudo, untuk menjalankannya dengan keistimewaan pentadbiran. Adalah mungkin untuk mengelakkan ini, dengan menambahkan pengguna ke Docker
kumpulan, tetapi ini mewakili risiko keselamatan. The -t
pilihan yang kami berikan, pendek untuk --tag
, Marilah kita memohon nama repositori dan secara pilihan tag pada imej kita jika binaan berjaya.
Akhirnya, .
mengarahkan Docker untuk mencari Dockerfile
Dalam direktori semasa. Sebaik sahaja kami melancarkan arahan, proses binaan akan bermula. Perkembangan dan membina mesej akan dipaparkan di skrin:
Menghantar Konteks Membina ke Docker Daemon 2.048 KB Langkah 1/4: Dari Ubuntu: 18.10 cuba menarik Docker repositori.io/perpustakaan/ubuntu .. . [… .]
Salinan Dalam beberapa minit imej kita mesti dibuat dengan jayanya. Untuk mengesahkannya, kita boleh menjalankan Imej Docker
Perintah, yang mengembalikan senarai semua imej yang ada di repositori Docker tempatan kami:
$ sudo docker imej repositori tag imej ID dicipta saiz linuxconfig/dockerized-apache terbaru 7ab7b6873614 2 minit yang lalu 191 mb
Salinan Seperti yang dijangkakan gambar muncul dalam senarai. Seperti yang dapat kita perhatikan, kerana kita tidak memberikan tag (hanya nama repositori, linuxconfig/dockerized-apache
) terkini
Tag telah digunakan secara automatik untuk gambar kami. An ID
telah juga diberikan kepada IT, 7AB7B6873614
: kita boleh menggunakannya untuk merujuk imej dalam arahan masa depan.
Melancarkan bekas berdasarkan gambar
Sekarang gambar kami sudah siap, kami boleh membuat dan melancarkan a bekas
berdasarkannya. Untuk melaksanakan tugas kami menggunakan Docker Run
Perintah:
$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apache apachectl -d foreground
Mari kita periksa arahan di atas. Pilihan pertama yang kami berikan ialah --nama
: Dengan itu, kami menentukan nama untuk bekas, dalam kes ini "Linuxconfig-Apache". Sekiranya kami menghilangkan pilihan ini, nama yang dihasilkan secara rawak akan diberikan kepada bekas kami.
The -d
pilihan (pendek untuk --tanggalkan
) menyebabkan bekas berjalan di latar belakang.
The -p
pilihan, pendek untuk --menerbitkan
, diperlukan untuk menerbitkan port kontena (atau pelbagai port) ke sistem tuan rumah. Sintaks pilihan adalah seperti berikut:
-p localhost_port: container_port
Dalam kes ini kami menerbitkan port 80
Kami sebelum ini terdedah di dalam bekas, ke tuan rumah pelabuhan 8080
. Demi kesempurnaan kita mesti mengatakan bahawa ia juga mungkin untuk menggunakan -P
pilihan (pendek untuk --menerbitkan-semua
) sebaliknya, menyebabkan semua pelabuhan terdedah di dalam bekas rawak
pelabuhan di tuan rumah.
Dua perkara terakhir yang kami tentukan dalam arahan di atas, adalah: gambar
bekas harus berdasarkan, dan perintah
untuk dijalankan ketika bekas dimulakan, yang merupakan pilihan. Gambar tentu saja linuxconfig/dockerized-apache
, yang kami bina sebelum ini.
Perintah yang kami tentukan adalah Apachectl -d latar depan
. Dengan arahan ini Apache
Pelayan web dilancarkan di latar depan
Mod: Ini adalah wajib untuk bekerja di bekas. The Docker Run
Perintah menjalankan arahan yang ditentukan pada a baru
bekas:
$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apachectl -d foreground a51fc9a6dd66b02117f00235A341003A9BF0F0F90A0A0B10F90
Salinan Berapakah nombor yang dicetak di skrin? Ia adalah ID
dari bekas! Sebaik sahaja kita mempunyai bekas dan berjalan, kita sepatutnya dapat mengakses halaman yang disampaikan oleh lalai Apache
Virtualhost di Localhost: 8080
alamat (port 8080
di tuan rumah dipetakan di pelabuhan 80
di bekas):
Indeks Apache lalai.Halaman HTML
Persediaan kami berfungsi dengan betul. Sekiranya kita menjalankan Docker PS
Perintah, yang menyenaraikan semua bekas aktif dalam sistem, kita boleh mendapatkan maklumat mengenai bekas kami: id (versi pendek, lebih mudah untuk merujuk membentuk baris arahan untuk manusia), imej yang dikendalikannya, perintah yang digunakan, penciptaannya masa dan status semasa, pemetaan dan nama pelabuhan.
$ sudo docker ps container id image command created status port names a51fc9a6dd66 linuxconfig/dockerized -apache "apachectl -d fore ..." 28 saat yang lalu sehingga 28 saat 0.0.0.0: 8080-> 80/TCP linuxconfig-apache
Salinan Untuk menghentikannya bekas yang perlu kita lakukan adalah merujuknya dengan id atau namanya, dan jalankan Docker berhenti
perintah. Sebagai contoh:
$ sudo docker stop linuxconfig-apache
Untuk memulakannya lagi:
$ sudo docker mula linuxconfig-apache
Jalankan arahan secara langsung melalui Dockerfile
Sejak di sini kami membina imej asas, dan pada masa runtime, menggunakan Docker Run
perintah, kami menetapkan arahan yang akan dilancarkan apabila bekas dimulakan. Kadang -kadang kita mahu menentukan yang terakhir terus di dalam fail docker. Kita boleh melakukannya dalam dua cara: menggunakan Cmd
atau Entrypoint
.
Kedua -dua arahan boleh digunakan untuk tujuan yang sama tetapi mereka berkelakuan berbeza apabila arahan juga ditentukan dari baris arahan. Mari kita lihat bagaimana.
Arahan CMD
The Cmd
Arahan pada dasarnya boleh digunakan dalam dua bentuk. Yang pertama adalah EXEC
Bentuk:
CMD ["/usr/sbin/apachectl", "-d", "latar depan"]
Yang lain adalah shell
Bentuk:
CMD/USR/SBIN/APACHECTL -D FOREGREAT
The EXEC
dari biasanya lebih disukai. Perlu diperhatikan bahawa apabila menggunakan borang EXEC, shell tidak dipanggil, oleh itu pengembangan berubah -ubah tidak akan berlaku. Sekiranya pengembangan berubah diperlukan, kita boleh menggunakan shell
bentuk atau kita boleh menggunakan cangkang secara langsung di EXEC
mod, sebagai:
Cmd ["sh", "-c", "echo", "$ home"]
The Cmd
Arahan boleh ditentukan hanya sekali di Dockerfile
. Jika berbilang Cmd
pilihan disediakan, hanya yang terakhir akan berkuat kuasa. Tujuan arahan adalah untuk menyediakan a lalai
Perintah yang akan dilancarkan apabila bekas bermula:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update & & apt-get -y install Apache2 dedahkan 80 cmd ["/usr/sbin/apachectl "," -d "," latar depan "]
Salinan Arahan yang ditentukan dengan Cmd
di dalam Dockerfile
, berfungsi sebagai lalai, dan akan ditindih jika arahan lain ditentukan dari baris arahan semasa melaksanakan Docker Run
.
Arahan entrypoint
The Entrypoint
arahan juga boleh digunakan untuk mengkonfigurasi arahan untuk digunakan apabila bekas dimulakan, dan suka Cmd
, kedua -dua EXEC
dan shell
bentuk boleh digunakan dengannya. Perbezaan besar antara keduanya adalah bahawa arahan yang diluluskan dari baris arahan tidak akan mengatasi yang ditentukan Entrypoint
: Sebaliknya ia akan menjadi dilampirkan kepadanya.
Dengan menggunakan arahan ini, kami dapat menentukan arahan asas dan mengubahnya dengan pilihan yang kami sediakan semasa menjalankan Docker-Run
perintah, menjadikan bekas kita berkelakuan seperti boleh dilaksanakan. Mari lihat contoh dengan kita Dockerfile
:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update & & apt-get -y install Apache2 dedahkan 80 entrypoint ["/usr/sbin/apachectl "]
Salinan Dalam kes ini kita menggantikannya Cmd
arahan dengan Entrypoint
dan juga mengeluarkan -D Foreground
Pilihan dari format EXEC. Katakan kita sekarang membina semula imej, dan mencipta bekas menggunakan arahan berikut:
$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apache -d foreground
Apabila bekas bermula, -D Foreground
Argumen dilampirkan kepada arahan yang disediakan di Dockerfile
dengan Entrypoint
arahan, tetapi hanya jika menggunakan EXEC
bentuk. Ini dapat disahkan dengan menjalankan Docker PS
Perintah (di sini kami menambah beberapa pilihan kepada arahan, untuk memaparkan dan memformat outputnya dengan lebih baik, hanya memilih maklumat yang kami perlukan):
$ sudo docker ps --no-trunc --format ".Nama \ t .Perintah "Linuxconfig -APache"/usr/sbin/Apachectl -d foreground "
Salinan Seperti Cmd
, The Entrypoint
Arahan boleh disediakan hanya satu masa. Sekiranya ia kelihatan berbilang masa di Dockerfile, hanya kejadian terakhir yang akan dipertimbangkan. Adalah mungkin untuk mengatasi lalai Entrypoint
gambar dari baris arahan, dengan menggunakan --entrypoint
Pilihan Docker Run
perintah.
Menggabungkan CMD dan EntryPoint
Sekarang kita tahu keunikan Cmd
dan Entrypoint
Arahan Kami juga boleh menggabungkannya. Apa yang dapat kita peroleh dengan melakukannya? Kita boleh guna Entrypoint
untuk menentukan arahan asas yang sah, dan Cmd
Arahan untuk menentukan parameter lalai untuknya.
Perintah itu akan dijalankan dengan parameter lalai secara lalai, melainkan jika kita mengatasi mereka dari baris arahan semasa berjalan Docker Run
. Melekat pada kami Dockerfile
, kita boleh menulis:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update & & apt-get -y install Apache2 dedahkan 80 entrypoint ["/usr/sbin/apachectl "] cmd [" -d "," foreground "]
Salinan Sekiranya kita membina semula gambar dari ini Dockerfile
, keluarkan bekas sebelumnya yang kami buat, dan melancarkan semula Docker Run
perintah tanpa menentukan sebarang hujah tambahan, /usr/bin/apachectl -d latar depan
Perintah akan dilaksanakan. Sekiranya kita memberikan beberapa hujah, mereka akan menimpa mereka yang dinyatakan dalam Dockerfile
dengan Cmd
arahan. Sebagai contoh, jika kita menjalankan:
$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apache -x
Arahan yang akan dilaksanakan ketika memulakan bekas /usr/bin/apachectl -x
. Mari sahkan:
$ sudo docker ps --no-trunc --format ".Nama \ t .Perintah "linuxconfig -apache"/usr/sbin/apachectl -x "
Salinan Perintah yang dilancarkan, seperti yang diharapkan: -X
pilihan, dengan cara, membuat supaya daemon httpd dilancarkan mod debug
.
Menyalin fail ke dalam bekas
Pelayan Apache "Dockerized" kami berfungsi. Seperti yang kita lihat, jika kita menavigasi ke Localhost: 8080
, Kami memvisualisasikan halaman selamat datang Apache lalai. Sekarang, katakan kami mempunyai laman web yang siap dihantar dengan bekas, bagaimana kami dapat "memuatkan" itu supaya Apache akan melayani?
Nah, demi tutorial ini, kami hanya akan mengganti indeks lalai.Fail HTML. Untuk melaksanakan tugas kita boleh menggunakan SALINAN
arahan. Katakan kita mempunyai indeks alternatif.Fail HTML di dalam akar projek kami (konteks binaan kami) dengan kandungan ini:
Helo!
Fail ini telah disalin ke dalam bekas dengan arahan salinan!
Salinan Kami mahu memuatkannya dan menyalinnya ke /var/www/html
direktori di dalam bekas, oleh itu di dalam kami Dockerfile
Kami menambah SALINAN
Arahan:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update &&p-get -y Pasang apache2 dedahkan 80 entrypoint ["/usr/sbin/Apachectl "] cmd [" -d "," foreground "].html/var/www/html/indeks.html
Salinan Kami membina semula imej dan bekas. Sekiranya sekarang menavigasi ke Localhost: 8080
, Kami akan melihat mesej baru:
# mesej baru
The SALINAN
Arahan boleh digunakan untuk menyalin kedua -dua fail dan direktori. Apabila jalan destinasi tidak wujud, ia dibuat di dalam bekas. Semua fail dan direktori baru dibuat dengan Uid
dan Gid
dari 0
.
Penyelesaian yang lain untuk menyalin fail di dalam bekas adalah menggunakan TAMBAH
arahan, yang lebih kuat daripada SALINAN
. Dengan arahan ini kita boleh menyalin fail, direktori tetapi juga URL
. Di samping itu, jika kita menyalin tempatan Arkib tar
Dengan format termampat yang diiktiraf, ia akan secara automatik tidak dikompresi dan disalin sebagai direktori di dalam bekas.
Strategi yang ideal adalah menggunakan SALINAN
Kecuali ciri tambahan yang disediakan oleh TAMBAH
sangat diperlukan.
Membuat kelantangan
Dalam contoh sebelumnya, untuk menunjukkan bagaimana SALINAN
Arahan berfungsi, kami menggantikan indeks lalai.HTML Fail Apache Virtualhost lalai di dalam bekas.
Jika kita berhenti dan memulakan bekas, kita masih akan mencari pengubahsuaian yang kita buat, tetapi jika bekas atas sebab tertentu dikeluarkan, semua data yang terkandung pada lapisan yang boleh ditulis akan hilang dengannya. Cara menyelesaikan masalah ini? Satu pendekatan adalah menggunakan Kelantangan
Arahan:
Dari Ubuntu: 18.10 Label Penyelenggara = "[email protected] "run apt-get update &&p-get -y Pasang apache2 dedahkan 80 entrypoint ["/usr/sbin/Apachectl "] cmd [" -d "," foreground "].html/var/www/html/indeks.HTML VOLUME/VAR/WWW/HTML
Salinan The Kelantangan
Arahan mengambil satu atau lebih direktori (dalam kes ini /var/www/html
) dan menyebabkan mereka digunakan sebagai titik gunung untuk jumlah luaran yang dinamakan secara rawak yang dihasilkan apabila bekas dibuat.
Dengan cara ini, data yang kami masukkan ke dalam direktori yang digunakan sebagai titik gunung akan berterusan di dalam jumlah yang dipasang dan masih akan wujud walaupun bekas dimusnahkan. Sekiranya direktori ditetapkan untuk digunakan sebagai titik gunung sudah mengandungi data pada masa permulaan, data tersebut disalin di dalam kelantangan yang dipasang di atasnya.
Mari membina semula gambar dan bekas. Sekarang kita dapat mengesahkan bahawa jumlahnya telah dibuat dan digunakan dengan memeriksa bekas:
$ sudo docker periksa linuxconfig-apache [.. .] "Mounts": [ "Type": "volume", "Name": "8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61", "Source": "/var/lib/docker/volumes/8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61/_data", "Destination": "/var/ www/html "," pemandu ":" tempatan "," mod ":" "," rw ": benar," penyebaran ":" "], [.. .]
Salinan Seperti yang telah dikatakan, jumlahnya akan bertahan walaupun selepas bekas dimusnahkan sehingga data kami tidak akan hilang.
The Kelantangan
arahan di dalam DockeFile
, Seperti yang dapat kita lihat dari output perintah periksa docker di atas, menjadikan jumlah yang dinamakan secara rawak dibuat. Untuk menentukan a Volume bernama
, atau melancarkan jumlah yang sudah ada di dalam bekas, kita mesti menentukannya semasa runtime, ketika menjalankan Docker Run
perintah, menggunakan -v
pilihan (pendek untuk --kelantangan
). Mari lihat contoh:
$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 -v myvolume:/var/www/html linuxconfig/dockerized -apache
Dalam perintah di atas, kami menggunakan -v
pilihan yang menentukan Nama kelantangan
(sangat penting: perhatikan bahawa ia bukan jalan, tetapi nama mudah) dan Mountpoint
Di dalam bekas menggunakan sintaks berikut:
:
Apabila kita melakukan perintah sedemikian, jumlah yang dinamakan "myvolume" akan dipasang di laluan tertentu di dalam bekas (jumlahnya akan dibuat jika tidak ada). Seperti yang kita katakan sebelum ini, jika jumlahnya kosong, data yang sudah ada di Gunung Mount di dalam bekas akan disalin di dalamnya. Menggunakan Docker Volume LS
Perintah, kami dapat mengesahkan jumlah dengan nama yang kami tentukan telah dibuat:
$ sudo docker volume ls nama volume pemacu myvolume tempatan
Salinan Untuk mengeluarkan kelantangan yang kami gunakan Docker Volume RM
perintah, dan berikan nama kelantangan untuk dibuang. Docker, bagaimanapun, tidak akan membiarkan kita mengeluarkan jumlah yang digunakan oleh bekas aktif:
$ $ sudo docker volume rm myvolume Response ralat dari daemon: tidak dapat mengeluarkan isipadu, isipadu yang masih digunakan: keluarkan myVolume: volume sedang digunakan - [95381B7B6003F6165DFE2E1912D2F827F7167AC26E2CF26CAB704A2
Salinan Satu lagi pendekatan untuk ketahanan data, terutamanya berguna semasa pembangunan, adalah untuk Bind-mount
direktori tuan rumah di dalam bekas. Pendekatan ini mempunyai kelebihan membiarkan kami bekerja pada kod kami secara tempatan dengan alat kegemaran kami dan melihat kesan perubahan yang segera dicerminkan di dalam bekas, tetapi mempunyai kelemahan yang besar: bekas menjadi bergantung kepada struktur direktori tuan rumah.
Atas sebab ini, kerana mudah alih adalah salah satu sasaran utama Docker, tidak mungkin untuk menentukan a Bind-mount
Di dalam Dockerfile, tetapi hanya pada waktu runtime. Untuk melaksanakan tugas ini, kami menggunakan -v
pilihan Docker Run
perintah sekali lagi, tetapi kali ini kami menyediakan jalan
direktori di dalam sistem fail tuan rumah dan bukannya nama kelantangan:
$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 -v/path/on/host:/var/www/html linuxconfig/dockerized -apache
Semasa melancarkan arahan di atas, Direktori/Path/On/Host host akan dipasang pada/var/www/html di dalam bekas. Sekiranya direktori pada tuan rumah tidak wujud, ia dibuat secara automatik. Dalam kes ini data dalam direktori Mountpoint di dalam bekas (/var/www/html dalam contoh kami) adalah tidak disalin ke direktori tuan rumah yang dipasang di atasnya, kerana ia berlaku untuk jumlahnya.
Kesimpulan
Dalam tutorial ini, kami mempelajari konsep asas yang diperlukan untuk membuat dan membina imej docker menggunakan Dockerfile
dan cara menjalankan bekas berdasarkannya. Kami membina imej yang sangat mudah yang membolehkan kami menjalankan versi "dockerized" dari pelayan web Apache. Dalam proses itu, kita melihat cara menggunakan Dari
arahan, yang wajib untuk menentukan imej asas untuk berfungsi, Label
arahan untuk menambah metadata ke imej kami, Dedahkan
Arahan untuk mengisytiharkan pelabuhan akan didedahkan di dalam bekas. Kami juga belajar bagaimana memetakan port tersebut ke port sistem tuan rumah.
Kami belajar bagaimana menggunakanJalankan
arahan untuk menjalankan arahan pada imej, dan kami belajar bagaimana untuk menentukan arahan yang akan dilaksanakan apabila bekas dimulakan dari garis arahan dan di dalamnya Dockerfile
. Kami melihat bagaimana untuk mencapai ini dengan menggunakan Cmd
dan Entrypoint
arahan, dan apakah perbezaan antara kedua -dua. Akhirnya, kita melihat bagaimana SALINAN
data di dalam bekas, dan bagaimana untuk mencapai kegigihan data menggunakan jumlah. Dalam contoh kami, kami hanya membincangkan subset kecil arahan yang boleh digunakan dalam a Dockerfile
.
Untuk senarai yang lengkap dan terperinci, sila rujuk dokumentasi Docker rasmi. Sementara itu, jika anda ingin tahu bagaimana membina keseluruhan Lampu
Stack Menggunakan Docker dan Alat Kompos Docker, anda boleh melihat artikel kami tentang cara membuat timbunan lampu berasaskan docker menggunakan docker-compose pada Ubuntu 18.04 Bionic Beaver Linux.
Tutorial Linux Berkaitan:
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Perkara yang hendak dipasang di Ubuntu 20.04
- Cara Gunung ISO di Linux
- Cara membuat sandaran sistem tambahan dengan timeshift pada ..
- Kubernet vs docker, apa perbezaannya?
- Cara mengubah saiz gambar cakera qcow2 di linux
- Cara membuat timbunan lampu berasaskan Docker menggunakan Docker pada ..
- Menguasai Gelung Skrip Bash
- Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
- « Pengenalan kepada Grep dan Ekspresi Biasa
- Cara memulihkan fail yang dipadam dengan yang paling utama di linux »