‫Mari selami Dockerfile, yang sebenarnya merupakan resep untuk membuat gambar Anda.
‫Sejauh ini, semua gambar Docker yang kami gunakan dibuat dari Dockerfiles tempat Anda dapat melihatnya
‫di Docker Hub.
‫Jika Anda sudah mengkloning repositori saya dari sumber yang tercantum di bagian pertama, Anda akan melihat direktori file sampel buruh pelabuhan
‫1, dan di sana kita seharusnya hanya memiliki satu file. Dockerfile.
‫Kita akan pergi baris demi baris dan berbicara tentang bait yang berbeda ini. Dockerfile tampaknya terlihat seperti skrip shell,
‫tetapi ternyata tidak.
‫Ini bukan file batch, ini bukan skrip shell. Ini adalah bahasa file yang sama sekali
‫berbeda yang unik untuk Docker dan nama standarnya adalah Dockerfile dengan huruf kapital D.
‫Tapi, dari baris perintah, setiap kali Anda perlu berurusan dengan Dockerfile menggunakan perintah
‫docker, Anda sebenarnya dapat menggunakan tanda hubung f. Yang sebenarnya umum di antara banyak alat dengan Docker,
‫Anda dapat menggunakan tanda hubung untuk menentukan file yang berbeda dari yang standar.
‫Jadi, yang pertama adalah perintah dari. Perintah dari ada di setiap Dockerfile. Harus ada di sana.
‫Ini biasanya distribusi minimal.
‫Dalam hal ini adalah Debian.
‫Tapi banyak kali saat ini akan menjadi Alpine.
‫Dan sungguh, alasan Anda menggunakan ini adalah untuk menghemat waktu dan rasa sakit. Karena distribusi minimal ini sebenarnya jauh lebih
‫kecil daripada CD yang akan Anda gunakan untuk menginstal mesin virtual darinya.
‫Sebagai contoh, Ubuntu bahkan tidak memiliki cURL di dalamnya, sedangkan jelas, jika Anda menginstal instalasi
‫Ubuntu penuh pada VM itu akan memiliki cURL dan banyak perintah lain sudah diinstal.
‫Karena semua distribusi ini adalah gambar resmi, itu berarti mereka akan selalu mendapatkan informasi
‫terbaru dengan patch keamanan terbaru dan Anda dapat bergantung dan mempercayainya.
‫Dan salah satu manfaat utama untuk menggunakannya dalam wadah adalah menggunakan sistem distribusi paket mereka untuk menginstal perangkat lunak
‫apa pun yang Anda butuhkan dalam paket Anda.
‫Dalam hal ini, kami sebenarnya menggunakan rilis Jessie, yang mana setelah usus besar.
‫Dan, seperti yang Anda ingat dari percakapan Docker Hub kami, ada banyak opsi berbeda yang dapat Anda tentukan
‫di sini untuk repositori Debian.
‫Selanjutnya, kita memiliki bait ENV, dan ENV adalah untuk variabel lingkungan.
‫Ini adalah cara untuk menetapkan variabel lingkungan, yang sebenarnya sangat penting dalam
‫wadah karena merupakan cara utama kami menetapkan kunci dan nilai untuk pembuatan wadah dan untuk menjalankan wadah.
‫Dalam hal ini, sebenarnya mengatur versi Nginx yang ingin kita instal dan variabel lingkungan ini
‫akan diatur sehingga setiap baris berikutnya akan dapat menggunakannya.
‫Sekarang, sebagai pengingat dari kuliah sebelumnya, masing-masing bait ini adalah lapisan aktual dalam gambar Docker
‫kami.
‫Jadi urutan mereka sebenarnya penting, karena itu berfungsi dari atas ke bawah.
‫Seperti yang akan Anda lihat dengan perintah jangka panjang ini di sini untuk yang berikutnya. Anda akan melihat bahwa itu terlihat seperti
‫satu perintah panjang.
‫Apa yang dilakukannya adalah benar-benar hanya menjalankan perintah shell di dalam wadah ini saat sedang membangunnya.
‫Anda biasanya akan melihat menjalankan perintah ketika Anda perlu menginstal perangkat lunak dengan repositori paket, atau Anda
‫perlu melakukan unzip, atau beberapa pengeditan file di dalam wadah itu sendiri.
‫Menjalankan perintah juga dapat menjalankan skrip shell yang telah Anda salin sebelumnya dalam file atau perintah apa pun
‫yang dapat Anda akses dari
‫dalam wadah pada saat itu dalam file.
‫Karena kita berasal dari Debian, perintah jalankan ini memiliki akses ke semua perintah dan binari yang
‫akan diinstal dengan rilis itu.
‫Dan di Nginx yang satu ini, daftar perintah ini kurang lebih menambahkan kunci ke repositori tempat
‫Anda bisa mendapatkan paket untuk menginstal Nginx terbaru dari repositori Nginx resmi.
‫Ada beberapa hal di sini yang benar-benar penting dalam membuat Dockerfiles yang baik dan kita akan benar-benar membicarakan hal
‫ini lebih lanjut di bagian selanjutnya di mana kita berbicara tentang praktik terbaik.
‫Tapi ada dua hal yang perlu diperhatikan.
‫Alasan kami menambahkan semua perintah ini dengan amper ganda dan di sini, sehingga dirantai
‫satu demi satu, adalah karena, jika Anda ingat, setiap bait adalah lapisannya sendiri.
‫Apa yang dilakukan adalah memastikan bahwa semua perintah ini masuk ke dalam satu lapisan tunggal.
‫Ini menghemat waktu kita.
‫Ini menghemat ruang kita. Dan sangat umum bahwa Anda mungkin akan melihatnya di setiap Dockerfile di Docker Hub.
‫Oke, di saluran 27 kita punya perintah jalankan lagi.
‫Yang ini adalah tentang mengarahkan file log kita ke stdout dan
‫ke stderr.
‫Kita akan lihat nanti, cara yang tepat untuk melakukan login di dalam sebuah wadah adalah dengan tidak masuk ke file log. Dan tidak ada syslogd atau layanan
‫syslog lainnya di dalam
‫sebuah wadah. Docker sebenarnya menangani semua pencatatan kami untuk kami. Yang harus kita lakukan di
‫dalam wadah adalah memastikan bahwa semua yang ingin kita tangkap dalam log diludah ke stdout dan
‫stderr dan buruh pelabuhan akan menangani sisanya.
‫Sebenarnya ada logging driver yang bisa kita gunakan di Docker Engine itu sendiri untuk mengontrol semua log
‫untuk semua kontainer di host kami.
‫Dan itulah yang ingin Anda lakukan dengan mereka.
‫Ini menambah kompleksitas aplikasi Anda jika aplikasi Anda benar-benar melakukan pendataan itu sendiri.
‫Dan kemudian, jika Anda harus berurusan dengan file di setiap wadah, sekarang Anda punya masalah tentang
‫bagaimana Anda mengeluarkan file-file itu, dan dapat dicari, serta dapat diakses. Di sini, kami mengambil log Nginx default dan
‫kami benar-benar menautkannya ke stdout.
‫Sehingga Docker bisa menangkapnya.
‫Kami juga memiliki perintah mengekspos.
‫Secara default, tidak ada port TCP atau UDP yang
‫terbuka di dalam sebuah wadah. Itu tidak memaparkan apa pun dari wadah ke jaringan virtual kecuali kami
‫daftar di sini.
‫Dan, tentu saja, karena ini adalah Web dan server proxy itu akan mengekspos 80 dan 443.
‫Sekarang, perintah expose ini tidak berarti port ini akan dibuka secara otomatis di host kami.
‫Itulah perintah dash P setiap kali kita menggunakan docker run.
‫Terakhir, kami memiliki CMD di sini. CMD adalah parameter yang diperlukan yang merupakan perintah
‫terakhir yang akan dijalankan setiap kali Anda meluncurkan wadah baru dari gambar, atau setiap kali Anda me-restart wadah yang berhenti.
‫Ada beberapa dokumentasi yang sangat bagus tentang semua bait ini, ditambah banyak lagi, yang akan kita bahas nanti, di situs
‫dokumentasi Docker di docs. buruh pelabuhan. com, yang
‫dapat Anda temukan di sumber daya kuliah ini.
‫Oke, jadi ini dasar-dasarnya, kan? Lima bait berbeda ini cukup normal di setiap Dockerfile tunggal.
‫Beberapa dari mereka diperlukan.
‫Beberapa dari mereka, seperti run, dan ENV, dan expose, adalah opsional, tetapi mereka cukup khas untuk sebagian besar
‫wadah yang akan Anda buat gambarnya.