I've been searching the web and reading manuals and I just can't seem to get my head around what is wrong with my Docker setup.
The Goal
To container-ize Apache, PHP and MySQL allowing them to be customized on a per-project basis. The only dependency to deploy the stack should be docker. All other dependencies / actions should be able to be able to be built / run via Dockerfile
.
The Proof of Concept
From my Apache + MySQL + PHP stack via docker-compose.yml
file - I'd like to target an index.php
page to successfully render Hello Docker!
along with a list of all available databases.
The Problem
When I visit docker.dev/index.php
in my browser, rather than the PHP code running, I can only view the PHP source code. This is what I see:
<?php
/**
* This file:
* Has not been tested
* Does not use prepared statements
* Is for Proof of Concept only!
*/
$host = '127.0.0.1';
$user = 'root';
$pass = 'docker';
$conn = new mysqli($host, $user, $pass);
$sql = 'show databases';
$results = $conn->query($sql);
?>
<h1>Hello Docker!</h1>
<ul>
<?php while ($row = $results->fetch_assoc()) : ?>
<li><?= $row['Database'] ?></li>
<?php endwhile ?>
</ul>
My understanding (which may be mistaken) is that Apache is correctly handling the virtual host, but doesn't know to load the PHP file through an Apache PHP Module.
I have setup Apache to depends_on
PHP and I have linked them through a network
(along with MySQL) but obviously I'm missing something or else everything would be working just as I want it to).
I have created an repo on github that should allow you to test my setup with a few simple commands:
git clone https://github.com/dambrogia/docker-testing.git
cd docker-testing
docker-compose up -d
You will also have to edit add docker.dev
to 127.0.0.1
in your hosts file on your host machine!
How can I render the PHP rather than read the source of it when I visit docker.dev/index.php
?
I do not want to use a PHP and Apache combined image if at all possible. I would like to have three separate containers - PHP, Apache, MySQL.