Cara Membangun Gambar Docker Menggunakan Dockerfile

Cara Membangun Gambar Docker Menggunakan Dockerfile

Keterampilan Docker sangat diminati terutama karena, berkat Buruh pelabuhan Kami dapat mengotomatiskan penyebaran aplikasi di dalam yang disebut wadah, membuat lingkungan yang disesuaikan yang dapat dengan mudah direplikasi di mana saja Buruh pelabuhan Teknologi didukung. Dalam tutorial ini kita akan melihat cara membuat a Gambar Docker dari awal, menggunakan file Dockerfile. Kami akan mempelajari instruksi paling penting yang dapat kami gunakan untuk menyesuaikan gambar kami, cara membangun gambar, dan cara menjalankan wadah berdasarkan itu.

Dalam tutorial ini Anda akan belajar:

  • Cara membuat gambar Docker menggunakan DockerFile
  • Beberapa instruksi DockerFile yang paling sering digunakan
  • Bagaimana mencapai kegigihan data dalam wadah


Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem OS-independen
Perangkat lunak Buruh pelabuhan
Lainnya
  • Daemon Docker Berlari
  • Utilitas baris perintah docker
  • Keakraban dengan antarmuka baris perintah Linux
Konvensi # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Gambar dan wadah

Sebelum kita mulai, mungkin berguna untuk mendefinisikan dengan jelas apa yang kita maksud ketika kita membicarakannya gambar-gambar Dan wadah dalam konteks Buruh pelabuhan. Gambar dapat dianggap sebagai blok bangunan dunia Docker. Mereka mewakili "cetak biru" yang digunakan untuk membuat wadah. Memang, ketika sebuah wadah dibuat, itu mewakili contoh konkret dari gambar yang didasarkannya.

Banyak wadah dapat dibuat dari gambar yang sama. Di sisa artikel ini kita akan belajar bagaimana memberikan instruksi yang diperlukan untuk membuat gambar yang disesuaikan dengan kebutuhan kita di dalam a Dockerfile, bagaimana benar -benar membangun gambar, dan cara menjalankan wadah berdasarkan itu.

Bangun gambar kita sendiri menggunakan DockerFile

Untuk membangun citra kami sendiri, kami akan menggunakan Dockerfile. Dockerfile berisi semua instruksi yang diperlukan untuk membuat dan mengatur gambar. Setelah dockerfile kami siap, kami akan menggunakan Docker Build perintah untuk benar -benar membangun gambar.

Hal pertama yang harus kami lakukan adalah membuat direktori baru untuk meng -host proyek kami. Demi tutorial ini kita akan membangun gambar yang berisi Apache server web, jadi kami akan memberi nama direktori root dari proyek "Dockerized-Apache":

$ MKDIR Dockerized-Apache


Direktori ini adalah apa yang kami sebut membangun konteks. Selama proses pembangunan, semua file dan direktori yang terkandung di dalamnya, termasuk Dockerfile Kami akan membuat, dikirim ke Docker Daemon sehingga dapat dengan mudah diakses, kecuali mereka terdaftar ke dalam .Dockerignore mengajukan.

Mari kita buat kami Dockerfile. File harus dipanggil Dockerfile dan akan berisi, seperti yang kami katakan di atas, semua instruksi yang diperlukan untuk membuat gambar dengan fitur yang diinginkan. Kami menyalakan editor teks favorit kami dan mulai dengan menulis instruksi berikut:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] " 
Menyalin

Instruksi pertama yang harus kami berikan adalah DARI: dengan itu kita dapat menentukan gambar yang ada yang akan kita gunakan sebagai basis (ini disebut a gambar dasar), untuk membuat milik kita sendiri. Dalam hal ini gambar dasar kita akan Ubuntu. Terlepas dari nama gambar, kami juga menggunakan tag, untuk menentukan versi gambar yang ingin kami gunakan, dalam hal ini 18.10. Jika tidak ada tag yang ditentukan terbaru Tag digunakan secara default: Ini akan menyebabkan versi terbaru dari gambar dasar yang akan digunakan. Jika gambar belum ada di sistem kami, itu akan diunduh dari Dockerhub.

