{"id":11236,"date":"2020-12-26T00:00:00","date_gmt":"2020-12-26T00:00:00","guid":{"rendered":"https:\/\/binus.ac.id\/binus-digital\/2020\/12\/26\/membuat-php-dev-environment-dengan-docker\/"},"modified":"2024-09-24T02:20:16","modified_gmt":"2024-09-24T02:20:16","slug":"membuat-php-dev-environment-dengan-docker","status":"publish","type":"post","link":"https:\/\/binus.ac.id\/binus-digital\/2020\/12\/26\/membuat-php-dev-environment-dengan-docker\/","title":{"rendered":"Membuat PHP Dev Environment dengan Docker"},"content":{"rendered":"<p>Kalau sebelumnya untuk membuat Web Server di local kita menggunakan software-software seperti XAMPP, WAMP, Server2GO dan sebagainya. Kali ini kita akan membuat Web Server dengan Docker.<\/p>\n<p><strong>01. Apa sih Docker?<\/strong><\/p>\n<blockquote>\n<p>Docker adalah platform perangkat lunak yang memungkinkan Anda membuat, menguji, dan menerapkan aplikasi dengan cepat. Docker mengemas perangkat lunak ke dalam unit standar yang disebut\u00a0<a href=\"https:\/\/aws.amazon.com\/id\/containers\/\">kontainer<\/a>\u00a0yang memiliki semua yang diperlukan perangkat lunak agar dapat berfungsi termasuk pustaka, alat sistem, kode, dan waktu proses. Dengan menggunakan Docker, Anda dapat dengan cepat menerapkan dan menskalakan aplikasi ke lingkungan apa pun dan yakin bahwa kode Anda akan berjalan.<\/p>\n<p><cite><a href=\"https:\/\/aws.amazon.com\/id\/docker\/\">https:\/\/aws.amazon.com\/id\/docker\/<\/a><\/cite><\/p>\n<\/blockquote>\n<p><strong>02. Kelebihan Docker dibandingkan dengan XAMPP, WAMP, dan sebagainya<\/strong><\/p>\n<ul>\n<li>Upgrade versi PHP dan Database serta install library lebih mudah (Configureable).<\/li>\n<li>Karena Configureable, saat pindah-pindah komputer lain atau komputer kantor untuk development, tinggal copy konfigurasi Docker nya dan install (pastikan Docker sudah terinstall terlebih dahulu), hasilnya kita dapat mempunyai server local dengan konfigurasi yang sama dengan di komputer pribadi kita. Tidak perlu ribet install library sana-sini.<\/li>\n<li>Bisa menyesuaikan Dev Environment dengan server production yang akan dipakai. Pada Docker, kita dapat menentukan OS yang akan dipakai ketika melakukan development.<\/li>\n<li>Komputer lebih bersih dari file-file instalasi. Misalnya jika menggunakan Task Automation seperti Gulp, Grunt, dan sebagainya, dimana kita perlu install locally dulu dan file nya akan tertumpuk di komputer kita. Berbeda dengan Docker yang mana hanya diinstall di dalam setiap Container Docker saja tanpa perlu install di local komputer kita.<\/li>\n<\/ul>\n<p><strong>03. Install Docker<\/strong><br \/>\nSilahkan mengunjungi web official Docker untuk mendownload software nya.\u00a0<a href=\"https:\/\/www.docker.com\/get-started\">https:\/\/www.docker.com\/get-started<\/a><\/p>\n<p><strong>04. Setup Dockerfile<\/strong><br \/>\nSetelah Docker ter-install, Anda buat sebuah folder baru dan beri nama dengan \u201cdocker-php-dev\u201d atau nama lainnya sesuai keinginan Anda.<\/p>\n<p>Lalu buat file baru dengan nama \u201cDockerfile\u201d (tanpa extension) di dalam folder tersebut. Setelah itu buka file \u201cDockerfile\u201d tersebut dan ketik kode berikut.<\/p>\n<pre class=\"wp-block-preformatted\">FROM ubuntu:18.04\r\nENV DEBIAN_FRONTEND=noninteractive\r\n\r\n# Install Ruby\r\nRUN apt-get -y update &amp;&amp; apt-get install -y ruby-full\r\nRUN ruby -v\r\nRUN gem -v\r\n\r\n# Install Utilities\r\nRUN apt-get install -y curl unzip build-essential nano wget mcrypt\r\nRUN apt-get -qq update &amp;&amp; apt-get -qq -y install bzip2\r\nRUN apt-get install -y chrpath libssl-dev libxft-dev\r\nRUN apt-get install -y libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev\r\n\r\n# Install ppa:ondrej\/php PPA\r\nRUN apt-get install -y software-properties-common\r\nRUN add-apt-repository ppa:ondrej\/php\r\nRUN apt-get update\r\n\r\n# Install PHP 8\r\nRUN apt-get update &amp;&amp; apt-get install -y apache2\r\nRUN apt-get install -y php-pear libapache2-mod-php8.0\r\nRUN apt-get install -y php8.0-common php8.0-cli\r\nRUN apt-get install -y php8.0-bz2 php8.0-zip php8.0-curl php8.0-gd php8.0-mysql php8.0-xml php8.0-dev php8.0-sqlite php8.0-mbstring php8.0-bcmath\r\nRUN php -v\r\nRUN php -m\r\n\r\n# PHP Config\r\n# Show PHP errors on development server.\r\nRUN sed -i -e 's\/^error_reportings*=.*\/error_reporting = E_ALL\/' \/etc\/php\/8.0\/apache2\/php.ini\r\nRUN sed -i -e 's\/^display_errorss*=.*\/display_errors = On\/' \/etc\/php\/8.0\/apache2\/php.ini\r\nRUN sed -i -e 's\/^zlib.output_compressions*=.*\/zlib.output_compression = Off\/' \/etc\/php\/8.0\/apache2\/php.ini\r\nRUN sed -i -e 's\/^zpost_max_sizes*=.*\/post_max_size = 32M\/' \/etc\/php\/8.0\/apache2\/php.ini\r\nRUN sed -i -e 's\/^upload_max_filesizes*=.*\/upload_max_filesize = 32M\/' \/etc\/php\/8.0\/apache2\/php.ini\r\n\r\n# Apache Config\r\n# Allow .htaccess with RewriteEngine.\r\nRUN a2enmod rewrite\r\n\r\n# Without the following line we get \"AH00558: apache2: Could not reliably determine the server's fully qualified domain name\".\r\nRUN echo \"ServerName localhost\" &gt;&gt; \/etc\/apache2\/apache2.conf\r\n\r\n# Authorise .htaccess files.\r\nRUN sed -i '\/&lt;Directory \/var\/www\/&gt;\/,\/&lt;\/Directory&gt;\/ s\/AllowOverride None\/AllowOverride All\/' \/etc\/apache2\/apache2.conf\r\n\r\n# Ports\r\nEXPOSE 80 5000\r\n\r\n# Start Apache2 on image start.\r\nCMD [\"\/usr\/sbin\/apache2ctl\", \"-DFOREGROUND\"]\r\n\r\n# Purge old PHP\r\nRUN apt-get update\r\nRUN apt-get -y purge '^php7.4.*'\r\nRUN php -v\r\n\r\n# Install Git\r\nRUN apt-get install -y git\r\nRUN git --version\r\n\r\n# Install SASS &amp; Compass\r\nRUN gem install sass\r\nRUN gem install compass\r\nRUN gem install css_parser\r\n\r\n# Install Composer\r\nRUN apt-get install -y php-cli\r\nRUN php -r \"copy('https:\/\/getcomposer.org\/installer', 'composer-setup.php');\"\r\nRUN HASH=\"$(wget -q -O - https:\/\/composer.github.io\/installer.sig)\" &amp;&amp; php -r \"if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;\"\r\nRUN php composer-setup.php\r\nRUN php -r \"unlink('composer-setup.php');\"\r\nRUN mv composer.phar \/usr\/local\/bin\/composer\r\n\r\n# Install NodeJS &amp; NPM\r\nRUN apt-get purge nodejs\r\nRUN curl -sL https:\/\/deb.nodesource.com\/setup_14.x | bash -\r\nRUN apt -y update\r\nRUN apt install -y nodejs\r\nRUN nodejs -v\r\nRUN npm -v\r\n\r\n# Install Task Automation\r\nRUN apt-get install -y yarn\r\nRUN npm install -g grunt-cli\r\nRUN npm install gulp-cli -g<\/pre>\n<p>Sebagai informasi, kita disini akan membuat Docker Image kita sendiri dengan menginstall software atau tools yang kita butuhkan. Bisa dilihat pada kode tersebut, OS yang digunakan adalah Ubuntu versi 18.04 dan PHP yang diinstall adalah PHP versi 8.0.<\/p>\n<p>Selain itu saya juga menambahkan beberapa perintah untuk menginstall tools tambahan seperti Composer, SASS Compass, NodeJS (NPM) dan Git untuk membantu development aplikasi atau website. Dengan begitu, Anda juga dapat menambahkan atau mengurangi tools sesuai kebutuhan Anda sendiri.<\/p>\n<p>Jika sudah, buka terminal Anda lalu arahkan ke folder \u201cdocker-php-dev\u201d dan ketik kode berikut untuk membuat Docker Image dengan nama \u201cdocker-php-dev\u201d.<\/p>\n<pre class=\"wp-block-preformatted\">docker build -t docker-php-dev .<\/pre>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-8240\" src=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-20-at-3.56.50-PM-575x342.png\" alt=\"\" width=\"575\" height=\"342\" \/><\/p>\n<p>Setelah itu Docker akan menginstall Image dari list perintah yang sudah dibuat pada file \u201cDockerfile\u201d. Menginstall Docker Image akan membutuhkan waktu yang cukup lama karena akan mendownload file nya terlebih dahulu. Jadi pastikan komputer Anda memiliki koneksi internet yang memadai.<\/p>\n<p>Jika sudah selesai, Anda dapat melihat list Docker Image dengan mengetik kode berikut di terminal Anda.<\/p>\n<pre class=\"wp-block-preformatted\">docker image ls<\/pre>\n<p><strong>05. Setup docker-compose.yml<\/strong><br \/>\nLangkah selanjutnya buat file baru dengan nama \u201cdocker-compose.yml\u201d dan ketik kode berikut.<\/p>\n<pre class=\"wp-block-preformatted\"># Version\r\nversion: '3.1'\r\n\r\n# Setup\r\nservices:\r\n  # PHP\r\n  php:\r\n    depends_on:\r\n      - db\r\n    image: docker-php-dev\r\n    restart: always\r\n    ports:\r\n      - 5000:80\r\n    volumes:\r\n      - .\/development:\/var\/www\/html\r\n\r\n  # PHPMyAdmin\r\n  phpmyadmin:\r\n    depends_on:\r\n      - db\r\n    image: phpmyadmin\/phpmyadmin\r\n    restart: always\r\n    ports:\r\n      - 5050:80\r\n    environment:\r\n      PMA_HOST: db\r\n\r\n  # MySQL\r\n  db:\r\n    image: mysql:5.7\r\n    restart: always\r\n    volumes:\r\n      - wordpress_db:\/var\/lib\/mysql\r\n    environment:\r\n      MYSQL_DATABASE: wordpress\r\n      MYSQL_PASSWORD: password\r\n      MYSQL_ROOT_PASSWORD: password\r\n\r\n# Volumes\r\nvolumes:\r\n  wordpress_db:\r\n  wordpress_uploads:<\/pre>\n<p>File tersebut digunakan untuk mengkonfigurasi Container. Jika sudah, ketik kode berikut pada terminal untuk menjalankan Docker Container.<\/p>\n<pre class=\"wp-block-preformatted\">docker-compose up -d<\/pre>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-8241\" src=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-20-at-6.02.47-PM-471x342.png\" alt=\"\" width=\"471\" height=\"342\" \/><\/p>\n<p>Setelah semua Container \u201cup\u201d, silahkan ketik URL\u00a0<a href=\"http:\/\/localhost:5000\/\">http:\/\/localhost:5000<\/a>\u00a0pada browser Anda untuk membuka halaman Localhost dan ketik URL\u00a0<a href=\"http:\/\/localhost:5050\/\">http:\/\/localhost:5050<\/a>\u00a0untuk membuka halaman PHPMyAdmin (MySQL Database Admin, username: root, password: password).<\/p>\n<p><strong>06. Buat Kode PHP Sederhana<\/strong><br \/>\nLangkah selanjutnya adalah membuat sebuah kode PHP sederhana untuk melakukan test apakah Web Server sudah berhasil dijalankan. Pada folder \u201cdocker-php-dev\u201d akan muncul folder baru dengan nama \u201cdevelopment\u201d. Anda bisa menaruh file PHP Anda di folder tersebut. Sebagai contoh, saya membuat folder dengan name \u201ctesting\u201d.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-8242\" src=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-20-at-6.55.53-PM-713x342.png\" alt=\"\" width=\"713\" height=\"342\" \/><\/p>\n<p>Lalu, di dalam folder \u201ctesting\u201d tersebut, saya membuat file baru dengan nama \u201cindex.php\u201d dan mengisi dengan kode berikut.<\/p>\n<pre class=\"wp-block-preformatted\">&lt;?php\r\necho \"Hello world!!\";\r\n?&gt;<\/pre>\n<p>Hasilnya seperti berikut.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-8243\" src=\"http:\/\/binus.ac.id\/knowledge\/wp-content\/uploads\/2020\/12\/Screen-Shot-2020-12-20-at-6.57.56-PM-714x342.png\" alt=\"\" width=\"714\" height=\"342\" \/><\/p>\n<p>Selamat Web Server telah siap digunakan. Untuk masuk ke dalam console Container, Anda dapat mengetik kode berikut.<\/p>\n<pre id=\"block-a0815fb3-43ad-4f4c-badf-62a7c48b7c59\" class=\"wp-block-preformatted\">docker exec -it docker-php-dev_php_1 bash<\/pre>\n<p>Di dalam Container, Anda dapat menjalankan perintah-perintah yang telah Anda install sebelumnya pada file \u201cDockerfile\u201d. Sebagai contoh, saya dapat menjalankan perintah Composer, Gulp, Grunt dan sebagainya.<\/p>\n<p>Sampai sini dulu artikel kali ini. Selamat bereksplorasi. Semoga bermanfaat.<\/p>\n<p>Github Repo:\u00a0<a href=\"https:\/\/github.com\/fachririyanto\/docker-php\">https:\/\/github.com\/fachririyanto\/docker-php<\/a><br \/>\nFeatured Image: https:\/\/sheershoff.ru\/custom-php-ini-docker-php-docker-compose-config\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kalau sebelumnya untuk membuat Web Server di local kita menggunakan software-software seperti XAMPP, WAMP, Server2GO dan sebagainya. Kali ini kita akan membuat Web Server dengan Docker. 01. Apa sih Docker? Docker adalah platform perangkat lunak yang memungkinkan Anda membuat, menguji, dan menerapkan aplikasi dengan cepat. Docker mengemas perangkat lunak ke dalam unit standar yang disebut\u00a0kontainer\u00a0yang [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":11237,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77],"tags":[],"class_list":["post-11236","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"_links":{"self":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts\/11236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/comments?post=11236"}],"version-history":[{"count":1,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts\/11236\/revisions"}],"predecessor-version":[{"id":11808,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/posts\/11236\/revisions\/11808"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/media\/11237"}],"wp:attachment":[{"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/media?parent=11236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/categories?post=11236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/binus.ac.id\/binus-digital\/wp-json\/wp\/v2\/tags?post=11236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}