Daftar Isi
- 1 Memahami Pentingnya Docker dalam Pengelolaan VPS
- 2 Instalasi Docker dan Docker Compose
- 3 Menyiapkan Aplikasi Node.js dalam Docker
- 4 Menggunakan Docker Compose untuk Mengelola Container
- 5 Keamanan dalam Konteks Docker
- 6 Monitoring dan Maintenance Container
- 7 Kesalahan Umum dalam Penggunaan Docker
- 8 Studi Kasus: Deployment WordPress dengan Docker
- 9 Kesimpulan
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.jsondanpackage-lock.jsonke 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.
