Docker
Docker adalah sebuah platform yang terbuat dari Containers. Container menggunakan virtualisasi tingkat OS untuk menjalankan images, yaitu suatu aplikasi lengkap dengan semua dependensinya. Karena semua container menggunakan operating system kernel yang sama, akibat nya containers memakan lebih sedikit resource daripada virtual machines.
Docker atau containers berjalan independen dan terisolasi sehingga tidak menginterupsi proses lain. Namun, docker/containers juga bisa saling berkomunikasi. Jika dua container menjalankan image yang sama, maka dependensi dari 2 image dan enviroment container tersebut akan sama. Hal ini berarti jika suatu container menjalankan suatu image di komputer pribadi dan ada container pada server yang menjalankan image yang sama, kedua container akan memiliki behaviour yang sama dan memberikan hasil yang sama.
Komponen Docker
Docker tidak hanya terdiri dari container dan images. Berikut adalah infrastruktur docker secara umum:
- Docker Client
sebuah aplikasi atau terminal yang digunakan user untuk memberikan commands. Docker commands menggunakan Docker API untuk berkomunikasi dengan Docker Daemon.
- Docker Daemon
Sebuah daemon yang menunggu dan melayani Docker API requests dan mengatur Docker objects.
- Docker Images
Sebuah file yang berisi instruksi untuk menciptakan sebuah Docker Container. Docker images bersifat immutable yang artinya tidak dapat dimodifikasi, namun bisa diduplikasi dan dibagikan atau dihapus. Positifnya jika ada perubahan atau ingin melakukan rollback (kembali ke versi sebelum), image tadi masih terdapat disana dan dapat digunakan kembali.
Cara menggunakan image sangat simpel: tinggal melakukan pull dari container registry dan langsung dieksekusi. Proses pembuatan image baru membutuhkan file yang disebut Dockerfile, yang berisi instruksi cara membuat image. image juga bisa di duplikasi dan diedit.
- Docker Containers
Sebuah objek image yang bisa dijalankan. Container bisa dibuat, dihapus, dipindahkan, dimulaikan dan dihentikan oleh Docker Daemon.
- Container Registry
Sebuah daftar yang berisi images yang bisa di-pull dan di-push oleh user. Bisa digunakan untuk meletakkan image dari komputer lokal ke server.
Bagaimana Docker diimplementasikan pada proyek?
Setelah docker diinstall, langkah selanjutnya adalah mendefinisikan project tersebut menjadi suatu Docker Image.
Docker image adalah ekivalen dengan istilah “snapshot” pada virtual machine. Docker image berisi file proyek yang ingin di-execute dan nantinya siap dijalankan pada suatu container. Untuk membuat Docker Image, kita harus membuat dockerfile terlebih dahulu. Berikut adalah dockerfile yang digunakan dalam proyek PPL kelompok kami:
Penjelasan:
Baris pertama : menspesifikasi docker image yang digunakan sebagai basis docker image yang sedang dibuat. kami menggunakan docker image python:3.8-alpine sebagai basis.
Baris keempat : membuat direktori /app untuk digunakan sebagai work directory. semua proses lainnya akan dilakukan pada directory ini.
Baris ketujuh-kesembilan: Me-set enviroment variable.
Baris ke-11 s.d. ke-23: Menginstall dependency
Baris ke-28 s.d. ke-34: meng-copy file-file proyek kedalam /app, supaya bisa dijalankan pada direktori /app.
Setelah Dockerfile dibuat, image akan dibuat berdasarkan dockerfile tersebut. dalam kelompok kami, image dibuat oleh gitlab. hal ini dilakukan menggunakan gitlab.ci.yml
setelah image dibuat, image tersebut akan di push, bisa dilihat pada line
docker push $HEROKU_STAGING_REGISTRY_IMAGE
image itu akan dipull oleh server heroku, dan digunakan untuk membuat container yang menjalankan aplikasi kelompok kami.