Belajar Docker dalam 15 Menit
Sebuah crash course tentang Docker yang akan menjadikan dirimu ahli DevOps hanya dalam 15 menit
Posted on 02/09/2021
15 menit, here we go.
Docker adalah software, menyerupai Virtual Machine yang biasanya dipakai orang-orang untuk menjalankan suatu operating system di dalam sebuah operating system.
Tapi, Docker cara kerjanya berbeda dengan Virtual Machine. Saya nggak hafal persis apa perbedaannya, tapi yang penting buat kamu: Docker jauh lebih ringan dari Virtual Machine.
Lalu kenapa kita harus pakai Docker?
- Bisa menyamakan development environment dan production environment, tanpa harus ke server production
- Untuk menyamakan development environment antar anggota tim.
- Agar meme ini tidak terjadi di kehidupan mu:
Misalnya, sebuah aplikasi yang harus jalan di operating system Linux Debian versi 10. Sebelum jalanin servernya, kamu perlu install beberapa package dulu dari APT.
Kalau kamu jalanin ini satu-satu, kan capek ya. Docker mempermudah itu dengan bikin steps-steps yang ada di dalam satu file: Dockerfile (tanpa ekstensi apapun, bener-bener Dockerfile
tok).
Instalasi
Kalau kamu di Windows, install Docker Desktop dari link ini. Kalau kamu di Mac, install juga Docker Desktop dari link ini.
Nah.. kalau kamu di Linux, sesuaikan dengan distro yang kamu pakai ya. Petunjuk instalasinya ada di link ini.
Khusus Linux, kamu harus install docker-compose
terpisah, nggak include dalam bundle instalasi Docker Engine tadi. Install dari link ini.
Dockerfile
FROM node:16.6.2-buster
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 8080
CMD ["npm", "start"]
Itu contoh sederhana dari sebuah Dockerfile. Steps-nya bisa dijelaskan seperti ini:
- Kita mulai dari base image Node.js versi 16.6.2 dengan operating system Debian Buster
cd
(change directory) ke folder/app
- Copy file yang ada di host (komputer kamu, directory yang ada Dockerfilenya doang) ke Docker
- Jalanin
npm install
- Buka port 8080 ke host (komputer kamu)
- Jalanin
npm start
, dan nyala terus.
Semua command itu cara jalaninnya cuma 2 langkah ini:
docker build -t namaAplikasi:1.0 .
untuk build image Dockernya, dandocker run -p 8080:8080 namaAplikasi:1.0
untuk jalanin imagenya.
Setelah itu kamu bisa buka web browser favoritmu, buka http://localhost:8080
dan kamu bakal lihat aplikasi mu jalan.
Keyword di Dockerfile yang umum dipakai biasanya ini:
# Komentar di Dockerfile gini caranya
# FROM biasanya di 1 image cuma satu
# Kecuali kamu mau bikin multi-stage build
# sayangnya nggak dibahas disini, hehe :)
FROM (image)
FROM python:3.9-buster
FROM golang:1.17.0-alpine3.13
WORKDIR (set current working directory)
WORKDIR /app
WORKDIR /home/usr/app
# Command ini bisa kamu lakuin berkali-kali
RUN (jalanin command di shell)
RUN pip install
RUN go
# COPY ini bisa menerima Glob
COPY (literally copy)
COPY package*.json .
COPY . .
ENV (kasih environment variable)
ENV PORT=3000
ENV SECRET_KEY=ajsdfnsidjfnWDIJRN
# Kamu juga bisa buka lebih dari 1 port
# kalau app nya emang mau expose lebih dari 1 port
EXPOSE (buka port)
EXPOSE 9229
EXPOSE 81
ARG (argument kalo punya)
CMD (main command)
CMD ["./app"]
CMD ["node", "index.js"]
Docker Image
Hasil build tadi itu disebut sebagai docker image
. Docker image ini bisa jalan kapan aja, dimana aja, nggak peduli apa komputer mu.
Lalu gimana kalau kamu nggak mau bikin image? Kamu udah nemu suatu image di Docker Hub yang kamu mau coba, dan mau langsung jalanin di laptopmu.
Easy, tinggal docker pull
dan docker run
. Sesimpel itu.
Misalnya karena laptopmu Windows, kamu nggak bisa jalanin Redis (database untuk caching), kamu bisa:
docker pull redis:6.2.5-alpine
docker run -p 6379:6379 redis:6.2.5-alpine
Done! Redis udah jalan di Docker, dan kamu bisa akses ke database Redis tanpa pusing install dan konfigurasi sana sini.
Docker Hub
Loh lalu itu redis:6.2.5-alpine
tadi dapat darimana?
Docker mempunyai registry mereka sendiri untuk menyimpan docker image, yaitu Docker Hub. Disini juga kamu bisa cari base image apa yang bisa kamu pakai untuk bagian FROM something
di Dockerfile mu.
Anggep semacam Github, bukan buat Git repository, tapi untuk Docker Image.
Canggih kan Docker? Just wait, it's getting more canggih.
Docker Compose
Tadi yang anak Linux saya suruh install Docker Compose terpisah. Untuk apa sih?
Anggep kamu punya satu Dockerfile dan beberapa Docker Image yang kamu ambil dari Docker Hub. Kamu mau jalanin semua itu bersamaan. Gimana caranya?
Ribet kan ya kalau jalanin 1 app dari Dockerfile, terus database PostgreSQL dan Redis di 3 terminal terpisah.
Docker Compose to the rescue!
Sederhananya, Docker Compose adalah beberapa Docker image yang di compose jadi satu. Makanya namanya itu Docker Compose.
Kamu tinggal buat file docker-compose.yml
, yang isinya bisa seperti ini:
services:
database:
image: postgres:13.4-alpine # Image dari docker hub
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: verysecure
cache:
image: redis:6.2-alpine # Image dari docker hub
restart: always
ports:
- 6379:6379
app:
# Anggep Dockerfile nya ada di directory yang sama dengan docker-compose.yml
build: . # Image dari Dockerfile dan harus build dulu
restart: always
ports:
- 8080:8080
Cara jalaninnya?
docker-compose up
Done!
Keluar dari Docker
Biar nggak kayak orang yang pertama kali pakai Vim, nggak tahu cara exit Vim, panik, dan shutdown komputer langsung.
Kalau kamu mengikuti cara jalanin Docker yang saya sebut tadi, kemungkinan besar aplikasi Docker-nya jalan terus di terminal. Cara untuk keluar adalah Ctrl + C (atau Cmd + C untuk Mac). Kalau mau Docker jalan di background, kamu bisa:
- Kalau Docker Image biasa (yang pakai
docker run
):docker run -d <nama image>
- Kalau Docker Compose:
docker-compose up -d
Kalau ikutin cara ini, kan Dockernya nggak ada di terminal. Lalu matiinnya gimana?
- Kalau Docker Image biasa:
docker stop <nama image>
- Kalau Docker Compose:
docker-compose stop
Selamat! Kamu sudah jago Docker. Dimana lagi bisa bermain Docker? Heroku support deploy aplikasi pakai Docker, Github Actions support Docker, VPS (kalau punya) juga bisa kok di install Docker.