Cara menggunakan docker-php fpm pdo mysql

hai… udah lama gak nulis blog lagi. berhubung saya juga baru pertama kali experimen di docker, saya menulis agar suatu saat saya butuh saya membuka blog ini kembali.

langsung saja….

Docker adalah sebuah aplikasi yang bersifat open source yang berfungsi sebagai wadah/container untuk mengepak/memasukkan sebuah software secara lengkap beserta semua hal lainnya yang dibutuhkan oleh software tersebut dapat berfungsi.

di sini kita kan membuat docker yang berjalan dengan sebuah framework laravel.

Install laravel bisa dengan clone dari repo github atau lewat composer.saat blog ini dibuat saya menggunakan laravel versi 7

composer create-project --prefer-dist laravel/laravel laravel_docker_projectcd laravel_docker_projectmkdir -p nginx/conf.dmkdir php

setelah kita buat folder dengan perintah di atas kita lanjut untuk membuat beberapa file docker diantaranya 1. docker-compose.yml, 2. Dockerfile, 3. config nginx app.conf, 4. config php.ini

oh ya untuk yang baru belajar docker dan belum mengerti dasar, mungkin link ini membantu sama seperti saya sebelum mengerti dasar docker disini.

  1. docker-compose.yml
touch docker-compose.yml

isi file docker-compose.yml seperti di bawah

NB: jangan copypaste, usahakan ketik.

version: '3'services:#PHP Serviceapp:build:context: .dockerfile: Dockerfileimage: php_servicecontainer_name: apprestart: unless-stoppedtty: trueenvironment:SERVICE_NAME: appSERVICE_TAGS: devworking_dir: /var/wwwvolumes:- ./:/var/www- ./php/local.ini:/usr/local/etc/php/conf.d/local.ininetworks:- app-network#Nginx Servicewebserver:image: nginx:alpinecontainer_name: webserverrestart: unless-stoppedtty: trueports:- "88:80"- "443:443"volumes:- ./:/var/www- ./nginx/conf.d/:/etc/nginx/conf.d/networks:- app-network#MySQL Servicedb:image: mysqlcontainer_name: dbrestart: unless-stoppedtty: trueports:- "33061:3306"environment:MYSQL_DATABASE: laravelMYSQL_USER: amrilsyaifaMYSQL_PASSWORD: qwerty1234MYSQL_ROOT_PASSWORD: qwerty1234SERVICE_TAGS: devSERVICE_NAME: mysqlnetworks:- app-network#PHPMyAdmin Servicephpmyadmin:container_name: phpmyadminimage: phpmyadmin/phpmyadminports:- "7000:80"links:- db:dbenvironment:MYSQL_USER: amrilsyaifaMYSQL_PASSWORD: qwerty1234MYSQL_ROOT_PASSWORD: qwerty1234UPLOAD_LIMIT: 3000000000networks:- app-network#Docker Networksnetworks:app-network:driver: bridge#Volumesvolumes:lbdata:driver: local

2. Dockerfile

touch Dockerfile

isi file Dockerfile seperti di bawah ini

FROM php:7.2-fpm# Copy composer.lock and composer.jsonCOPY composer.lock composer.json /var/www/# Set working directoryWORKDIR /var/www# Install dependenciesRUN apt-get update && apt-get install -y \build-essential \libmcrypt-dev \mariadb-client \libpng-dev \libjpeg62-turbo-dev \libfreetype6-dev \locales \zip \jpegoptim optipng pngquant gifsicle \vim \unzip \git \curl# Clear cacheRUN apt-get clean && rm -rf /var/lib/apt/lists/*# Install extensionsRUN docker-php-ext-install pdo_mysql mbstring zip exif pcntlRUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/RUN docker-php-ext-install gd# Install composerRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# Add user for laravel applicationRUN groupadd -g 1000 wwwRUN useradd -u 1000 -ms /bin/bash -g www www# Copy existing application directory contentsCOPY . /var/www# Copy existing application directory permissionsCOPY --chown=www:www . /var/www# Change current user to wwwUSER www# Expose port 9000 and start php-fpm serverEXPOSE 9000CMD ["php-fpm"]

3. app.conf

touch nginx/conf.d/app.conf

isi app.conf seperti di bawah ini

server {listen 80;index index.php index.html;error_log  /var/log/nginx/error.log;access_log /var/log/nginx/access.log;root /var/www/public;location ~ \.php$ {try_files $uri =404;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;}location / {try_files $uri $uri/ /index.php?$query_string;gzip_static on;}}

4. php.

touch php/local.ini

isi file local.ini seperti di bawah

upload_max_filesize=40Mpost_max_size=40Mmax_execution_time = 180memory_limit = 3000M

Jika sudah kita lanjut untuk build container dengan mengetik perintah di bawah

docker-compose up -d

jika image di dalam docker belum ada maka dia akan download di docker hub. pastikan tidak ada error dan ada keterangan done seperti gambar di bawah.