Sekarang saya pakai docker dalam pengembangan web dengan framework Ci4. Sebelumnya saya sering pakai environment lengkap seperti xampp ataupun Laragon. Tetapi karena saya memiliki beberapa project legacy yang masih pakai dependency lama, seperti php 7 atau yang lain, sehingga kadang kesulitan menyesuaikan atau mengganti dependency jika pakai Xampp atau Laragon. Apalagi kalau ada project paralel yang harus pakai dua versi php yang berbeda.
Dengan pengembangan berbasis kontainer seperti Docker, kita bisa mengatur lingkungan yang berbeda setiap project. Lingkungan pengembangan satu project bisa kita buat independen terhadap project lain. Kita juga bisa jalankan dua project itu secara bersamaan tanpa mengganggu project yang lain.
Untuk kasus Ci4 dan bisa juga untuk framework lain sejenis, kita bisa pisahkan direktori untuk public dan private. Tujuannya diantaranya untuk keamanan dan konsistensi git workflow.
Misalhnya kita bisa buat struktur direktori seperti berikut:
project_directory
|- docker-compose.yml
|- Dockerfile
|- src
|-- private
|-- public
Kita bisa masukkan semua code ci4 di direktori private. Kemudian copy isi dari direktori public dalam ci4 ke src/public. Kemudian kita mapping src/public ke document root dalam kontainer. Kita map juga direktori private ke server.
Berikut docker compose nya:
name: 'ci4zuriah'
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: zuriah_app
ports:
- "8080:80"
volumes:
- ./src/public:/var/www/html
- ./src/private:/var/www/private
- ./docker/php.ini:/usr/local/etc/php/php.ini
depends_on:
- db
networks:
- ci4net
db:
image: arm64v8/mysql:9.4.0-oracle
container_name: zuriah_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: ci4db
MYSQL_USER: ci4user
MYSQL_PASSWORD: ci4pass
ports:
- "3356:3306"
volumes:
- dbdata:/var/lib/mysql
networks:
- ci4net
phpmyadmin:
image: arm64v8/phpmyadmin:5.2
container_name: zuriah_myadmin
restart: always
ports:
- "8051:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: rootpass
UPLOAD_LIMIT: 10M
depends_on:
- db
networks:
- ci4net
volumes:
dbdata:
networks:
ci4net:
Dockerfile
FROM php:8.3-apache
# Install dependencies
RUN apt-get update && apt-get install -y \
libicu-dev \
libpq-dev \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
unzip \
curl \
zip
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- \
&& mv composer.phar /usr/local/bin/composer
# Aktifkan ekstensi PHP
RUN docker-php-ext-configure gd \
--with-freetype \
--with-jpeg \
&& docker-php-ext-install \
gd \
intl \
mysqli \
pdo \
pdo_mysql
# Aktifkan mod_rewrite Apache
RUN a2enmod rewrite
# Restart Apache agar perubahan berlaku
RUN service apache2 restart
Kediri, 20 oct 2025