"Siapa bilang deploy aplikasi harus ribet? Dengan Docker dan CI/CD, deployment bisa sesederhana klik tombol. Tulis kode, minum kopi, dan voilà !"
Deploying aplikasi ke produksi bisa jadi hal yang menegangkan. Kalau dilakukan secara manual, bisa jadi masalah besar dan memakan banyak waktu. Tapi, dengan Docker dan CI/CD (Continuous Integration/Continuous Delivery), proses ini bisa jauh lebih mudah, cepat, dan bahkan menyenangkan (serius, kita nggak bercanda!).
Di artikel ini, kita akan membahas langkah-langkah untuk men-deploy aplikasi dengan Docker dalam alur CI/CD. Kami akan tunjukkan bagaimana Docker bekerja dengan alur kerja otomatis agar aplikasi kamu bisa berjalan di produksi tanpa drama. Siap untuk deploy? Let's go!
1. Apa Itu CI/CD dan Kenapa Docker Sangat Sesuai?
Sebelum kita membahas cara men-deploy aplikasi dengan Docker, mari kita pahami dulu apa itu CI/CD.
-
Continuous Integration (CI) adalah praktek penggabungan kode secara rutin ke dalam repositori utama. Setiap kali ada perubahan, kode tersebut diuji secara otomatis agar tim bisa mendeteksi kesalahan lebih cepat.
-
Continuous Delivery (CD) adalah tahap berikutnya setelah CI, yang memastikan aplikasi selalu siap untuk di-deploy ke produksi kapan saja. Jadi, tim pengembang bisa mengirimkan perubahan ke pelanggan lebih cepat.
Nah, Docker berperan sebagai penghubung dalam alur CI/CD ini. Dengan Docker, kita bisa memastikan aplikasi yang kita buat berjalan di container yang konsisten di semua lingkungan (pengembangan, pengujian, dan produksi).
Docker menyediakan Docker image yang berisi aplikasi beserta dependensinya. Jadi, aplikasi yang berjalan di laptop pengembang akan berjalan dengan cara yang sama di server produksi. Magic, kan?
2. Membangun Docker Image dan Men-deploy ke Registry Docker
Sebelum kita melakukan deploy aplikasi ke lingkungan produksi, kita perlu membangun Docker image dari aplikasi kita.
Langkah-langkahnya:
-
Membuat Dockerfile
Di setiap aplikasi Docker, kita harus menulis file bernama Dockerfile. Ini adalah petunjuk untuk Docker tentang bagaimana cara membangun image.Misalnya, untuk aplikasi Node.js, Dockerfile-nya bisa seperti ini:
# Menggunakan image Node.js sebagai base FROM node:14 # Menetapkan direktori kerja dalam container WORKDIR /app # Menyalin file aplikasi ke dalam container COPY . . # Menginstal dependensi aplikasi RUN npm install # Menyediakan port yang akan digunakan oleh aplikasi EXPOSE 3000 # Menjalankan aplikasi CMD ["npm", "start"]
Dengan Dockerfile ini, Docker akan membangun image aplikasi kamu, menginstal dependensi, dan menjalankan aplikasi di dalam container.
-
Membangun Docker Image
Setelah Dockerfile siap, kamu bisa membangun image menggunakan perintah:docker build -t username/app-name:tag .
Image ini akan menjadi versi siap-deploy dari aplikasi kamu, yang bisa disalin ke server produksi.
-
Mendorong Docker Image ke Docker Registry
Setelah image dibangun, kita perlu mendorongnya ke Docker Registry, seperti Docker Hub atau registry pribadi agar dapat digunakan di server produksi. Gunakan perintah:docker push username/app-name:tag
Dengan Docker Hub sebagai tempat penyimpanan, kita bisa memastikan bahwa aplikasi selalu dapat diakses untuk deployment di berbagai lingkungan.
3. Mengatur CI/CD Pipeline untuk Deploy Docker Image
Sekarang saatnya untuk mengotomatiskan alur kerja dengan CI/CD pipeline. Ini adalah langkah kunci untuk membuat deployment aplikasi lebih efisien dan bebas stres.
Di sini, kita akan menggunakan Jenkins atau GitLab CI untuk mengatur pipeline otomatis yang akan membangun dan mendorong Docker image ke registry dan kemudian melakukan deployment ke server produksi.
Jenkins Pipeline untuk Deploy Aplikasi dengan Docker:
-
Install Plugin Docker di Jenkins
Pastikan Jenkins kamu sudah terpasang plugin Docker, yang memungkinkan Jenkins menjalankan perintah Docker di dalam pipeline. -
Menulis Jenkinsfile untuk Pipeline CI/CD
Berikut adalah contoh Jenkinsfile untuk membangun dan mendorong Docker image, lalu men-deploy aplikasi ke server produksi menggunakan Docker:pipeline { agent any environment { DOCKER_REGISTRY = "docker.io" DOCKER_IMAGE_NAME = "username/app-name" DOCKER_IMAGE_TAG = "latest" PROD_SERVER = "prod.server.com" } stages { stage('Build') { steps { script { // Membangun Docker image sh 'docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG .' } } } stage('Push') { steps { script { // Login ke Docker Registry sh 'docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD' // Mendorong Docker image ke registry sh 'docker push $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG' } } } stage('Deploy to Production') { steps { script { // Deploy Docker container ke server produksi sh """ ssh user@$PROD_SERVER 'docker pull $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG' ssh user@$PROD_SERVER 'docker stop app-container || true' ssh user@$PROD_SERVER 'docker rm app-container || true' ssh user@$PROD_SERVER 'docker run -d --name app-container $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG' """ } } } } }
Di Jenkinsfile ini:
- Stage 'Build': Membangun Docker image dari Dockerfile.
- Stage 'Push': Mendorong image ke Docker Registry.
- Stage 'Deploy to Production': Menggunakan SSH untuk login ke server produksi dan menarik (pull) image terbaru, kemudian menjalankan container dengan image tersebut.
GitLab CI Pipeline untuk Deploy Docker:
Jika kamu menggunakan GitLab CI, berikut adalah contoh file .gitlab-ci.yml
:
stages:
- build
- push
- deploy
variables:
DOCKER_REGISTRY: "docker.io"
DOCKER_IMAGE_NAME: "username/app-name"
DOCKER_IMAGE_TAG: "latest"
PROD_SERVER: "prod.server.com"
build:
stage: build
script:
- docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG .
push:
stage: push
script:
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
- docker push $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG
deploy:
stage: deploy
script:
- ssh user@$PROD_SERVER 'docker pull $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG'
- ssh user@$PROD_SERVER 'docker stop app-container || true'
- ssh user@$PROD_SERVER 'docker rm app-container || true'
- ssh user@$PROD_SERVER 'docker run -d --name app-container $DOCKER_REGISTRY/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG'
4. Manfaat Deploy Aplikasi dengan Docker dalam CI/CD
- Automasi: Dengan CI/CD, kamu bisa mengotomatisasi seluruh proses deployment. Cukup klik tombol, dan semua pekerjaan berat ditangani oleh pipeline.
- Konsistensi: Aplikasi yang dibangun dengan Docker berjalan di container yang konsisten di semua lingkungan. Kamu nggak perlu khawatir tentang masalah “Works on my machine”.
- Keamanan: CI/CD memastikan bahwa hanya image yang sudah teruji yang bisa di-deploy ke produksi.
- Cepat dan Efisien: Proses deploy bisa berlangsung hanya dalam hitungan menit, memungkinkan kamu untuk melakukan deployment sering dan dengan cepat.
5. Kesimpulan: Deployment dengan Docker Itu Asik dan Cepat!
Men-deploy aplikasi dengan Docker dalam alur CI/CD memberikan banyak keuntungan—kecepatan, konsistensi, dan kemudahan. Dengan pipeline otomatis, kamu bisa menghindari kerumitan manual deployment dan memastikan bahwa setiap aplikasi yang di-deploy sudah siap dan teruji dengan baik.
Jadi, jika kamu belum menggunakan Docker dalam CI/CD pipeline, sudah saatnya mulai! Dengan Docker, kamu bisa deploy aplikasi dengan cepat, aman, dan tanpa drama!
Punya tips deployment Docker lainnya? Share yuk di kolom komentar!
0 Comments