Cara Membangun Gambar Docker Menggunakan Dockerfile
- 2134
- 496
- John Ratke
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
Kategori | Persyaratan, konvensi atau versi perangkat lunak yang digunakan |
---|---|
Sistem | OS-independen |
Perangkat lunak | Buruh pelabuhan |
Lainnya |
|
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 menggunakanBERLARI
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…
- « Pengantar GREP dan Ekspresi Reguler
- Cara Memulihkan File yang Dihapus Dengan Yang Terbaik di Linux »