Setelah DARI instruksi, kami menggunakan LABEL. Instruksi ini opsional, dapat diulang beberapa kali, dan digunakan untuk menambahkan metadata ke gambar kami. Dalam hal ini kami menggunakannya untuk menentukan pemeliharaan gambar.

Instruksi lari

Pada titik ini, jika kita lari Docker Build, Kami hanya akan menghasilkan gambar yang identik dengan yang dasar, kecuali untuk metadata yang kami tambahkan. Ini tidak ada gunanya bagi kami. Kami bilang kami ingin "berlabuh" Apache server web, jadi hal berikutnya yang harus dilakukan di kami Dockerfile, adalah memberikan instruksi untuk menginstal server web sebagai bagian dari gambar. Instruksi yang memungkinkan kita menyelesaikan tugas ini BERLARI:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan APT-GET UPDATE && APT-GET -Y Instal Apache2 
Menyalin

Itu BERLARI Instruksi digunakan untuk menjalankan perintah di atas gambar. Satu hal yang sangat penting untuk diingat adalah untuk setiap BERLARI instruksi yang kami gunakan, a layer baru dibuat dan ditambahkan ke tumpukan. Dalam hal ini Docker sangat pintar: lapisan yang sudah dibangun akan "di -cache": ini berarti bahwa jika kita membangun gambar berdasarkan pada kita Dockerfile, Dan kemudian kami memutuskan, misalnya, untuk menambahkan yang lain BERLARI instruksi (dan dengan demikian lapisan baru) di ujungnya, build tidak akan dimulai dari awal, tetapi hanya akan menjalankan instruksi baru.

Agar ini terjadi, tentu saja, instruksi yang sudah dibangun di atas Dockerfile tidak boleh dimodifikasi. Bahkan mungkin untuk menghindari perilaku ini sepenuhnya saat membangun gambar, hanya menggunakan --tidak ada cache opsi Docker Build memerintah.

Dalam kasus kami, kami menggunakan BERLARI instruksi untuk mengeksekusi APT-GET UPDATE && APT-GET -Y Instal Apache2 perintah. Perhatikan bagaimana kami melewati -y opsi ke instalasi apt-get Perintah: Opsi ini membuat agar jawaban afirmatif diberikan secara otomatis untuk semua konfirmasi yang diperlukan oleh perintah. Ini diperlukan karena kami menginstal paket non-interaksi.

Mengekspos port 80

Seperti yang kita ketahui, server web Apache mendengarkan Port 80 untuk koneksi standar. Kita harus menginstruksikan Docker untuk membuat port itu dapat diakses pada wadah. Untuk menyelesaikan tugas yang kami gunakan MEMBUKA berfungsi dan berikan nomor port. Untuk alasan keamanan port yang ditentukan dibuka hanya saat wadah diluncurkan. Mari kita tambahkan instruksi ini ke kami Dockerfile:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan APT-GET UPDATE && APT-GET -Y Instal Apache2 Expose 80 
Menyalin

Membangun gambar

Pada titik ini kita sudah bisa mencoba membangun gambar kita. Dari dalam direktori root proyek kami, "Dockerized-Apache", kami menjalankan perintah berikut:

$ sudo docker build -t linuxconfig/dockerized -sapache .

Mari kita periksa perintahnya. Pertama -tama, kami diawali dengan perintah dengan sudo, untuk menjalankannya dengan hak administratif. Dimungkinkan untuk menghindari ini, dengan menambahkan pengguna ke buruh pelabuhan kelompok, tetapi ini merupakan risiko keamanan. Itu -T opsi yang kami berikan, kependekan dari --menandai, Mari kita terapkan nama repositori dan secara opsional tag untuk gambar kita jika build berhasil.

Akhirnya, . menginstruksikan Docker untuk mencari Dockerfile di direktori saat ini. Segera setelah kami meluncurkan perintah, proses pembangunan akan dimulai. Pesan Kemajuan dan Bangun akan ditampilkan di layar:

