Membuat Gambar Docker dari Awal

Creating Docker Image From Scratch



Keuntungan utama Docker dibandingkan teknologi containerization lainnya adalah Docker ditujukan untuk pengembang dan aplikasi upstack mereka. Sementara teknologi kontainerisasi yang tepat seperti LXC , Zona dan penjara ditargetkan dari perspektif operasi, atau, sederhananya, platform ini adalah pengganti mesin virtual yang berjalan di cloud. Sedangkan, Docker adalah pengganti paket dan binari yang dapat dieksekusi.

Secara longgar, Docker menjadi lebih dan lebih seperti manajer paket universal yang bekerja di semua platform Linux yang mungkin. Dibutuhkan wadah dan menggunakannya untuk memecahkan masalah yang sama sekali berbeda yang dihadapi pengembang. Masalahnya adalah pengembang menggunakan sistem operasi desktop mereka (seperti Windows, macOS atau Linux dengan banyak paket terkait desktop) untuk menulis aplikasi. Aplikasi yang mereka tulis sering berjalan pada sistem operasi yang sama sekali berbeda di server di suatu tempat dengan beberapa distribusi Linux yang sama sekali berbeda dari laptop pengembang.







Dengan Docker, idenya adalah aplikasi Anda dikemas sebagai gambar Docker. Adalah tugas Docker untuk mengambil gambar ini dan menjalankannya sebagai aplikasi kemas untuk Anda. Dikemas berarti bahwa aplikasi, dan dependensinya, akan berjalan di lingkungan yang terisolasi yang mungkin sangat berbeda dari laptop pengembang dan bahkan server produksi. Selama keduanya mendukung Docker, keduanya dapat menjalankan aplikasi yang sama dengan cara yang sama persis.



Anatomi Gambar Docker

Seperti yang disebutkan sebelumnya, aplikasi Docker akan berjalan pada lingkungan yang disepakati. Sekarang pertanyaannya adalah bagaimana kita menciptakan lingkungan itu? Sebagian besar gambar aplikasi akan mengimpor gambar dasar Docker dan membangun aplikasi mereka di atasnya.



Aplikasi dibuat dari lapisan perangkat lunak. Gambar wadah wordpress dibangun menggunakan gambar wadah httpd yang, pada gilirannya, dibangun di atas gambar Ubuntu. Gambar di mana gambar yang lebih baru dibangun dikenal sebagai IMAGE INDUK dalam terminologi Docker. Di Dockerfile (kita akan memahami apa yang dimaksud dengan Dockerfile, beberapa saat kemudian), gambar induk ini disebutkan di bagian atas file seperti yang ditunjukkan di bawah ini:





DARI Ubuntu: 18.04
## Sisa Dockerfile

Dockerfile ini ketika dijalankan mengubah aplikasi Anda menjadi gambar Docker (semacam biner) yang kemudian dapat Anda dorong ke registri dari mana ia dapat ditarik untuk membuat wadah baru di tempat lain. Namun, mereka semua akan memiliki Ubuntu:18.04 sebagai gambar dasar mereka, dan berjalan seolah-olah itu adalah sistem Ubuntu yang mereka jalankan.

Anda mungkin telah memperhatikan ini ketika mencoba menarik gambar buruh pelabuhan baru.



Membuat Gambar Docker dari Awal

Ini menunjukkan berapa banyak lapisan yang ditarik sebelum aplikasi sebenarnya (yang mungkin hanya berukuran beberapa Megabita) dibawa masuk.

Untuk alasan ini, kami ingin membuat apa yang dikenal sebagai gambar dasar. Yang tidak dibangun di atas apa pun. Kata kunci awal digunakan untuk menunjukkan bahwa lapisan ini tidak dibangun di atas apa pun. Seperti:

Dari awal
## Sisa Dcokerfile

Pertama-tama kita akan membuat aplikasi hello-world sederhana dan kemudian mencari tahu seperti apa Dockerfile lainnya. Sistem host adalah Ubuntu:18.04 LTS dan kami menggunakan Docker versi 17.12.1-ce untuk percobaan.

Membuat biner statis

Kontainer Docker adalah kumpulan proses yang berjalan terisolasi dari sistem operasi lainnya. Satu-satunya hal yang berhubungan dengan proses adalah Kernel. Kernel bertanggung jawab untuk menjadwalkan proses-proses ini pada CPU, melakukan manajemen memori, dan beberapa tugas penyimpanan pemesanan dasar lainnya.

Tetapi sebagian besar aplikasi tingkat tinggi bergantung pada banyak pustaka sistem (seperti glibc, musl, klibc, dll ) dan banyak dependensi runtime seperti Python atau Node.js atau Java Runtime. Biner aplikasi tidak memiliki semua pustaka yang tersedia di dalamnya, tetapi ketika memulai eksekusi, ia memanggil pustaka tersebut dari sistem operasi host.

