Di tutorial Docker dan php ini kita akan belajar untuk membuat aplikasi php menggunakan Docker compose. Docker bisa digunakan untuk membuat aplikasi atau program php. Sehingga tidak perlu kawatir dengan perbedaan versi php antar komputer karena dapat ditentukan versi spesifik php yang digunakan. Video untuk tutorial ini dapat di akses di channel Youtube MyPHPtutorials di video berjudul Tutorial Docker & PHP: Membuat Aplikasi PHP Dengan Docker.
Pada tutorial Docker & php ini kita akan belajar:
Jika anda pernah menjalankan aplikasi php di server atau di komputer teman anda dan terjadi error sedangkan di komputer anda berjalan dengan baik? Bisa saja penyebabnya adalah perbedaan versi php atau perbedaan konfigurasi phpnya. Hal tersebut akan semakin sering terjadi jika teman anda menggunakan sistem operasi berbeda. Dengan Docker anda bisa membuat image yang didalam sudah ditentukan versi php-nya, konfigurasinya dan dependensi lainnya sehingga saat dijalankan di komputer lain atau server akan menberikan hasil yang sama.
Menurut halaman dokumentasi docker
"Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly"
Dalam bahasa indonesia:
"Docker adalah plalform terbuka untuk mengembangkan, mengirim, dan menjalankan aplikasi. Docker memungkin anda untuk memisahkan aplikasi anda dari infrastruktur sehingga anda dapat mengirim aplikasi lebih cepat."
Sedangkan container menurut website docker
"A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another"
Dalam bahasa Indonesia Artinya:
"Sebuah container adalah sebuah unit standar dari aplikasi yang mengemas kode dan semua dependensinya sehingga aplikasi berjalan dengan cepat dan handal dari satu komputer ke komputer lainnya"
Untuk menginstall Docker kalian dapat mengunjungi instruksi dari website Docker untuk masing masing sistem operasi:
Untuk bisa menjalankan sebuah aplikasi php maka dibutuhkan sebuah Docker image. Untuk membuat Docker image dibutuhkan sebuah file dengan nama Dockerfile dan sebuah base image. Untuk base image php bisa dicari di https://hub.docker.com/. Misalkan kita akan membuat aplikasi hello world. Buatlah sebuah folder src
dan di dalamnya buat file index.php
sederhana seperti:
<?php
echo 'Hello world';
?>
Kemudian sejajar dengan folder src
buat file Dockerfile di bawah
FROM php:8-apache
COPY src/index.php /var/www/html/
(Dokumentasi lengkap Dockerfile ada disini). Kemudian buka cmd atau terminal di mac/linux dan jalankan command di bawah.
docker build -t php-hello-world -f Dockerfile .
command di atas artinya membuat sebuah image dengan nama/tag php-hello-world
. Untuk lebih jelas silahkan lihat video tutorial.
Setelah memiliki sebuah image maka kita akan bisa menjalankan image tersebut dalam sebuah container. Cara menjalankan Docker image, gunakan cmd atau terminal di mac/linux dan jalankan command di bawah.
docker run --name hello -p 8888:80 -d php-hello-world
kemudian buka browser anda dan akses http://localhost:8888
. Untuk menghentikan container gunakan:
docker stop hello # <- dari --name di atas
untuk jalankan kembali gunakan
docker start hello
untuk melihat log dari php, misalnya terjadi error bisa dilihat dengan
docker logs -f hello
untuk menghapus container gunakan
docker rm hello
Dokumentasi lengkap Docker cli bisa dilihat di https://docs.docker.com/engine/reference/run/ atau dipenjelasan video tutorial.
Jika anda mengembangkan aplikasi dan mengubah kode aplikasi anda, maka anda harus membuat Docker imagenya kembali seperti di atas karena Docker image immutable. Anda bisa coba untuk mengedit index.php
dan tidak akan terjadi perubahan di browser seperti dijelaskan dalam video tutorial. Untuk itu anda membutuhkan fitur "bind mounts", sederhananya adalah sharing folder komputer kalian dengan folder di dalam container. Dengan contoh aplikasi hello world di atas kita bisa gunakan command di bawah:
docker run --name hello -p 8888:80 -d -v /path/to/src:/var/www/html php-hello-world
command sebelumnya ditambahkan dengan -v /path/to/src:/var/www/html
. Untuk /path/to/src
adalah folder yang ada di komputer kalian. Sedangkan /var/www/html
adalah folder di dalam container. Sekarang jika anda ubah kembali index.php
maka perubahan Anda akan terlihat di browser.
Aplikasi php cenderung tidak sesederhana hello world contoh di atas, tetapi menggunakan juga database. Kita dapat menggunakan docker compose. Docker compose adalah tool yang digunakan untuk menjalankan beberapa container sekaligus berdasarkan konfigurasi di dalam file YAML. Di bawah adalah contoh file docker-compose.yml
untuk menjalankan php, mysql dan phpMyAdmin sekaligus.
version: '3'
services:
php:
build: .
ports:
- "8888:80"
volumes:
- ./src:/var/www/html
depends_on:
- database
database:
image: mysql:8
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: change_me
MYSQL_DATABASE: tutorials
MYSQL_USER: tutorials_user
MYSQL_PASSWORD: change_me
volumes:
- database:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
ports:
- 8080:80
environment:
- PMA_ARBITRARY=1
depends_on:
- database
volumes:
database:
Untuk menjalankannya gunakan command di bawah
docker compose up -d
untuk stop
docker compose stop
untuk melihat log
docker compose logs -f
Di video tutorial docker & php dijelaskan lebih mendalam langkah langkah menggunakan Docker Compose.
Di tutorial Docker & php membuat aplikasi php dengan Docker ini kita telah belajar tentang kenapa mengunakan Docker, cara membuat Docker image, menjalankan container dan menghentikan container. Menggunakan bind mounts untuk sharing folder komputer ke dalam container. Kemudian menggunakan Docker Compose untuk membuat aplikasi php yang terhubung ke database dan juga ada phpMyAdmin untuk mengelola database dan tabelnya. Jika Anda memiliki pertanyaan silahkan gunakan kolom komentar di bawah. Selamat Mencoba.
“Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc. in the United States and/or other countries. Docker, Inc. and other parties may also have trademark rights in other terms used herein.”