Mengirim Konteks Bangun ke Docker Daemon 2.048 KB Langkah 1/4: Dari Ubuntu: 18.10 Mencoba menarik Docker Repositori.IO/Library/Ubuntu… . [… .] 
Menyalin

Dalam beberapa menit gambar kita harus dibuat dengan sukses. Untuk memverifikasi itu, kita dapat menjalankan Gambar Docker Perintah, yang mengembalikan daftar semua gambar yang ada di repositori Docker lokal kami:

$ sudo docker gambar tag repositori ID dibuat dibuat ukuran linuxconfig/dockerized-apache terbaru 7ab7b6873614 2 menit yang lalu 191 mb 
Menyalin

Seperti yang diharapkan gambar muncul dalam daftar. Seperti yang dapat kami perhatikan, karena kami tidak memberikan tag (hanya nama repositori, LinuxConfig/Dockerized-Apache) the terbaru Tag telah secara otomatis diterapkan pada gambar kami. Sebuah PENGENAL juga telah ditugaskan untuk itu, 7ab7b6873614: kita dapat menggunakannya untuk merujuk gambar di perintah mendatang.

Meluncurkan wadah berdasarkan gambar

Sekarang gambar kami sudah siap, kami dapat membuat dan meluncurkan wadah berdasarkan itu. Untuk menyelesaikan tugas yang kami gunakan Docker Run memerintah:

$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apache apachectl -d foreground

Mari kita periksa perintah di atas. Opsi pertama yang kami berikan adalah --nama: Dengan itu, kami menentukan nama untuk wadah, dalam hal ini "LinuxConfig-Apache". Jika kami menghilangkan opsi ini, nama yang dihasilkan acak akan ditugaskan ke wadah kami.

Itu -D opsi (pendek untuk --melepaskan) menyebabkan wadah berjalan di latar belakang.

Itu -P opsi, kependekan dari --menerbitkan, diperlukan untuk mempublikasikan port kontainer (atau berbagai port) ke sistem host. Sintaks opsi adalah sebagai berikut:

-P localhost_port: container_port

Dalam hal ini kami menerbitkan Port 80 Kami sebelumnya terpapar di wadah, ke host Port 8080. Demi kelengkapan kita harus mengatakan bahwa juga dimungkinkan untuk menggunakan -P opsi (pendek untuk --PUBLISH-ALL) sebagai gantinya, menyebabkan semua port yang terpapar dalam wadah dipetakan acak port di host.

Dua hal terakhir yang kami tentukan dalam perintah di atas, adalah: gambar wadah harus didasarkan pada, dan memerintah untuk berjalan saat wadah dimulai, yang opsional. Gambarnya tentu saja LinuxConfig/Dockerized-Apache, yang kami bangun sebelumnya.

Perintah yang kami tentukan adalah Apachectl -D latar depan. Dengan perintah ini Apache server web diluncurkan di latar depan Mode: Ini wajib untuk bekerja di dalam wadah. Itu Docker Run Perintah menjalankan perintah yang ditentukan pada a baru wadah:

$ sudo docker run - -name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apachectl -d foreground a51fc9a6dd66b02117f00235a341003a9bf0ffd53f90a040bc1123a9bf0ffd53f90a040bc11003a9bf0ffd53f90a040bc100bcbc19bfd53f90a040bc100bcc1 
Menyalin

Berapa nomor yang dicetak di layar? Ini adalah PENGENAL dari wadah! Setelah kami memiliki wadah dan berjalan, kami harus dapat mengakses halaman yang dilayani secara default Apache Virtualhost di Localhost: 8080 alamat (port 8080 di host dipetakan di port 80 di wadah):



Indeks Apache default.halaman html

Pengaturan kami berfungsi dengan benar. Jika kita menjalankan Docker PS Perintah, yang mencantumkan semua wadah aktif dalam sistem, kita dapat mengambil informasi tentang wadah kita: id (versi pendek, lebih mudah untuk referensi membentuk baris perintah untuk manusia), gambar yang dijalankan, perintah yang digunakan, pembuatannya waktu dan status saat ini, pemetaan dan nama port.

