Halo teman-teman section ini akan melanjutkan dari section sebelumnya yaa...
Pada docker kita akan mengenal 3 stage yaitu build, ship and run seperti yang kita pelajari di bab sebelumnya.
Build akan diwakilkan oleh Dockerfile, ship dengan Docker image lalu yang terakhir adalah run dengan Containers.
pada Docker kita akan mengenal Docker client, Docker Host, dan juga Docker registry.
Docker Client itu berupa Docker CLI /Docker API yaitu kita sebagai pengguna itu berarti docker client. Lalu Docker Host adalah docker itu sendiri berupa docker daemon, container dan images. Lalu yang terakhir adalah docker registry yaitu tempat kita menyimpan image kalo docker kita bisa mengaksesnya melalui https://hub.docker.com/ disini sudah ada image docker secara official yang sudah disediakan oleh docker dan kita juga bisa mengupload image yang kita punya juga disini.
Pada bab kali ini kita akan mempelajari tentang Dockerfile, berikut adalah ciri dari Dockerfile :
note :
serangkaian instruksi berurutan yang dimaksudkan untuk diproses oleh daemon Docker. Ketersediaan format tersebut menggantikan sekumpulan perintah yang dimaksudkan untuk membangun image tertentu sehingga membantu menjaga semuanya tetap teratur.
Seiring berjalannya waktu, ini juga telah menjadi cara utama untuk berinteraksi dengan Docker dan bermigrasi ke container secara umum.
Mengenai cara kerja, setiap instruksi berurutan Dockerfile diproses secara individual dan menghasilkan file yang bertindak sebagai lapisan image docker akhir yang akan dibangun.
Tumpukan lapisan berurutan tersebut, yang dikelola oleh sistem file menjadi image docker.
Tujuan di balik ini adalah untuk memungkinkan caching dan memudahkan pemecahan masalah. Jika dua file Docker akan menggunakan lapisan yang sama pada tahap tertentu, daemon Docker dapat menggunakan kembali lapisan yang telah dibuat sebelumnya untuk tujuan tersebut.
Dockerfile tidak mempunyai extension jadi dia hanya dituliskan sebagai “Dockerfile”
Dockerfile berisi 3 stage yaitu Fundamental, Configuration dan Execution
Fundamental Instruction
download source file dari udemy, lalu kirim ke server melalui scp karena kita menggunakan ec2 instance jika kalian menggunakan local berarti tidak perlu : scp -i aws.pem Final+Codes.zip ubuntu@34.233.133.138:/home/ubuntu
lalu install paket unzip untuk mengekstrak file zip
lalu unzip file yang sudah kita upload tadi dengan command unzip (nama file)
jika sudah masuk ke directory Final Codes/CC_Docker/S2/D1, maka di directory inilah kita akan belajar structure docker file yang pertama yaitu fundamental.
lalu buat Dockerfile atau lebih mudahnya kita bisa cp template yang sudah disiapkan.
note :
ARG → untuk menyimpan variabel contoh disini adalah version OS
FROM → wajib ada disetiap docker file, menentukan image apa yang akan digunakan container
lalu jika sudah kita bisa membuatnya menjadi image dengan perintah docker build -t (nama image) (path file) → disini . dikarenakan kita ingin semua file di directory tersebut dimasukan kedalam image
bisa dilihat dari proses build image maka akan akan ada step dan layer nya, 1/2 dia akan pull/download image terlebih dahulu, lalu 2/2 dia menjalankan perintah apt-get update -y sesuai dengan yang ada di Dockerfile. Jangan lupa cek image menggunakan docker images
Configuration Instruction
selanjutnya adalah struktur yang kedua yaitu configuration, sama seperti sebelumnya kita bisa membuat file baru atau copy dari template. Pindah ke directory D2
disini saya sedikit memodifikasi template yang sudah disediakan menjadi seperti ini
note :
FROM → based image for container
RUN → command yang akan dijalankan di OS container, jadi nanti dia akan otomatis update lalu install curl, clean, dan rm sebuah directory juga membuat directory baru. tenang dia dijalankan di OS container bukan host OS milik kita.
ENV → digunakan untuk setting environment di dalam container, disini kita setting user,shell dan logname
Jika sudah kita bisa lanjut membuatnya menjadi image seperti sebelumnya dengan command docker build -t (nama image) (path)
sama seperti sebelumnya ketika proses pembuatan image dia juga akan bertahap dan berlayer sesuai dengan Dockerfile yang kita buat. Cek dengan docker images
testing dengan membuat container dengan image tersebut, --itd(interactive, teletype, and detached). option -it agar container bisa menerima input dari user, sedangkan option -d digunakan agar container running in background.
lalu masuk ke container dengan perintah docker exec -it (nama container) bash
jika sudah berhasil masuk mari kita test
cek environment dan juga apakah directory sudah terbuat, jika sudah kita bisa keluar dengan menggunakan perintah exit.
Expose Instructions
Lanjut ke structure yang terakhir yaitu expose, pindah ke directory D6 dan copy ataupun buat file baru sama seperti sebelumnya
isi filenya seperti berikut
note :
FROM → based image for container
RUN → command yang akan dijalankan di OS container yaitu update, install nginx, clean dan hapus directory
EXPOSE → menunjukan listening port container
CMD → menjalankan perintah nginx -g daemon off, dijalankan ketika container nginx dimulai
-g "daemon off;" adalah opsi khusus untuk mengonfigurasi nginx agar berjalan di foreground. Ini penting karena kontainer Docker secara default berjalan di latar belakang, dan nginx perlu berjalan di depan agar kontainer tidak segera berhenti setelah dimulai
RUN VS CMD
1. RUN Instruction
Tujuan: Digunakan untuk mengeksekusi perintah saat proses pembangunan (build) image Docker.
Waktu Eksekusi: Perintah-perintah yang ditentukan dengan RUN dieksekusi saat docker build untuk membuat lapisan baru dalam image Docker.
Contoh Penggunaan: Menginstal paket, menyalin file, membuat direktori, dan konfigurasi lain yang dibutuhkan selama build image.
2. CMD Instruction
Tujuan: Menentukan perintah default yang akan dijalankan saat sebuah kontainer berdasarkan image Docker dijalankan.
Waktu Eksekusi: Perintah yang ditentukan dengan CMD dieksekusi saat kontainer Docker dimulai.
Contoh Penggunaan: Menentukan perintah atau proses yang harus berjalan secara default dalam kontainer, seperti menjalankan aplikasi atau layanan.
Perbedaan Utama:
Waktu Eksekusi: RUN dieksekusi saat build image Docker, sementara CMD dieksekusi saat container Docker berjalan.
Tujuan: RUN digunakan untuk setup dan konfigurasi selama build image, sedangkan CMD digunakan untuk menentukan perintah default yang harus dijalankan saat kontainer dimulai.
Jumlah Kehadiran: Anda dapat memiliki beberapa instruksi RUN dalam Dockerfile untuk menambahkan lapisan-lapisan dalam image, tetapi hanya ada satu instruksi CMD dalam Dockerfile yang efektif. Jika ada lebih dari satu CMD, hanya yang terakhir yang akan berlaku.
lalu build image seperti sebelumnya dan cek apakah images sudah tersedia.
create container from images, docker run -itd –rm –name (nama container) -p (port luar):(port asli) (nama image)
note : opsi –rm berarti container akan langsung terhapus jika distop
untuk verifikasi akses (ip address):(port luar)
menghapus docker, kita harus stop terlebih dahulu container jika sudah maka baru bisa di hapus,disini kita hanya perlu menghapus “test-container” karena “cont_expose” akan langsung terhapus jika ke stop
bila sebelumnya kita menggunakan nginx pada kali ini kita akan mencoba menggunakan apache, move ke directory D7
ini adalah isi dari Dockerfile, coba anda analisis structure docker berikut ya guys…
jika sudah lanjut dibuat image dan analisis juga layer yang terbuat dari proses tersebut.
jika sudah buat container dan jalankan pada port 8080
lalu cek sama seperti sebelumnya.
sudah selesai ya kawan kawan, see you in the next chapter...
source : free course from udemy Docker essentials click on there
Tidak ada komentar:
Posting Komentar