Introduction
Pada artikel kali ini saya akan sharing mengenai bagaimana cara containerize atau deployment aplikasi berbasis laravel yang biasa saya setup dengan VM/server, dan sekarang akan men delploy aplikasi base container. Sebenarnya perbedaan mendasar adalah jika menggunakan base VM/server “eksekusi syntaxnya satu persatu” dan jika container “eksekusi syntaxnya di buat by scirpt / code dengan variable-variable yang telah disediakan”.
Baca juga : “Cara Install Docker CE di Ubuntu”
Langkah-langkah : Containerize Laravel Application with Docker Compose
Simak langkah-langkah berikut agar saat menjalankan docker compose up -d berjalan.
Step 1 – Download repo Laravel
Download terlebih dahulu source code berikut ini dan clone di local machines anda git clone https://github.com/gunawan-d/laravel-apache.git
Step 2 – Create Docker Compose
Membuat file docker-compose.yml didalam direktori laravelapp setelah itu dockerize dan masukan script yang dibutuhkan untuk membuild aplikasi anda dan disini saya akan membuat docker compose untuk build aplikasi Laravel yang menggunakan PHP 7.4, web server apache dan juga database MySQL:
$ touch docker-compose.yml
version: '3.7'
services:
app:
build:
context: .
dockerfile: .docker/Dockerfile
image: 'laravelapp'
container_name: laravelapp
ports:
- "8080:80"
volumes:
- ./:/var/www/html
db:
image: mysql:5.7
container_name: db_1
restart: always
ports:
- "3308:3306"
environment:
MYSQL_DATABASE: 'laratest_db'
MYSQL_ROOT_PASSWORD: 12345
MYSQL_PASSWORD: ""
volumes:
- ./database/dbdata:/var/lib/mysql
networks:
laravelapp:
driver: bridge
Step 3 – Setup laravel development environment menggunakan Dockerfile
Setelah itu kita akan membuat dockerfile dengan menyesuaikan environment yang kita buat di compose.
$ mkdir -p .docker $ touch .docker/Dockerfile
FROM php:7.4.1-apache
USER root
WORKDIR /var/www/html
RUN apt-get update && apt-get install -y \
libpng-dev \
zlib1g-dev \
libxml2-dev \
libzip-dev \
libonig-dev \
zip \
curl \
unzip \
&& docker-php-ext-configure gd \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install zip \
&& docker-php-source delete
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN chown -R www-data:www-data /var/www/html \
&& a2enmod rewrite
Step 4 – Create virtualhost
Create file virtualhost untuk webserver, yang biasa kita gunakan dan menyesuaikan environment disini saya menaruh file tersebut di dalam folder .docker/
$ touch .docker/vhost.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/public
<Directory "/var/www/html">
AllowOverride all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Step 4 – Running Docker Compose
Setelah kita sudah melewati langkah-langkah diatas selanjutnya running docker composenya, dengan menggunakan syntax berikut :
$ docker-compose up -d
Check apakah container running sesuai dengan environment atau script yang kita buat, dan disini ada 2 container
- Laravel & Apache
- MySQL database

Step 5 – Laravel Database Conection
Selanjutnya kita membuat file .env yang dimana nantinya file tersebut yang akan mengkoneksikan database dan juga aplikasinya, untuk membuat file .env ini di dalam folder project kita ya.
$ touch .env
---- DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3308 DB_DATABASE=laratest_db DB_USERNAME=root DB_PASSWORD=12345 ----
Step 6 – Exec to container
Saat container sudah running database juga sudah dikoneksikan, akan tetapi website masih error saat diakses, selanjutnya adalah kita haru melakukan hal ini.
$docker exec -it "ID-container/nama-container" bash
# composer install
# php artisan key:generate
# php artisan config:cache
Setelah itu silahkan akses web kalian http://localhost:8080


Admin website igunawan.com, System Administrator, DevOps Engineer