$ sudo docker ps container ID container perintah dibuat nama port status nama a51fc9a6dd66 linuxconfig/dockerized -apache "apachectl -d ..." 28 detik yang lalu hingga 28 detik 0.0.0.0: 8080-> 80/tcp linuxconfig-apache 
Menyalin

Untuk menghentikannya wadah yang perlu kita lakukan hanyalah merujuknya dengan ID atau namanya, dan menjalankan Docker Stop memerintah. Misalnya:

$ sudo docker stop linuxconfig-apache

Untuk memulainya lagi:

$ sudo docker start linuxconfig-apache

Jalankan perintah langsung melalui DockerFile

Karena di sini kami membangun gambar dasar, dan saat runtime, menggunakan Docker Run Perintah, kami menentukan perintah yang akan diluncurkan saat wadah dimulai. Terkadang kami ingin menentukan yang terakhir langsung di dalam dockerfile. Kita bisa melakukannya dengan dua cara: menggunakan Cmd atau TITIK MASUK.

Kedua instruksi dapat digunakan untuk tujuan yang sama tetapi mereka berperilaku berbeda ketika suatu perintah juga ditentukan dari baris perintah. Mari kita lihat caranya.

Instruksi CMD

Itu Cmd Instruksi pada dasarnya dapat digunakan dalam dua bentuk. Yang pertama adalah EXEC membentuk:

Cmd ["/usr/sbin/apachectl", "-d", "foreground"]

Yang lainnya adalah kerang membentuk:

CMD/USR/SBIN/Apachectl -D Foreground

Itu EXEC dari biasanya lebih disukai. Perlu diperhatikan bahwa ketika menggunakan exec dari bentuk shell tidak dipanggil, oleh karena itu ekspansi variabel tidak akan terjadi. Jika perlu ekspansi variabel, kita dapat menggunakan kerang formulir atau kita dapat memohon cangkang secara langsung di EXEC mode, sebagai:

Cmd ["sh", "-c", "echo", "$ home"]

Itu Cmd Instruksi hanya dapat ditentukan satu kali di Dockerfile. Jika banyak Cmd opsi disediakan, hanya yang terakhir akan berlaku. Tujuan dari instruksi ini adalah untuk menyediakan a bawaan Perintah untuk diluncurkan saat wadah dimulai:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan pembaruan apt-get && apt-get -y install APACHE2 Expose 80 cmd ["/usr/sbin/apachectl "," -d "," foreground "] 
Menyalin

Perintah yang ditentukan dengan Cmd di dalam Dockerfile, Bekerja sebagai default, dan akan ditimpa jika perintah lain ditentukan dari baris perintah saat mengeksekusi Docker Run.

Instruksi entri -titik

Itu TITIK MASUK Instruksi juga dapat digunakan untuk mengonfigurasi perintah yang akan digunakan saat wadah dimulai, dan suka Cmd, keduanya EXEC Dan kerang Formulir dapat digunakan dengannya. Perbedaan besar antara keduanya adalah bahwa perintah yang ditularkan dari baris perintah tidak akan mengesampingkan yang ditentukan TITIK MASUK: sebaliknya akan ditambahkan untuk itu.

Dengan menggunakan instruksi ini, kami dapat menentukan perintah dasar dan memodifikasinya dengan opsi yang kami berikan saat menjalankan Docker-Run perintah, membuat wadah kami berperilaku seperti yang dapat dieksekusi. Mari kita lihat contoh dengan kami Dockerfile:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan APT-GET UPDATE && APT-GET -Y Instal Apache2 Expose 80 Entrypoint ["/usr/sbin/apachectl "] 
Menyalin

Dalam hal ini kami menggantikan Cmd instruksi dengan TITIK MASUK dan juga menghapus -D latar depan Opsi dari format EXEC. Misalkan kita sekarang membangun kembali gambar, dan membuat ulang wadah menggunakan perintah berikut:

$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apache -d latar depan


Saat wadah dimulai, -D latar depan Argumen ditambahkan ke perintah yang disediakan di Dockerfile dengan TITIK MASUK instruksi, tetapi hanya jika menggunakan EXEC membentuk. Ini dapat diverifikasi dengan menjalankan Docker PS Perintah (di sini kami menambahkan beberapa opsi ke perintah, untuk menampilkan dan memformat outputnya dengan lebih baik, memilih hanya informasi yang kami butuhkan):

