Bismillah…
Beberapa tahun belakangan kita tentu sering mendengar istilah docker dan kontainerisasi. Nah pada tulisan saya kali ini kita akan langsung mempraktekkan bagaimana cara men-deploy atau memasang website yang sebelumnya sudah kita buat kedalam sebuah container. Sebelum memulai, ada baiknya kita mengerti terlebih dahulu apa itu container dan apa itu docker.
Berikut adalah langkah-langkah untuk melakukan deploy website ke docker :
Beberapa tahun belakangan kita tentu sering mendengar istilah docker dan kontainerisasi. Nah pada tulisan saya kali ini kita akan langsung mempraktekkan bagaimana cara men-deploy atau memasang website yang sebelumnya sudah kita buat kedalam sebuah container. Sebelum memulai, ada baiknya kita mengerti terlebih dahulu apa itu container dan apa itu docker.
- Container Container yang dimaksud disini merupakan wadah yang digunakan untuk menempatkan seluruh kebutuhan aplikasi baik itu web server, database ataupun kebutuhan lainnya yang dibutuhkan oleh aplikasi kita tadi supaya bisa berjalan layaknya di komputer lokal.
- Docker Docker merupakan salah satu platform yang bisa digunakan sebagai container/wadah untuk menempatkan seluruh kebutuhan software yang kita butuhkan. Docker seperti halnya sebuah VM yang berjalan di mesin virtual, hanya saja docker lebih ringan daripada VM yang membutuhkan resource lebih besar daripada docker.
Dengan menggunakan docker, kita bebas memilih versi bahasa pemrograman, database, library dan software lainnya tanpa khawatir terjadi bentrok antara 1 aplikasi dengan aplikasi lainnya, karena docker bersifat isolate dimana konfigurasi sebuah project anda tidak akan mengganggu konfigurasi dan kebutuhan project yang lain.
Misalnya saya memiliki 2 buah project, dimana project 1 menggunakan php versi 7.4 sedangkan project kedua menggunakan php versi 8.0 maka antara 2 project tersebut tidak mungkin terjadi bentok karena masing-masing project sudah memiliki container dan konfigurasi terisolasi masing-masing.
Berikut adalah langkah-langkah untuk melakukan deploy website ke docker :
- Didalam project website anda, buat sebuah direktori/folder bernama docker-config kemudian tambahkan lagi didalamnya direktori mysql, nginx dan php seperti berikut ini:
- Didalam direktori mysql, buat sebuah direktori baru dengan nama db. Kemudian tempatkan di dalam direktori db ini database dari website yang anda buat sebelumnya.
- Selanjutnya beralih ke direktori nginx, buat sebuah file docker dengan nama web.dockerfile. Kemudian masukkan konfigurasi seperti dibawah ini didalam file tersebut :
- Masih di direktori yang sama, tambahkan lagi sebuah file vhost.conf, dimana file ini berisi konfigurasi untuk nginx.
- Beralih ke direktori php yang sudah dibuat sebelumnya, buat sebuah file php.dockerfile, lalu masukkan konfigurasi seperti dibawah ini :
- Selanjutnya kembali ke direktori awal project. Lalu buat sebuah file docker-compose.yml. Didalam file inilah kita akan mendeklarasikan seluruh kebutuhan guna menjalankan website kita tadi.
- Setelah seluruh file tersebut dibuat, jalankan docker-compose di terminal/command line anda dengan perintah :
- Tunggu hingga proses selesai, dan jalankan website anda di http://localhost:8080
FROM nginx:1.21.4-alpine
ADD ./docker-config/nginx/vhost.conf /etc/nginx/conf.d/default.conf
server {
listen 80;
index index.php index.html;
root /var/www/public/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
FROM php:8.0.5-fpm-alpine
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
version: '3'
services:
web:
build:
context: ./
dockerfile: ./docker-config/nginx/web.dockerfile
container_name: inventory-webserver
volumes:
- ./:/var/www/public
ports:
- "8080:80"
networks:
- app-network
app:
build:
context: ./
dockerfile: ./docker-config/php/php.dockerfile
container_name: inventory
volumes:
- ./:/var/www/public
networks:
- app-network
links:
- database
depends_on:
- database
database:
image: mariadb
container_name: inventory_database
restart: unless-stopped
tty: true
ports:
- "3307:3306"
environment:
MYSQL_DATABASE: inventory_sample
MYSQL_ROOT_PASSWORD: 12345
SERVICE_NAME: mysql
SERVICE_TAGS: dev
volumes:
- dbdata:/var/lib/mysql/
- ./docker-config/mysql/db:/docker-entrypoint-initdb.d
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
dbdata:
driver: local
docker-compose up
No comments:
Post a Comment
Komentar yang bermutu Insyaallah akan mendapatkan berkah