Saturday, February 16, 2019

Mysql-PHP-PHPmyadmin-Apache dengan Docker Compose


Docker compose adalah sebuah tool dari docker untuk mempermudah dalam developing aplikasi dan menjalankan aplikasi secara complex. Dengan Compose kamu dapat menjalankan multi container aplikasi dalan satu file. Dan hanya menggunakan satu perintah untuk menjalankan semua aplikasi yang akan kamu develop. Dengan menggunakan YAML file untuk konfigurasi semua servis dari aplikasi. Compose bekerja di dalam semua enviroment ya itu : production, Staging, development, testting  serta pada CI workflows.

Setelah kita berkenalan sekilas dengan Docker compose kali ini kita akan membuild sebuah aplikasi yang menggunakan service dari apache sebagai web server, PHP untuk bahsa nya, phpmyadmin untuk management database dan yang terakhir dari database yaitu mysql.

Sebelum beranjak ke praktik, diharapkan kalian telah memahami cara menggunakan tools dari compose itu sendiri. dan sebenarnya apabila kalian telah memahami dan ingin langsung scriptnya, maka dapat kalian cari di Github saya.

Pertama buatlah direktori dan penempatan file sesuai dengan pemetaan berikut ini :

path:
|_ ./apache/
| |__ Dockerfile
| |________ demo.apache.conf
|_ ./php/
| |___ Dockerfile
|_ ./public_html/
| |___ index.html
|_ ./docker-compose.yml

Setelah kita membuat direktori lalu buatlah file file yang di perlukan seperti Dockerfile dan konfigurasi yang lainnya.
Selanjutnya mari kita buat Docker file pada direktori apache ./apache/Dockerfile : 
FROM httpd:2.4.33-alpine
RUN apk update; \
    apk upgrade;
# Copy apache vhost file to proxy php requests to php-fpm container
COPY demo.apache.conf /usr/local/apache2/conf/demo.apache.conf
RUN echo "Include /usr/local/apache2/conf/demo.apache.conf" \
    >> /usr/local/apache2/conf/httpd.conf

Setelah kita membuat Docker file pada direktori apache (./apache/Dockerfile) maka kita buat juga configurasi untuk apache nya (./apache/demo.apache.conf)
ServerName localhost

LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so
LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so

<VirtualHost *:80>
    # Proxy .php requests to port 9000 of the php-fpm container
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
    DocumentRoot /var/www/html/
    <Directory /var/www/html/>
        DirectoryIndex index.php
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Send apache logs to stdout and stderr
    CustomLog /proc/self/fd/1 common
    ErrorLog /proc/self/fd/2 
</VirtualHost>
Lanjut ke tahap selanjutnya  pada direktori php kita buat docker file nya (./php/Dockerfile):
FROM php:7.2.7-fpm-alpine3.7
RUN apk update; \
    apk upgrade;
RUN docker-php-ext-install mysqli


Lanjut ke tahap selanjutnya  kali ini pada direktori html_public berfungsi sebagai direktori penghubung antara host ke container. dan kali ini file index ini selain berfungsi sebagai penanda bahwa apache sudah berjalan tetapi juga berfungsi sebagai mekanisme pengecekan terhadap koneksi ke database
<h1>Hello MAHBUBI!</h1>
<h4>Attempting MySQL connection from php...</h4>
<?php
$host = '172.24.0.3:3306';
$user = 'root';
$pass = 'rootpassword';
$conn = new mysqli($host, $user, $pass);

if ($conn->connect_error){die("Connection failed: " . $conn->connect_error);}
echo "Connected to MySQL successfully!"; 
?>
Setelah semua proses telah tecapai maka saat nya kita membuat inti dari Compose ya itu configurasi Compose tersebut ya itu docker-compose.yml (./docker-compose.yml)
version: "3.2"
services:
  php:
    build: './php/'
    volumes:
      - ./public_html/:/var/www/html/
  web:
    build: './apache/'
    depends_on:
      - php
      - db
    ports:
      - "8181:80"
    volumes:
      - ./public_html/:/var/www/html/
  db:
    image: mysql:5.7
    user: "root"
    restart: always
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=dbvote

  myadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - "8282:80"
    links:
      - db:db
    restart: always
    environment:
      - MYSQL_USERNAME=root
      - MYSQL_ROOT_PASSWORD=rootpassword
    depends_on:
       - db

Setelah docker-compose.yml telah kita buat maka saatnya kita jalankan perintah docker-compose up -d agar dapat memulai semua service dan konfigurasi yang telah kita buat di belakang sehingga kita tidak perlu membuka terminal lagi.

Demikianlah Tutorial untuk menjalankan, membuat dengan menggunakan tool dari docker ya itu Compose. apabila ada script yang tidak bisa bisa kalian copy dari Github saya.
sekian dari saya terimakasih telah membaca.

4 comments

Terima kasih mas, atas ilmunya, mantap dan sangat bermanfaat. Sy izin yah download scriptnya dari github.

saya sdh mencoba. namun, msh gagal untuk akses apache dan mysql. Yang baru bisa akses phpmyadmin. Mhn pencerahannya gan ??

salahnya di bagian mana yah mas?

Terimakasih telah berkomentar
EmoticonEmoticon