$ sudo docker ps ---no-trunc ---Format ".Nama \ t .Perintah "LinuxConfig -Apache"/usr/sbin/apachectl -d latar depan " 
Menyalin

Seperti Cmd, itu TITIK MASUK Instruksi hanya dapat disediakan satu kali. Jika muncul beberapa kali di Dockerfile, hanya kejadian terakhir yang akan dipertimbangkan. Kemungkinan untuk mengganti default TITIK MASUK gambar dari baris perintah, dengan menggunakan --titik masuk opsi Docker Run memerintah.

Menggabungkan CMD dan Entrypoint

Sekarang kita tahu kekhasan Cmd Dan TITIK MASUK instruksi kami juga bisa menggabungkannya. Apa yang bisa kita peroleh dengan melakukannya? Kita bisa gunakan TITIK MASUK untuk menentukan perintah dasar yang valid, dan Cmd instruksi untuk menentukan parameter default untuk itu.

Perintah akan berjalan dengan parameter default tersebut secara default, kecuali kita mengganti mereka dari baris perintah saat berjalan Docker Run. Menempel pada kami Dockerfile, Kami bisa menulis:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan APT-GET UPDATE && APT-GET -Y Instal Apache2 Expose 80 Entrypoint ["/usr/sbin/apachectl "] cmd [" -d "," foreground "] 
Menyalin

Jika kita membangun kembali gambar dari ini Dockerfile, Hapus wadah sebelumnya yang kami buat, dan meluncurkan kembali Docker Run perintah tanpa menentukan argumen tambahan, /usr/bin/apachectl -d latar depan Perintah akan dieksekusi. Jika kami malah memberikan beberapa argumen, mereka akan mengesampingkan yang ditentukan dalam Dockerfile dengan Cmd petunjuk. Misalnya, jika kita menjalankan:

$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 linuxconfig/dockerized -apache -x

Perintah yang akan dieksekusi saat memulai wadah akan /usr/bin/apachectl -x. Mari kita verifikasi:

$ sudo docker ps ---no-trunc ---Format ".Nama \ t .Perintah "LinuxConfig -Apache"/usr/sbin/apachectl -x " 
Menyalin

Perintah diluncurkan, seperti yang diharapkan: -X Opsi, omong -omong, membuat agar daemon httpd diluncurkan mode debug.

Menyalin file ke dalam wadah

Server Apache "Dockerized" kami berfungsi. Seperti yang kita lihat, jika kita menavigasi Localhost: 8080, Kami memvisualisasikan halaman selamat datang Apache default. Sekarang, katakanlah kita memiliki situs web yang siap dikirim dengan wadah, bagaimana kita bisa "memuat" sehingga Apache akan menyajikannya sebagai gantinya?

Nah, demi tutorial ini kami hanya akan mengganti indeks default.file html. Untuk menyelesaikan tugas kita dapat menggunakan MENYALIN petunjuk. Misalkan kita memiliki indeks alternatif.file html di dalam root proyek kami (konteks build kami) dengan konten ini:

  

Halo!

File ini telah disalin ke dalam wadah dengan instruksi salinan!

Menyalin

Kami ingin memuatnya dan menyalinnya ke /var/www/html Direktori di dalam wadah, oleh karena itu di dalam kami Dockerfile kami menambahkan MENYALIN petunjuk:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan pembaruan apt-get && apt-get -y instal apache2 ekspose 80 entri titik ["/usr/sbin/apachectl "] cmd [" -d "," foreground "] Salin indeks.html/var/www/html/index.html 
Menyalin

Kami membangun kembali gambar dan wadah. Jika sekarang navigasikan ke Localhost: 8080, Kami akan melihat pesan baru:

# pesan baru

Itu MENYALIN Instruksi dapat digunakan untuk menyalin file dan direktori. Saat jalur tujuan tidak ada, itu dibuat di dalam wadah. Semua file dan direktori baru dibuat dengan a Uid Dan Gid dari 0.

