Pertama, kita perlu menginstal docker-compose di mesin kita hanya dengan menjalankan docker-compose -v. Jika belum terinstal di mesin kita, kita perlu menginstalnya terlebih dahulu.
Buat Compose File
Selanjutnya, kita perlu membuat docker-compose.ymlfile baru dan mengisinya dengan setup wordpress dan mysql. Nama file sebenarnya bisa apa saja, tetapi jika kita menggunakan nama lain, kita perlu menentukan file saat menjalankan perintah compose.
Ada banyak hal yang terjadi pada file itu, mari kita bedah satu per satu. Kolom pertama adalah versionyang memberi tahu Compose format file apa yang kita gunakan. Bidang tertentu mungkin tidak dikenali oleh versi Compose tertentu, jadi periksa versi mana yang didukung oleh Compose yang diinstal pada mesin Anda .
Bidang kedua kami adalah servicesyang menggambarkan layanan apa yang ingin kami jalankan. Dalam hal ini, kita akan menjalankan wadah wordpress dan mysql. Di setiap layanan, kami memiliki container_namebidang opsional yang akan digunakan sebagai nama wadah. Jika kita tidak menentukan nama container, Compose akan membuatnya secara otomatis.
Selanjutnya, kami memiliki imagebidang yang memberi tahu Compose gambar buruh pelabuhan mana yang ingin kami gunakan. Karena kami ingin wordpress dapat diakses di luar wadah, kami membuka pemetaan port dari 8080host kami ke 80port wadah dengan mendefinisikannya di portsbidang.
Kami belajar di artikel sebelumnya bahwa kami perlu menghubungkan wadah wordpress dan mysql agar mereka dapat berkomunikasi satu sama lain. Dalam hal ini, kami biasa linksmelakukannya dengan hanya menentukan wadah lain yang ingin kami hubungkan dengan layanan ini.
Kami menggunakan environmentbidang untuk mendaftar semua variabel lingkungan yang perlu diatur di setiap wadah. Terakhir, dalam layanan mysql, kami memasang volume ke dalamnya di volumelapangan. Kami menautkan .mysqlfolder di Host ke /var/lib/mysqlwadah mysql sehingga data basis data dapat bertahan bahkan jika kami mematikan wadah. Jika kita belum memiliki .mysqlfolder di host, Docker akan membuatnya untuk kita.
Menjalankan Compose
Untuk menjalankan layanan, kita hanya perlu menjalankan satu perintah. Perhatikan bahwa -dflag akan membuat layanan berjalan di latar belakang.
$ docker-compose up -d
Sedikit catatan, kita perlu menentukan nama file compose jika kita menggunakan nama yang tidak standar, misalnya some-compose.yml.
$ docker-compose up -f some-compose.yml -d
Meskipun, kita menjalankan container secara deklaratif, kita masih dapat menggunakan dockerperintah untuk melakukan operasi pada container ini. Misalnya, jika kita ingin masuk ke dalam database, kita dapat menggunakan perintah yang sama seperti sebelumnya.
$ docker exec -it my_mysql mysql -u root -p
Untuk mematikan container ini, kita tidak perlu menghapusnya satu per satu. Kita cukup menjalankan:
$ docker-compose down
Dengan cara ini, kita dapat menghidupkan dan mematikan pengaturan dengan satu perintah. Keuntungan lain dari ini adalah bahwa file penulisan dapat dipindahkan ke komputer lain dan kami akan menjalankan pengaturan yang sama di dalamnya. Ini dapat memudahkan pengembangan dalam tim serta penerapan ke mesin pengujian atau produksi.
Mengelola Data di Docker, secara default semua file yang dibuat dalam container tidak akan tersimpan secara persistent, ketika container dihentikan file akan hilang, dan ketika anda menjalakan kembali container tersebut akan kembali ke sedia kala.
Untuk menangani hal ini docker memiliki 2 opsi yaitu volumes dan bind mounts yang dapat diterapkan pada container untuk menyimpan data pada host, sehingga file akan tersimpan secara persistent ketika container dihentikan, dan jika anda menjalankan docker di linux anda juga bisa menggunakan tmpfs mount
Disini kita akan coba mendemokan bagaiman cara bind mount laravel-app pada docker dekstop OS windows
Bind mounts
Bisa disimpan dimana saja pada sistem host, host sistem dan container dapat menulis, membaca dan mengubah file kapanpun. jika dibandingkan dengan volumes bind mounts memiliki fungsional yang terbatas.
Ketika anda menggunakan bind mount file atau direktori pada host di mount ke container, file atau direktori direferensikan secara full path pada host, dan untuk host docker tujuan direktori tidak perlu ada, jika tidak ada akan dibuat secara otomatis.
Untuk penggunaan bind mount gunakan parameter -v atau –volume, contoh demo penggunaan
pada perintah diatas /Users/ilhamAziz/app/laravel-vol merupakan direktori full path yang berada di host yang akan di mount ke /srv/www yang berada di container, seperti yang disebutkan di atas direktori /srv/app ini tidak perlu ada pada docker host, jika tidak ada akan dibuat secara otomatis, dan ketika anda melakukan perubahan di container file/direktori akan berubah juga di host, begitupun sebaliknya
Kita akan coba melihat mount pada container laravel2 dengan menggunakan perintah berikut
docker container inspect laravel2
ekarang kita akan coba menjalankan
Docker adalah sebuah aplikasi yang bersifat open source yang berfungsi sebagai wadah/container untuk mengepak/memasukkan sebuah software secara lengkap beserta semua hal lainnya yang dibutuhkan oleh software tersebut dapat berfungsi.
Jadi dengan docker kita sudah tidak perlu menjalankan aplikasi selalu pada lokal komputer kita. Langsung saja kita mulai proses konfigurasi docker untuk laravel. Tapi sebelum memulai tutorial ini pastikan kita telah meng-install docker dekstop di komputer
Install Composer
Pastikan download composer terlebih dahulu di https://getcomposer.org/download/ lalu install. Selajutnya pastikan composer terinstall di komputer dengan cara ketikan composer di CMD
Install Laravel
Untuk meng-install laravel ketikan perintah dibawah dan tunggu proses installasi selesai
Buat dan import image laravel-app dengan ketikan perintah dibawah (masuk ke direktori laravel-app di CMD)
docker image build -t laravel-app
Lihat image yang barusan dibuild dengan perintah dibawah
docker image ls
Jalankan Container
Agar image diatas bisa digunakan kita harus menjalankan terlebih dahulu image- nya sebagai container. Dengan ketikan perintah seperti dibawah
Buka di browser dengan http://localhost:8181/
Push image ke dokcer hub
Sebelum melakukan push image ke docker hub pastikan terlebih dahulu kita telah memiliki akun docker hub, seperti dibawah ini.
Login ke Docker Hub melalui CMD, lalu copas Container ID untuk melakukan perintah selanjutnya
Melakukan commit images
Setelah tahapan diatas berhasil, selanjutnya kita akan melakukan push image ke docker hub, dengan ketikan perintah seperti dibawah.
docker image push ilhmahub/laravel-app:latest
Containerization didefinisikan sebagai bentuk virtualisasi sistem operasi, di mana aplikasi dijalankan di ruang pengguna yang terisolasi yang disebut wadah, semua menggunakan sistem operasi (OS) bersama yang sama. Wadah pada dasarnya adalah lingkungan komputasi yang dikemas penuh dan portabel:
Semua yang dibutuhkan aplikasi untuk dijalankan - biner, pustaka, file konfigurasi, dan dependensinya - dienkapsulasi dan diisolasi dalam penampungnya.
Container itu sendiri dipisahkan dari OS host, dengan hanya akses terbatas ke resource yang mendasarinya - seperti mesin virtual (VM) ringan.
Hasilnya, aplikasi dalam container dapat dijalankan di berbagai jenis infrastruktur — di bare metal, di dalam VM, dan di cloud — tanpa perlu melakukan refactor untuk setiap lingkungan.
Itu karena ada lebih sedikit overhead selama startup dan tidak perlu menyiapkan OS tamu terpisah untuk setiap aplikasi karena semuanya berbagi kernel OS yang sama. Karena efisiensi tinggi ini, penampung biasanya digunakan untuk mengemas banyak layanan mikro individual yang membentuk aplikasi modern. Citrix menggunakan containerization dengan CPX, pengontrol pengiriman aplikasi (ADC) yang mendukung pengiriman aplikasi yang lebih skalabel, gesit, dan portabel.
Bagaimana Sebenarnya Containerization Bekerja?
Setiap penampung adalah paket perangkat lunak yang dapat dieksekusi, berjalan di atas OS host. Sebuah host dapat mendukung banyak kontainer (puluhan, ratusan atau bahkan ribuan) secara bersamaan, seperti dalam kasus arsitektur layanan mikro kompleks yang menggunakan banyak ADC dalam kontainer. Penyiapan ini berfungsi karena semua kontainer menjalankan proses minimal sumber daya yang terisolasi yang tidak dapat diakses orang lain.
Pikirkan aplikasi dalam kemasan sebagai lapisan atas kue multi-tingkat:
Di bagian bawah, terdapat perangkat keras infrastruktur yang dimaksud, termasuk CPU, penyimpanan disk, dan antarmuka jaringannya.
Di atas itu, ada OS host dan kernelnya - yang terakhir berfungsi sebagai jembatan antara perangkat lunak OS dan perangkat keras sistem yang mendasarinya.
Mesin kontainer dan OS tamu minimalnya, yang khusus untuk teknologi kontainerisasi yang digunakan, berada di atas OS host.
Di bagian paling atas adalah binari dan pustaka (bins / libs) untuk setiap aplikasi dan aplikasi itu sendiri, berjalan di ruang pengguna yang terisolasi (wadah).
Cgroups dan LXC
Containerization seperti yang kita tahu itu berevolusi dari cgroups, sebuah fitur untuk mengisolasi dan mengontrol penggunaan sumber daya (misalnya, berapa banyak CPU dan RAM dan berapa banyak thread yang dapat diakses oleh suatu proses) di dalam kernel Linux. Cgroup menjadi wadah Linux (LXC), dengan fitur yang lebih canggih untuk isolasi namespace komponen, seperti tabel perutean dan sistem file. Kontainer LXC dapat melakukan hal-hal seperti:
● Pasang sistem file. ● Jalankan perintah sebagai root. ● Dapatkan alamat IP.
Itu melakukan tindakan ini di ruang pengguna pribadinya sendiri. Meskipun menyertakan bins / lib khusus untuk setiap aplikasi, container LXC tidak mengemas kernel OS atau perangkat keras apa pun, yang berarti ini sangat ringan dan dapat dijalankan dalam jumlah besar bahkan pada mesin yang relatif terbatas.
Docker dan OCI
LXC berfungsi sebagai dasar untuk Docker, yang diluncurkan pada tahun 2013 dan dengan cepat menjadi teknologi peti kemas paling populer - secara efektif merupakan standar industri, meskipun spesifikasi yang ditetapkan oleh Open Container Initiative (OCI) sejak itu menjadi pusat peti kemas. Docker adalah kontributor spesifikasi OCI, yang menetapkan standar untuk format gambar dan runtime yang digunakan mesin kontainer.
Seseorang yang mem-boot container, Docker atau lainnya, dapat mengharapkan pengalaman yang sama terlepas dari lingkungan komputasi. Kumpulan wadah yang sama dapat dijalankan dan diskalakan apakah pengguna menggunakan distribusi Linux atau bahkan Microsoft Windows. Kompatibilitas lintas platform ini penting untuk ruang kerja digital saat ini, di mana pekerja mengandalkan banyak perangkat, OS, dan antarmuka untuk menyelesaikan pekerjaan.
Apa yang Membedakan Containerization dari Virtualization?
Fitur containerisasi yang paling khas adalah terjadi di tingkat OS, dengan semua container berbagi satu kernel. Tidak demikian halnya dengan virtualisasi melalui mesin virtual (VM):
VM berjalan di atas hypervisor, yang merupakan perangkat keras, perangkat lunak, atau firmware khusus untuk mengoperasikan VM pada mesin host, seperti server atau laptop.
Melalui hypervisor, setiap VM ditetapkan tidak hanya pada bin / lib penting, tetapi juga tumpukan perangkat keras tervirtualisasi termasuk CPU, penyimpanan, dan adaptor jaringan.
Untuk menjalankan semua itu, setiap VM mengandalkan OS tamu yang lengkap. Hypervisor itu sendiri dapat dijalankan dari OS mesin host atau sebagai aplikasi bare-metal.
Seperti containerization, virtualisasi tradisional memungkinkan isolasi penuh aplikasi sehingga mereka berjalan secara independen satu sama lain menggunakan sumber daya aktual dari infrastruktur yang mendasarinya. Tetapi perbedaannya lebih penting:
Ada overhead yang signifikan yang terlibat, karena semua VM membutuhkan OS tamu dan kernel virtual mereka sendiri, ditambah kebutuhan akan lapisan ekstra yang berat (hypervisor) antara mereka dan host.
Hypervisor juga dapat menyebabkan masalah kinerja tambahan, terutama saat dijalankan pada OS host, misalnya di Ubuntu.
Karena keseluruhan resource overhead yang tinggi, mesin host yang mungkin dapat menjalankan 10 container atau lebih dengan nyaman dapat kesulitan untuk mendukung satu VM.
Namun, menjalankan banyak VM dari perangkat keras yang relatif kuat masih merupakan paradigma umum dalam pengembangan dan penerapan aplikasi. Ruang kerja digital biasanya menampilkan virtualisasi dan penampung, menuju tujuan umum untuk membuat aplikasi tersedia dan skalabel mungkin bagi karyawan.
Apa Manfaat Utama Containerization?
Aplikasi dalam kontainer dapat dengan mudah dikirimkan ke pengguna di ruang kerja digital. Lebih khusus lagi, memasukkan aplikasi berbasis layanan mikro, satu set Citrix ADC atau database (di antara kemungkinan lainnya) memiliki spektrum manfaat yang luas, mulai dari ketangkasan yang unggul selama pengembangan perangkat lunak hingga pengendalian biaya yang lebih mudah.
Bagaimana Container Bekerja
Containerization melibatkan penggabungan aplikasi bersama dengan semua file konfigurasi terkait, library, dan dependensi yang diperlukan untuk menjalankannya dengan cara yang efisien dan bebas bug di lingkungan komputasi yang berbeda. Implementasi containerisasi paling populer adalah Docker dan Kubernetes.
Aplikasi dan dependensinya berada dalam container di atas 'lingkungan runtime container' yang dapat berfungsi pada sistem operasi host dan infrastruktur pilihan.
Kontainer versus Mesin Virtual
Container sering dibandingkan dengan Mesin Virtual (VM), karena keduanya memungkinkan beberapa jenis perangkat lunak dijalankan di lingkungan yang terkandung. Penampung adalah abstraksi dari lapisan aplikasi (artinya setiap penampung mensimulasikan aplikasi perangkat lunak yang berbeda). Meskipun setiap penampung menjalankan proses yang terisolasi, beberapa penampung berbagi Sistem Operasi yang sama. VM adalah abstraksi dari lapisan perangkat keras (artinya setiap VM mensimulasikan mesin fisik yang dapat menjalankan perangkat lunak). Teknologi VM dapat menggunakan satu server fisik untuk menjalankan server yang setara dengan banyak server (masing-masing disebut VM). Jadi, sementara beberapa VM berjalan pada satu mesin fisik, setiap VM memiliki salinan Sistem Operasi, aplikasi, dan file terkait, pustaka, dan dependensinya sendiri.
Menjalankan perangkat lunak di lingkungan dalam kontainer umumnya menggunakan lebih sedikit ruang dan memori daripada menjalankan perangkat lunak dalam VM yang berbeda, karena yang terakhir memerlukan salinan terpisah dari Sistem Operasi untuk dijalankan di setiap VM.
Pengembangan perangkat lunak berorientasi DevOps yang lebih gesit
Dibandingkan dengan VM, penampung lebih mudah disiapkan, baik tim menggunakan OS mirip UNIX atau Windows. Alat pengembang yang diperlukan bersifat universal dan mudah digunakan, memungkinkan pengembangan, pengemasan, dan penerapan aplikasi dalam container dengan cepat di seluruh OS. Teknisi dan tim DevOps dapat (dan memang) memanfaatkan teknologi containerization untuk mempercepat alur kerja mereka.
Overhead lebih sedikit dan biaya lebih rendah daripada VM
Penampung tidak memerlukan OS tamu penuh atau hypervisor. Pengurangan overhead itu berarti lebih dari sekadar waktu boot yang lebih cepat, jejak memori yang lebih kecil, dan performa yang secara umum lebih baik. Ini juga membantu memangkas biaya, karena organisasi dapat mengurangi beberapa server dan biaya lisensi mereka, yang seharusnya mendukung penerapan yang lebih berat dari beberapa VM. Dengan cara ini, kontainer memungkinkan efisiensi server dan efektivitas biaya yang lebih besar.
Portabilitas yang sangat baik di seluruh ruang kerja digital
Wadah membuat ide "tulis sekali, jalankan di mana saja" menjadi kenyataan. Setiap penampung telah diambil dari OS host dan akan berjalan sama di lokasi mana pun. Dengan demikian, ini dapat ditulis untuk satu lingkungan host dan kemudian di-porting dan disebarkan ke yang lain, selama host baru mendukung teknologi container dan OS yang dipermasalahkan. Kontainer Linux menyumbang sebagian besar dari semua kontainer yang diterapkan dan dapat di-porting di berbagai OS berbasis Linux baik itu di lokasi atau di cloud. Di Windows, container Linux dapat dijalankan dengan andal di dalam VM Linux atau melalui isolasi Hyper-V. Kompatibilitas seperti itu mendukung ruang kerja digital, di mana banyak awan, perangkat, dan alur kerja berpotongan.
Isolasi kesalahan untuk aplikasi dan layanan mikro
Jika satu wadah gagal, yang lain berbagi kernel OS tidak terpengaruh, berkat isolasi ruang pengguna di antara mereka. Itu menguntungkan aplikasi berbasis layanan mikro, di mana banyak komponen yang berpotensi mendukung program yang lebih besar. Layanan mikro dalam wadah tertentu dapat diperbaiki, diterapkan ulang, dan diskalakan tanpa menyebabkan waktu henti aplikasi
Pengelolaan yang lebih mudah melalui orkestrasi
Orkestrasi container melalui solusi seperti platform Kubernetes membuatnya praktis untuk mengelola aplikasi dan layanan dalam container dalam skala besar. Dengan menggunakan Kubernetes, dimungkinkan untuk mengotomatiskan peluncuran dan rollback, mengatur sistem penyimpanan, melakukan load balancing, dan memulai ulang container yang gagal. Kubernetes kompatibel dengan banyak mesin kontainer termasuk yang kompatibel dengan Docker dan OCI.
Aplikasi dan Layanan Apa yang Biasanya Dimasukkan?
Sebuah wadah dapat mendukung hampir semua jenis aplikasi yang di era sebelumnya akan secara tradisional divirtualisasikan atau dijalankan secara native di mesin. Pada saat yang sama, ada beberapa paradigma komputasi yang sangat cocok untuk containerization, termasuk:
Layanan mikro : Arsitektur layanan mikro dapat dikonfigurasi secara efisien sebagai sekumpulan kontainer yang beroperasi bersama-sama dan berputar serta dinonaktifkan sesuai kebutuhan.
Database : Pecahan database dapat dimasukkan ke dalam container dan setiap aplikasi diberi database khusus, bukan perlu menghubungkan semuanya ke database monolitik.
Server web : Menjalankan server web dalam wadah hanya memerlukan beberapa input baris perintah untuk memulai, ditambah lagi, ini menghindari kebutuhan untuk menjalankan server secara langsung di host.
Penampung dalam VM : Penampung dapat dijalankan dalam VM, biasanya untuk memaksimalkan pemanfaatan perangkat keras, berbicara dengan layanan tertentu di VM dan / atau meningkatkan keamanan.
Citrix ADCs : ADC mengelola kinerja dan keamanan aplikasi. Saat dimasukkan ke dalam container , itu membuat layanan L4-L7 lebih mudah tersedia di lingkungan DevOps.
Bagaimana Kontainerisasi Terkait dengan Layanan Mikro dan Orkestrasi Kontainer?
Layanan mikro
Layanan mikro yang terdiri dari aplikasi dapat dikemas dan disebarkan dalam wadah dan dikelola pada infrastruktur awan yang dapat diskalakan. Manfaat utama containerization layanan mikro mencakup overhead yang minimal, penskalaan independen, dan pengelolaan yang mudah melalui orkestrator container seperti Kubernetes.
Citrix ADC dapat membantu transisi dari aplikasi berbasis monolitik ke layanan mikro . Lebih khusus lagi, ini membantu admin, pengembang, dan insinyur keandalan situs dengan masalah jaringan seperti manajemen lalu lintas dan pergeseran dari arsitektur berbasis monolitik ke layanan mikro.
Jika layanan mikro dikemas dalam wadah yang diterapkan dalam skala besar, platform orkestrasi wadah diperlukan untuk mengelola siklus hidup wadah.
Orkestrasi Penampung
Kubernetes adalah platform orkestrasi container yang paling menonjol. Awalnya dikembangkan oleh Google, ini terlihat bersumber terbuka dan sekarang dikelola oleh Cloud Native Computing Foundation.
Meskipun ini bukan satu-satunya solusi seperti itu, rangkaian fiturnya menunjukkan kemampuan orkestrator container modern, karena dapat:
Buka wadah dengan nama DNS atau alamat IP.
Tangani load balancing dan distribusi lalu lintas untuk kontainer.
Pasang penyimpanan lokal dan berbasis cloud secara otomatis.
Alokasikan sumber daya CPU dan RAM tertentu ke container, lalu paskan ke node.
Ganti atau matikan container yang bermasalah tanpa mengganggu kinerja dan waktu kerja aplikasi.
Kelola informasi sensitif seperti kata sandi dan token tanpa membangun kembali wadah.
Ubah status wadah dan kembalikan wadah lama untuk menggantinya dengan yang baru.