Senin, 31 Juli 2023

Membuat Image Docker Ubuntu 22 dan php 8.0

Sebenernya bisa aja sih kita langsung ambil image php8.0 yang tersedia di docker hub, cuman masalahnya untuk versi php 8.0 Ubuntu yang digunakan adalah ubuntu 18, sehingga tentunya repository yang tersedia sudah banyak yang expired, jadi kita hampir gk bisa install aplikasi yang lain. So berikut ini cara untuk membuat image file-nya.

Pertama kita tarik dulu ubuntu:20.04 agar gak bolak balik download ke image kita. Dengan cara mengetikkan ini di terminal ubuntunya :

docker pull ubuntu:20.04

Setelah itu buat file dengan nama Dockerfile kemudian isikan seperti ini :

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get update
RUN apt-get -y install nano
RUN apt-get install -y apache2

# Install Utilities
# Install ppa:ondrej/php PPA

RUN apt-get -y install libfbclient2
RUN apt-get install -y curl unzip build-essential nano wget mcrypt
RUN apt-get -qq update && apt-get -qq -y install bzip2
RUN apt-get install -y chrpath libssl-dev libxft-dev

#Install PHP 8
RUN apt-get install -y php-pear libapache2-mod-php8.0
RUN 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
RUN apt-get install -y php8.0-interbase
RUN apt-get install -y php8.0-imagick

RUN sed -i -e 's/^error_reporting\s*=.*/error_reporting = E_ALL/' /etc/php/8.0/apache2/php.ini
RUN sed -i -e 's/^display_errors\s*=.*/display_errors = On/' /etc/php/8.0/apache2/php.ini
RUN sed -i -e 's/^zlib.output_compression\s*=.*/zlib.output_compression = Off/' /etc/php/8.0/apache2/php.ini
RUN sed -i -e 's/^zpost_max_size\s*=.*/post_max_size = 32M/' /etc/php/8.0/apache2/php.ini
RUN sed -i -e 's/^upload_max_filesize\s*=.*/upload_max_filesize = 32M/' /etc/php/8.0/apache2/php.ini


RUN a2enmod rewrite
RUN a2enmod ssl
RUN service apache2 restart
RUN sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"]
WORKDIR "/var/www/html"



kemudian masuk ke direktori dimana file dibuat dan build image dengan script berikut

docker build -t php:8.0 .

Kemudian image terbuat dengan nama php:8.0

Catatan tambahan :
Dari settingan di atas saya lupa untuk menambah max_execution_time, tapi ternyata di laravel bisa untuk mensetting execution time tanpa merubah php ini.
Berikut ini caranya :

public function __construct()
    {
        ini_set('max_execution_time',0);
        ini_set('memory_limit', '-1');
    }