Solusi lain yang mungkin untuk menyalin file di dalam wadah adalah menggunakan MENAMBAHKAN instruksi, yang lebih kuat dari MENYALIN. Dengan instruksi ini kami dapat menyalin file, direktori tetapi juga URL. Selain itu, jika kami menyalin lokal arsip tar Dengan format terkompresi yang diakui, itu akan secara otomatis tidak terkompresi dan disalin sebagai direktori di dalam wadah.

Strategi yang ideal adalah menggunakan MENYALIN kecuali fitur tambahan yang disediakan oleh MENAMBAHKAN benar -benar dibutuhkan.

Membuat volume

Dalam contoh sebelumnya, untuk menunjukkan bagaimana MENYALIN Instruksi berfungsi, kami mengganti indeks default.file html dari virtual host default di dalam wadah.

Jika kami berhenti dan memulai wadah, kami masih akan menemukan modifikasi yang kami buat, tetapi jika wadah untuk beberapa alasan dihapus, semua data yang terkandung pada lapisan yang dapat ditululkan akan hilang dengannya. Bagaimana menyelesaikan masalah ini? Salah satu pendekatan adalah menggunakan VOLUME petunjuk:

Dari Ubuntu: 18.10 label pemeliharaan = "[email protected] "Jalankan pembaruan apt-get && apt-get -y instal apache2 ekspose 80 entri titik ["/usr/sbin/apachectl "] cmd [" -d "," foreground "] Salin indeks.html/var/www/html/index.html volume/var/www/html 
Menyalin

Itu VOLUME Instruksi membutuhkan satu atau lebih direktori (dalam hal ini /var/www/html) dan menyebabkan mereka digunakan sebagai titik dudukan untuk volume eksternal, bernama acak yang dihasilkan saat wadah dibuat.

Dengan cara ini, data yang kami masukkan ke dalam direktori yang digunakan sebagai mountpoint akan bertahan di dalam volume yang dipasang dan masih akan ada bahkan jika wadah dihancurkan. Jika direktori yang ditetapkan untuk digunakan sebagai titik gunung sudah berisi data pada waktu inisialisasi, data itu disalin di dalam volume yang dipasang di atasnya.

Mari kita membangun kembali gambar dan wadahnya. Kami sekarang dapat memverifikasi bahwa volume telah dibuat dan digunakan dengan memeriksa wadah:

$ sudo docker memeriksa linuxconfig-apache [… .] "Mounts": [  "Type": "volume", "Name": "8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61", "Source": "/var/lib/docker/volumes/8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61/_data", "Destination": "/var/ www/html "," driver ":" lokal "," mode ":" "," rw ": true," propagation ":" "], [.. .] 
Menyalin

Seperti yang telah dikatakan, volume akan bertahan bahkan setelah wadah dihancurkan sehingga data kami tidak akan hilang.

Itu VOLUME instruksi di dalam Dockefile, Seperti yang dapat kita lihat dari output perintah Docker Inspect di atas, dibuat sehingga volume bernama secara acak dibuat. Untuk mendefinisikan a volume bernama, atau untuk memasang volume yang sudah ada di dalam wadah, kita harus menentukannya saat runtime, saat menjalankan Docker Run perintah, menggunakan -v opsi (pendek untuk --volume). Mari kita 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 Opsi Menentukan Nama Volume (Sangat penting: perhatikan bahwa itu bukan jalan, tetapi nama sederhana) dan Mountpoint Di dalam wadah menggunakan sintaks berikut:

:

Ketika kami melakukan perintah tersebut, volume bernama "myvolume" akan dipasang di jalur spesifik di dalam wadah (volume akan dibuat jika belum ada). Seperti yang kami katakan sebelumnya, jika volumenya kosong, data yang sudah ada di mountpoint di dalam wadah akan disalin di dalamnya. Menggunakan Volume Docker ls Perintah, kami dapat mengonfirmasi volume dengan nama yang kami tentukan telah dibuat:

$ sudo docker volume ls nama volume driver myvolume lokal 
Menyalin

