Panduan Lengkap Docker Beginner untuk VPS dan Hosting

Memahami Pentingnya Docker dalam Pengelolaan VPS

Dalam dunia DevOps, kehadiran Docker telah mengubah cara kita mendeliver aplikasi dan mengelola server. Seiring bertambahnya pengguna yang mengakses aplikasi kita, beban server dapat meningkat secara signifikan. Tanpa manajemen yang tepat, kita bisa mengalami downtime yang merugikan. Skenario ini sering terjadi ketika kita mengandalkan metode deployment tradisional yang tidak efisien.

Dengan Docker, kita bisa mengisolasi aplikasi dalam container, memudahkan proses deployment, dan meningkatkan ketersediaan aplikasi. Dalam panduan ini, kita akan menjelajahi langkah demi langkah dalam menggunakan Docker untuk deployment aplikasi Node.js di VPS, menggunakan Docker Compose untuk mengelola beberapa container, serta menjaga keamanan dan monitoring aplikasi.

Instalasi Docker dan Docker Compose

Langkah pertama yang perlu dilakukan adalah menginstal Docker di VPS Anda.

Instalasi Docker di Ubuntu

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

Perintah di atas melakukan pembaruan pada package manager dan menginstal dependensi yang diperlukan untuk menambahkan repository Docker.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Dengan perintah ini, kita menambahkan kunci GPG resmi dari Docker untuk mengautentikasi paket yang kita unduh.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Perintah ini menambahkan repository Docker ke dalam daftar sumber paket kita.

sudo apt-get update
sudo apt-get install docker-ce

Sekarang, kita menginstal Docker Engine. Setelah proses selesai, jalankan perintah berikut untuk memastikan Docker terinstal dengan baik:

docker --version

Perintah ini akan menampilkan versi Docker yang terinstal.

Instalasi Docker Compose

Docker Compose adalah alat yang berguna untuk mendefinisikan dan menjalankan aplikasi multi-container. Untuk menginstalnya, kita dapat menggunakan perintah berikut:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Perintah ini mengunduh binary Docker Compose dan menyimpannya di direktori yang dapat diakses secara global.

sudo chmod +x /usr/local/bin/docker-compose

Kita memberikan izin eksekusi pada file yang baru diunduh. Setelah itu, kita dapat memverifikasi instalasi:

docker-compose --version

Menyiapkan Aplikasi Node.js dalam Docker

Pada tahap ini, kita akan membuat aplikasi Node.js sederhana yang akan kita jalankan dalam container Docker. Pertama, kita buat direktori untuk proyek kita:

mkdir node-docker-app
cd node-docker-app

Selanjutnya, kita inisialisasi proyek Node.js:

npm init -y

Dengan perintah ini, kita membuat file package.json secara otomatis dengan pengaturan default.

Membuat Aplikasi Sederhana

Selanjutnya, kita buat file app.js dan isi dengan kode berikut:

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

Di sini, kita menggunakan Express.js untuk membuat server sederhana. Sekarang kita perlu menambahkan Dockerfile untuk mengonfigurasi container yang akan menjalankan aplikasi kita.

Membuat Dockerfile

Buat file bernama Dockerfile dengan konten sebagai berikut:

FROM node:14

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000
CMD ["node", "app.js"]

Penjelasan dari setiap baris pada Dockerfile:

  • FROM node:14: Kita menggunakan image Node.js versi 14 sebagai basis.
  • WORKDIR /usr/src/app: Menetapkan direktori kerja dalam container.
  • COPY package*.json ./: Menyalin file package.json dan package-lock.json ke dalam container.
  • RUN npm install: Menjalankan perintah instalasi npm untuk menginstal dependensi.
  • COPY . .: Menyalin semua file dari direktori lokal ke dalam container.
  • EXPOSE 3000: Menginformasikan Docker bahwa aplikasi kita akan mendengarkan pada port 3000.
  • CMD [“node”, “app.js”]: Perintah yang dijalankan saat container dimulai.

Menggunakan Docker Compose untuk Mengelola Container

Docker Compose memungkinkan kita untuk mengelola beberapa container dengan lebih mudah. Mari kita buat file docker-compose.yml untuk mendefinisikan layanan yang kita butuhkan:

version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"

Dalam file ini:

  • version: ‘3’: Menetapkan versi Docker Compose yang digunakan.
  • services:: Mendefinisikan layanan yang akan dijalankan.
  • web:: Nama layanan kita, dapat kita ganti sesuai keinginan.
  • build: .: Menentukan konteks build dari Dockerfile yang ada di direktori saat ini.
  • ports:: Mengatur port mapping dari container ke host, memungkinkan kita untuk mengakses aplikasi melalui localhost:3000.

