Build docker image for PHP
Hai semuanya, di materi kali ini kita akan membahas Build Docker image untuk bahasa pemograman sejuta umat yaitu PHP. Jadi kita akan bagi-bagi menjadi beberapa section diantaranya:
- Setup Software Development on local environment
- Deployment using Apache2/Httpd
- Build & Run Docker image
- Cleanup
Sedikit introduction tentang PHP (PHP: Hypertext Preprocessor) adalah widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML.
What can PHP do? PHP is mainly focused on server-side scripting, so you can do anything any other CGI program can do, such as collect form data, generate dynamic page content, or send and receive cookies. But PHP can do much more
Ok cukup pengenalannya, sekarang kita bahas materi yang pertama
Setup SDK on local environment
Untuk menggunakan PHP, yang kita perlu install
- For Windows, original documentation
- For Mac OS, original documentation
- For Unix/Linux, original documentaion
Atau selain itu juga, kita bisa menggunakan third-party bundle untuk php, httpd, perl, pear seperti
- Bitnami WAMP,
- XAMPP,
- MAMP,
- Dan masih banyak lagi.
Setelah di install sekarang kita buat project/folder PHP, untuk lokasinya tergatung dari temen-temen menggunakan installation yang mana, klo saya lebih sering menggunakan php-cli
atau php-fpm
jadi lokasinya saya bisa bebas disimpan di mana saja.
Setelah itu sebagai contoh kita buat 2 file yang berisi phpinfo()
dan index.php
seperti berikut:
- Buat file
index.php
, seperti berikut - Buat file pada folder
system
dengan nama fileinfo.php
seperti berikut:
Kemudian kita coba jalankan Build-in PHP Web Server dengan menggunakan perintah berikut:
Jika dijalankan maka hasilnya seperti berikut:
C:\tools\php80\php.exe -S localhost:8000 -t C:\Users\dimasm93\Workspaces\youtube\docker\08-studi-kasus\docker-php
[Sun Jul 18 13:06:53 2021] PHP 8.0.7 Development Server (http://localhost:8000) started
[Sun Jul 18 13:07:43 2021] [::1]:51179 Accepted
[Sun Jul 18 13:07:43 2021] [::1]:51179 [200]: GET /
[Sun Jul 18 13:07:43 2021] [::1]:51179 Closing
[Sun Jul 18 13:07:43 2021] [::1]:49500 Accepted
[Sun Jul 18 13:07:43 2021] [::1]:49500 [404]: GET /favicon.ico - No such file or directory
[Sun Jul 18 13:07:43 2021] [::1]:49500 Closing
[Sun Jul 18 13:08:44 2021] [::1]:62041 Accepted
[Sun Jul 18 13:08:44 2021] [::1]:62041 [200]: GET /system/info.php
[Sun Jul 18 13:08:44 2021] [::1]:62041 Closing
Kemudian coba access localhost:8000/system/info.php dari browser, hasilnya seperti berikut:
Setelah menampilkan version dari PHP, sekarang kita bisa coba access localhost:8000/index.php maka hasilnya seperti berikut:
Deployment using Apache2/Httpd
Jadi perintah php -s <addr>:<port>
bisanya di gunakan untuk development mode. Nah sekarang kita akan bahas bagaimana cara deployment PHP di Server Linux. Linux server yang saya akan gunakan adalah CentOS 7 kemudian software yang kita perlu install yaitu
- Apache2 / Apache Httpd
- PHP 8 (
php
,php-cli
,php-common
,php-fpm
)
Install PHP 8.0 as Default version (Only recommended for GA release) Seperti berikut:
Setelah kita install, sekarang kita upload source-code yang telah kita buat tadi ke Root Httpd Document. by default biasanya menggunakan /var/www/html
menggunakan perintah berikut:
Setelah semuanya terupload, nanti hasilnya seperti berikut:
Build & Running Docker image
Setelah kita mengetahui workflow manual deploymentnya, sekarang kita bisa tarik kesimpulan untuk mendeploy PHP aplikasi kita membutuhkan
- PHP Execution
- Web Server, bisa menggunakan Httpd atau Nginx
Seperti biasa, untuk membuat Docker image. kita pilih dulu base image dockernya, sebagai contoh disini menggunakan official docker image php
Di official image, kita bisa pilih versinya ada yang hanya php-cli
, ada yang include web server seperti php-apache
atau php-fpm
. Karena kita butuh menggunakan web-server jadi kita bisa menggunakan versi 8.0-apache
seperti berikut Dockerfilenya:
Dan satu lagi yaitu .dockerignore
seperti berikut:
Setelah itu kita coba build docker image, menggunakan perintah berikut:
Jika di jalankan hasilnya seperti berikut:
➜ docker-php ✗ docker build -t dimmaryanto93/docker-php:1.0.0-SNAPSHOT .
[+] Building 10.6s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 435B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 34B 0.0s
=> [internal] load metadata for docker.io/library/php:8.0-apache 1.4s
=> CACHED [1/4] FROM docker.io/library/php:8.0-apache@sha256:1a69e0b19f5e2d006bec4d985e678733bf452ce76bf558d1553 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 123B 0.0s
=> [2/4] RUN apt-get update && apt-get install -y curl 8.9s
=> [3/4] WORKDIR /var/www/html 0.0s
=> [4/4] COPY . . 0.0s
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:35c8cf4586da19b75e230372dfa80c0c891da066f191dd276e2292dfe9bb9192 0.0s
=> => naming to docker.io/dimmaryanto93/docker-php:1.0.0-SNAPSHOT
➜ docker-php docker images dimmaryanto93/docker-php
REPOSITORY TAG IMAGE ID CREATED SIZE
dimmaryanto93/docker-php 1.0.0-SNAPSHOT 35c8cf4586da 5 minutes ago 435MB
Sekarang kita coba running containernya, dengan menggunakan perintah berikut:
Jika dijalankan maka hasilnya seperti berikut:
➜ docker-php docker run --name php-apache -p 80:80 -d dimmaryanto93/docker-php:1.0.0-SNAPSHOT
a37041a4ec43d7d434f3ed5693dbcede94ba01e4f51517f9174fca66f931ec04
➜ docker-php curl localhost
StatusCode : 200
StatusDescription : OK
Content : <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0,
minimum..."
RawContent : HTTP/1.1 200 OK
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Length: 389
Content-Type: text/html; charset=UTF-8
Date: Sun, 18 Jul 2021 08:07:40 GMT
Server...
Headers : {[Vary, Accept-Encoding], [Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive],
[Content-Length, 389]...}
ParsedHtml : System.__ComObject
RawContentLength : 389
➜ docker-php docker exec php-apache php -v
PHP 8.0.8 (cli) (built: Jul 1 2021 22:32:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
Sekarang coba akses dari browser ke alamat localhost/system/info.php hasilnya seperti berikut:
Cleanup
Seperti biasa setelah kita mencoba schenario studi kasus tersebut. sekarang kita bersih-bersih dulu ya berikut perintahnya:
For Bash script:
For Powershell script:
Yuk simak juga videonya,
Dan jika temen-temen belajar hal baru kali ini jangan lupa buat Like, Subcribe, dan Share ke temen kalian. Terimakasih!!!