Untuk menghapus volume, kami menggunakan Volume Docker RM perintah, dan berikan nama volume untuk dihapus. Docker, bagaimanapun, tidak akan membiarkan kami menghapus volume yang digunakan oleh wadah aktif:

$ sudo docker volume rm myvolume kesalahan respons dari daemon: tidak dapat menghapus volume, volume masih digunakan: lepaskan myvolume: volume sedang digunakan - [95381b7b6003f6165dfe2e1912d2f827f7f7167ac26e22cf26c1bcab704042e2e2e]]]]] 
Menyalin

Pendekatan lain untuk ketekunan data, terutama berguna selama pengembangan, adalah untuk Bind-mount direktori host di dalam wadah. Pendekatan ini memiliki keuntungan membiarkan kami mengerjakan kode kami secara lokal dengan alat favorit kami dan melihat efek dari perubahan yang segera tercermin di dalam wadah, tetapi memiliki kelemahan besar: wadah menjadi tergantung pada struktur direktori host.

Untuk alasan ini, karena portabilitas adalah salah satu target utama Docker, tidak mungkin untuk mendefinisikan a Bind-mount di dalam dockerfile, tetapi hanya saat runtime. Untuk menyelesaikan tugas ini, kami menggunakan -v opsi Docker Run Perintah lagi, tapi kali ini kami menyediakan jalur dari direktori di dalam sistem file host alih -alih nama volume:

$ sudo docker run --name = linuxconfig -apache -d -p 8080: 80 -v/path/on/host:/var/www/html linuxconfig/dockerized -apache

Saat meluncurkan perintah di atas, direktori host/path/on/host akan dipasang di/var/www/html di dalam wadah. Jika direktori pada host tidak ada, itu dibuat secara otomatis. Dalam hal ini data di direktori mountpoint di dalam wadah (/var/www/html dalam contoh kami) adalah bukan disalin ke direktori host yang dipasang di atasnya, seperti yang terjadi untuk volume sebagai gantinya.

Kesimpulan

Dalam tutorial ini kami mempelajari konsep dasar yang diperlukan untuk membuat dan membangun gambar Docker menggunakan a Dockerfile dan cara menjalankan wadah berdasarkan itu. Kami membangun gambar yang sangat sederhana yang memungkinkan kami menjalankan versi "Dockerized" dari server web Apache. Dalam prosesnya, kami melihat cara menggunakan DARI instruksi, yang wajib menentukan gambar dasar untuk dikerjakan, LABEL instruksi untuk menambahkan metadata ke gambar kami, MEMBUKA instruksi untuk mendeklarasikan port yang akan diekspos dalam wadah. Kami juga belajar cara memetakan port tersebut ke port sistem host.

Kami belajar cara menggunakan
BERLARI Instruksi untuk menjalankan perintah pada gambar, dan kami belajar cara menentukan perintah untuk dieksekusi ketika wadah dimulai baik dari baris perintah dan di dalam Dockerfile. Kami melihat cara mencapai ini dengan menggunakan Cmd Dan TITIK MASUK instruksi, dan apa perbedaan antara keduanya. Akhirnya, kami melihat bagaimana caranya MENYALIN data di dalam wadah, dan cara mencapai persistensi data menggunakan volume. Dalam contoh kami, kami hanya membahas sebagian kecil dari instruksi yang dapat digunakan dalam a Dockerfile.

Untuk daftar yang lengkap dan terperinci, silakan berkonsultasi dengan dokumentasi Docker resmi. Sementara itu, jika Anda ingin tahu cara membangun keseluruhan LAMPU Tumpukan Menggunakan Docker dan Alat Kompose Docker, Anda dapat melihat artikel kami tentang cara membuat tumpukan lampu berbasis Docker menggunakan Docker-Compose di Ubuntu 18.04 Bionic Beaver Linux.

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Cara memasang gambar iso di linux
  • Cara membuat cadangan sistem tambahan dengan timeshift di…
  • Kubernetes vs Docker, apa bedanya?
  • Cara mengubah ukuran gambar disk QCow2 di Linux
  • Cara membuat tumpukan lampu berbasis Docker menggunakan Docker di…
  • Menguasai loop skrip bash
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…