Untuk menjalankan aplikasi kita, gunakan perintah:

docker-compose up

Perintah ini akan membangun image dan menjalankan container berdasarkan definisi di docker-compose.yml.

Keamanan dalam Konteks Docker

Keamanan adalah salah satu aspek yang tidak boleh diabaikan dalam pengelolaan container. Menggunakan Docker dengan bijaksana dapat membantu kita mengurangi risiko keamanan.

1. Gunakan User Non-root

Secara default, container Docker dijalankan sebagai root. Untuk mengurangi risiko, kita harus menjalankan aplikasi kita sebagai user non-root dalam Dockerfile:

RUN useradd -ms /bin/bash appuser
USER appuser

Dengan menambahkan dua baris di atas, kita membuat user baru bernama appuser dan mengubah konteks eksekusi ke user tersebut.

2. Minimalkan Ukuran Image

Selalu gunakan base image yang kecil untuk mengurangi permukaan serangan. Misalnya, gunakan node:14-alpine sebagai pengganti node:14 untuk image yang lebih ringan.

3. Update Image Secara Berkala

Pastikan untuk memperbarui image Anda secara berkala untuk mendapatkan perbaikan keamanan terbaru. Gunakan perintah berikut untuk menarik image terbaru:

docker pull node:14-alpine

Monitoring dan Maintenance Container

Setelah aplikasi kita berjalan di dalam Docker, penting untuk melakukan monitoring dan maintenance secara berkala.

1. Menggunakan Prometheus dan Grafana

Prometheus adalah sistem monitoring yang populer yang dapat digunakan untuk mengumpulkan metrik dari container. Kombinasikan dengan Grafana untuk visualisasi data yang lebih baik. Dalam konteks Docker, kita dapat menambahkan service Prometheus ke dalam docker-compose.yml kita:

prometheus:
  image: prom/prometheus
  ports:
    - "9090:9090"
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml

File prometheus.yml harus didefinisikan untuk mengumpulkan metrik dari container.

2. Menggunakan ELK Stack

Untuk logging, kita bisa menggunakan ELK Stack (Elasticsearch, Logstash, Kibana). Ini akan membantu kita untuk mengumpulkan, menyimpan, dan menganalisis log dari aplikasi kita.

Kesalahan Umum dalam Penggunaan Docker

Walaupun Docker sangat berguna, ada beberapa kesalahan umum yang sering terjadi saat menggunakannya:

1. Tidak Menggunakan .dockerignore

Sering kali pengguna lupa untuk membuat file .dockerignore, yang dapat menyebabkan file yang tidak perlu ikut tersalin ke dalam image. Ini dapat memperbesar ukuran image dan mempengaruhi performa.

2. Tidak Mengelola Volume dengan Baik

Volume adalah bagian penting dari Docker untuk menyimpan data. Pastikan untuk mengelola volume dengan baik dan selalu gunakan volume untuk data yang perlu disimpan secara persisten.

3. Mengabaikan Update Keamanan

Seperti yang telah disebutkan sebelumnya, selalu periksa update keamanan untuk image yang digunakan dan lakukan pembaruan secara berkala.

Studi Kasus: Deployment WordPress dengan Docker

Untuk memberikan gambaran yang lebih jelas, mari kita lihat bagaimana cara mendeliver aplikasi WordPress menggunakan Docker dan Docker Compose. WordPress memerlukan web server (seperti Nginx atau Apache) dan database (seperti MySQL).

File docker-compose.yml untuk WordPress

version: '3'
services:
  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: password

Dengan konfigurasi di atas, kita mendefinisikan dua service: wordpress dan db. Pastikan untuk menyesuaikan detail pengguna dan password sesuai kebutuhan Anda.

Setelah file docker-compose.yml dibuat, jalankan perintah berikut untuk memulai layanan:

docker-compose up -d

Dengan perintah ini, kita menjalankan WordPress dan MySQL di background.

Kesimpulan

Docker adalah alat yang sangat powerful dalam mengelola aplikasi dan server. Dengan mengikuti panduan ini, Anda telah mempelajari cara untuk menginstal Docker, menyiapkan aplikasi Node.js, mengelola container dengan Docker Compose, serta mempertimbangkan aspek keamanan dan monitoring. Dengan pengetahuan ini, Anda dapat mulai menggunakan Docker dalam proyek Anda dan meningkatkan efisiensi deployment aplikasi.