Docker

Docker adalah sekumpulan Platform as a Service (PaaS) yang menggunakan virtualisasi tingkat OS untuk mengirimkan perangkat lunak dalam paket yang disebut Container. Container satu sama lain dapat berkomunikasi tergantung melalui jalur networking yang dibuat. Karena semua kontainer berbagi layanan dari satu kernel sistem operasi, mereka menggunakan lebih sedikit sumber daya daripada mesin virtual.

Docker saat ini bisa berjalan diatas kernel Linux saja.

Docker Service

 * Docker CLI
 * Docker Images
 * Docker container
 * Docker daemon
 * Docker Engine REST API
 * Docker Registry (e.g: Docker Hub a.k.a git repo for docker images)

Proses persiapan sumber daya
Tempat dimana akan dilakukannya eksekusi terhadap project docker yang dibuat, mulai dari virtiual machine/VPS, instalasi docker, dan perencanaan dockerisasi aplikasi (jika memakai docker kebutuhan resource berupa RAM dan CPU tiap kontainernya tidak dapat dilakukan limitasi) berupa menjalankan rangkaian perintah command line, copy/paste script, dan sebagainya. Semuanya dilakukan dengan manual.

Proses Kontainerisasi
Developer menulis kode untuk aplikasi mulai dari library sampai file konfigurasi pada docker container yang sebelumnya telah dibuat dari sebuah docker image (yang biasanya didapatkan dari repositori Docker Hub). Intinya, dependensi apa pun yang diperlukan untuk aplikasi yang sedang dibuat oleh developer ada di dalam image ini. Maka, biasanya setelah ambil dari repository, diedit-lah dia sesuai kebutuhan. Lalu, [https://www.linuxid.net/31073/cara-membuat-docker-images-dengan-dockerfile/#:~:text=Dockerfile%20adalah%20file%20teks%20yang,baris%20perintah%20untuk%20membuat%20image. di-build kembali image tersebut menggunakan Dockerfile] yang kemudian bisa diupload kembali kedalam Docker Hub untuk bisa melakukan version control terhadap image-nya.

Proses interkoneksi kontainer
Setelah membuat beberapa container yang dibutuhkan untuk stack aplikasinya, container yang terisolasi tersebut satu sama lain harus memiliki jalur koneksi. Untuk mengetahui hal tersebut diperlukan untuk melakukan manajemen networking sesuai kebutuhan (Lihat: Docker Networking Drivers).

Proses kerja dalam skala produksi
Biasanya rencana untuk aplikasi akan di-deploy dalam berbagai environment mulai dari proses development, testing, stagging, dan production.

Mungkin sekarang katakanlah workflow disini memiliki 5 stage & 2 lingkungan:

Maka, dalam proses deploy yang lebih serius diperlukan untuk menyiapkan stagging server untuk diintegrasikan alat/tool semisal Traefik.
 * 1) Build: pada stage build ini adalah  seperti, poses instalasi dependensi, proses meng-copy file konfigurasi, proses compile binary, dan lain sebagainya.
 * 2) Test: proses dilakukannya automate testing. Unit, integration, dan lain sebagainya.
 * 3) Release: image tersebut berarti sudah siap dan labelnya akan diubah menjadi stagging.
 * 4) Deploy (Staging): proses dilakukannya pull ke image tersebut (stagging), dan melakukan proses "deploy" ke staging.
 * 5) Deploy (Production): pada stage deploy (production), harus ada intervensi dari penanggung jawab, entah code owner, qa, team lead, ob, vp, siapapun. Dalam hal ini produksi tidak menerapkan automation atau CD/continuous deployment (hanya continuous delivery). Maka, setelah staging server dianggap "OK". Kalau ada proses CI/CD, maka perllu dilakukan unit tests.

Instalasi di Ubuntu 18.04
~ ❯❯❯ sudo apt install apt-transport-https ca-certificates curl software-properties-common ~ ❯❯❯ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - OK ~ ❯❯❯ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" ~ ❯❯❯ sudo apt install docker-ce bima@x220:~$ sudo usermod -aG docker ${USER} bima@x220:~$ su - ${USER} ~ ❯❯❯ id -nG bima adm cdrom sudo dip plugdev lpadmin sambashare wireshark kvm ubridge libvirt microk8s  docker 

Referensi

 * medium.com/edureka
 * https://www.freecodecamp.org/news/docker-development-workflow-a-guide-with-flask-and-postgrest