Docker

Indra Septama
PPL C6 Big Data
Published in
3 min readMay 2, 2019

Latar belakang

Dalam membuat sebuah produk aplikasi, selain mengerjakan program (code) kita juga perlu memikirkan deployment dari aplikasi tersebut. Dalam deployement, pengembang biasanya menjalankan virtualisasi pada server sehingga proses pembuatan program dapat berjalan pada berbagai platform maupun konfigurasi hardware. Virtualisasi adalah kegiatan membuat virtual machine, atau mesin palsu. Bisa dibayangkan dengan banyaknya virtualisasi yang berjalan di sebuah server akan memberatkan sistem tersebut.

Container

Container kemudian datang dan membawa beberapa perubahan. Dengan container, sebuah program ‘diikat’ beserta library-nya, file konfigurasi, dan seluruh hal yang dibutuhkannya. Perbedaan yang sangat terlihat dibandingkan dengan virtualisasi adalah container memiliki ukuran file yang jauh lebih kecil karena tidak perlu menyiapkan sistem operasi secara penuh. Dalam hal ini, pengembang biasa menyebutnya sebagai ‘lightweight’ platform. Aplikasi yang berjalan menggunakan container pun jauh lebih cepat dan lebih efisien.

Konsep docker

Docker adalah salah satu platform yang dibangun berdasarkan teknologi container. Berikut adalah arsitektur dari docker.

  • Docker Container : adalah virtual machine atau guest operating system. Aplikasi kita berjalan di dalam docker container dan merasa bahwa dia berjalan di dalam sistem operasi biasa. Docker container berjalan di atas docker engine.
  • Docker Client : adalah seperangkat perintah command line untuk mengoperasikan docker container, misalnya membuat container, start/stop container, menghapus (destroy), dan sebagainya. Docker client hanya bertugas mengirim perintah saja. Pekerjaan sesungguhnya dilakukan oleh docker daemon.
  • Docker Daemon : adalah aplikasi yang berjalan di host machine. Docker server berjalan di background (sebagai daemon) dan menunggu perintah dari docker client. Begitu mendapatkan perintah, docker server bekerja membuat container, menjalankan/mematikan container, dan sebagainya.
  • Docker Engine : adalah gabungan aplikasi yang menjalankan docker container, docker client, dan docker daemon. Dia menyediakan layanan umum agar container dapat berjalan dengan baik, misalnya: networking, storage, alokasi memori, CPU, dan sebagainya.
  • Docker Image : adalah template yang digunakan untuk membuat container. Contohnya, ada image Ubuntu, CentOS, dan sebagainya. Kita juga bisa membuat image baru dari image yang lama. Misalnya kita buat image Ubuntu yang sudah terinstal Java dan MySQL.
  • Docker Machine : adalah sistem untuk mengelola docker engine. Dia bisa menginstal engine baru di berbagai target. Saat ini dia mendukung VirtualBox, Digital Ocean, dan Amazon. Dengan Docker Machine, kita bisa membuat dan menjalankan container dengan docker client, dan hasilnya container kita berjalan di local (dengan VirtualBox) atau di cloud (dengan DigitalOcean atau Amazon).

Implementasi dalam projek

Docker file

FROM node:10.15.1-alpine

RUN echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf
RUN npm install -g serve
WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY . /app
RUN npm run build

EXPOSE 3000
CMD ["serve", "-s build"]

Dan untuk automated deploynya, terdapat dalam .gitlab-ci-yml

image: docker:stable
services:
- docker:dind

before_script:
- docker info

build:
tags:
- docker
script:
- docker pull $DOCKER_IMAGE_NAME:latest || true
- docker build --cache-from $DOCKER_IMAGE_NAME:latest -t $DOCKER_IMAGE_NAME:$CI_COMMIT_SHA -t $DOCKER_IMAGE_NAME:latest .
- docker run $DOCKER_IMAGE_NAME sh -c "npm test -- --coverage"
- docker run $DOCKER_IMAGE_NAME sh -c "npm run lint"
- docker push $DOCKER_IMAGE_NAME:$CI_COMMIT_SHA
- docker push $DOCKER_IMAGE_NAME:latest

Refleksi

Dalam pengerjaan projek ini, saya sama sekali tidak membantu dalam masalah docker dan deployment. Hampir semua hal yang berhubungan dengan docker dikerjakan oleh Muhammad Ashlah Shinfain. Semoga kedepannya saya dapat lebih berkontribusi.

--

--