Karena kami mencoba membuat gambar dari awal, kami tidak akan mendapatkan keindahan ini. Jadi aplikasi kita harus berupa file statis atau executable mandiri.

Mari kita mulai dengan membuat folder bernama MyDockerImage dan membuat file hello.cc di dalamnya.

$mkdirMyDockerImage
$CDMyDockerImage
$menyentuhhalo.cc

Buka hello.cc menggunakan editor teks favorit Anda dan tambahkan baris berikut di dalamnya.

#termasuk
menggunakan namespace std;
ke dalamutama(){
biaya<< 'Halo! Pesan ini datang dari sebuah wadah ';
kembali 0;

}

Ini adalah program C++ sederhana yang mencetak Hello! Pesan ini …

Untuk alasan yang dibahas sebelumnya, kami akan mengkompilasi ini menggunakan flag statis. Kompiler yang digunakan adalah g++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0.

Untuk mengkompilasi program, di direktori yang sama jalankan perintah berikut:

$ g++ -hai halo-statisHalo.DC

Ini membuat file biner yang dapat dieksekusi hello di direktori yang sama. Itu file statis kami. Uji apakah itu berjalan sebagaimana dimaksud dengan menyebutkan nama file di terminal.

$./Halo

Sekarang kita siap untuk mengemas program sederhana ini.

file docker

Dockerfile terdiri dari seperangkat aturan yang mengambil file aplikasi Anda (seperti binari, file sumber, dll) bersama dengan berbagai parameter konfigurasi seperti tata letak sistem file, port terbuka, dll dan mengubahnya menjadi file gambar Docker. Anda kemudian dapat membagikan file gambar dengan siapa saja yang ingin menjalankan aplikasi itu.

Kami tidak akan menggali setiap opsi yang tersedia untuk Dockerfile, sebaliknya kami akan menulis Dockerfile yang sangat minimalis. Di direktori yang sama, di mana executable hello Anda berada, buat file kosong bernama file docker.

$menyentuhfile docker

Buka dengan editor teks favorit Anda, dan tulis baris berikut:

DARI awal
TAMBAHKAN halo/
CMD['/Halo']

menggores bukan gambar induk. Melainkan menunjukkan Docker bahwa gambar tidak dibangun di atas gambar lain. Itu dibangun dari awal. Perintah ADD akan mengambil biner statis bernama |_+_|dari direktori saat ini dan menambahkannya ke direktori root dari file gambar. Ketika kita akhirnya akan menjalankan wadah berdasarkan gambar ini, halo yang dapat dieksekusi akan terlihat di dalam direktori root itu sendiri di |_+_|

Terakhir, baris CMD memiliki string /Halo string ini akan dieksekusi sebagai perintah shell setiap kali sebuah wadah dibuat dari gambar ini, sehingga file biner yang kami tambahkan ke wadah kami dan mencetak pesan yang kami tulis di aplikasi kami.

Mari membangun citra dengan menerapkan membangun buruh pelabuhan perintah yang akan menelusuri konten Dockerfile dan menghasilkan gambar. Jalankan perintah berikut di direktori yang sama dengan Dockerfile dan biner yang dapat dieksekusi.

$membangun buruh pelabuhan--menandaiHalo .

NS -tag halo flag menyetel nama gambar menjadi Halo dan titik ( . ) pada akhirnya menceritakan membangun buruh pelabuhan untuk melihat ke direktori saat ini untuk Dockerfile dan konten terkait.

Menjalankan wadah Docker

Untuk memeriksa apakah gambar yang baru saja kita buat muncul di daftar gambar, jalankan:

$gambar buruh pelabuhan

Perhatikan betapa kecilnya gambar hello jika dibandingkan dengan gambar lainnya. Bagaimanapun, itu siap untuk dijalankan sebagai wadah,

$docker menjalankan halo

Itu dia! Anda membuat wadah minimalis pertama Anda dari awal.

Pilihan lain

Sementara membuat gambar dari awal selalu menjadi pilihan, orang sering cenderung membuat gambar dari distro Linux ringan lainnya. Misalnya gambar seperti alpine dan busybox adalah lingkungan yang sangat ringan dengan perpustakaan yang lebih kecil seperti musl, bukan glibc.

Menggunakannya sebagai gambar orang tua Anda dengan menggunakan DARI alpine: terbaru akan menghasilkan gambar yang lebih kecil juga. Karena gambar dasar hanya berukuran 2-5 MB. Beri tahu kami jika ada topik terkait Docker yang mungkin Anda ingin kami bahas selanjutnya. Anda dapat menghubungi kami di Indonesia , Facebook atau berlangganan kami melalui email.