How to create a docker-based LAMP stack using docker-compose on Ubuntu 18.04 Bionic Beaver Linux -


In this tutorial, we will see how to create a LAMP stack based on dockerized components: following the "one service per container" philosophy, we will assemble the environment using docker-compose, a tool to orchestrate container compositions.

This is a companion discussion topic for the original entry at




I followed the instructions and modified your files for my own use. However, I am getting an error that pdo is not installed when I go to use a database connection. My docker-compose file is posted here as well as my Dockerfile: and



Dehan Louw

Great write-up, thanks! I just keep getting the error:
Uncaught Error: Class ‘mysqli’ not found in /var/www/html/events.php:6

Any idea? Everything is exactly like you said


Egidio Docile -> Dehan Louw

You are using mysqli extension. This is not included in the default php dockerfile: to include it, it’s necessary to create a custom dockerfile we the needed instructions. I’m going to update the article to include those. Thank you for your attention.


Well done,

How to link the volumes: mariadb: to host disk folder?
Thank you.


If I understand correctly, you want to create a bind mount for mariadb so that a directory in your host is mounted inside the container. Say for example you want to mount a “db” directory in your filesystem (I will assume it’s in the same folder where the docker-compose.yml file is) to /var/lib/mysql inside the container, the syntax you should use in the docker-compose.yml file is:

        - ./db:/var/lib/mysql:z

You can use both an absolute or relative path for the local directory. The suffix :z has meaning only if you are running SElinux.


I followed a similar tutorial to dockerize php application on Cloudways blog . However, that tutorial was different than this one. The method of was different. In that tutorial, the docker compose file had php and db defined in it. Then php and db dockerfiles were created to deploy the app. Are there more than one methods to do so?