Containerize Laravel Application with Docker Compose

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

  1. Laravel & Apache
  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *