osx-docker-apache-php

o

As of Docker for Mac v1.12.0, there is no need for using my Docker images anymore. Thanks for the support!

osx-docker-apache-php

Out-of-the-box Apache+PHP Docker image that *just works* on Mac OS X. 
Including write support for mounted volumes (Website).
No matter if using the official boot2docker or having Vagrant in the stack, as well.

osx-docker-apache-php, which is known as dgraziotin/apache-php is a reduced fork of dgraziotin/osx-docker-lamp, which is an “Out-of-the-box LAMP image (PHP+MySQL) for Docker”.

Some info about osx-docker-apache-php:

  • It is based on phusion/baseimage:latest instead of ubuntu:trusty.
  • It works flawlessy regardless of using boot2docker standalone or with Vagrant. You will need to set three enrironment varibles, though.
  • It fixes OS X related write permission errors for Apache
  • It lets you mount OS X folders with write support as volumes for
    • The website
  • It is documented for less advanced users (like me)

Usage

If using Vagrant, please see the extra steps in the next subsection.

docker build -t youruser/apache-php .

If you wish, you can push your new image to the registry:

docker push youruser/apache-php

Otherwise, you are free to use dgraziotin/apache-php as it is provided. Remember first to pull it from the Docker Hub:

docker pull dgraziotin/apache-php

Vagrant

If, for any reason, you would rather use Vagrant (I suggest using AntonioMeireles/boot2docker-vagrant-box), you need to add the following three variables when running your box:

VAGRANT_OSX_MODE="true" for enabling Vagrant-compatibility –DOCKER_USER_ID=$(id -u) for letting Vagrant use your host user ID for mounted folders –DOCKER_USER_GID=$(id -g) for letting Vagrant use your host user GID for mounted folders

See the Environment variables section for more options.

Running your Apache+PHP docker image

If you start the image without supplying your code, e.g.,

docker run -t -i -p 80:80 --name website dgraziotin/apache-php

At http://[boot2docker ip, e.g., 192.168.59.103] you should see an “Hello world!” page.

Loading your custom PHP application

In order to replace the Hello World application that comes bundled with this docker image, my suggested layout is the following:

  • Project name folder
    • app subfolder

The app folder should contain the root of your PHP application.

Run the following code from within the Project name folder.

docker run -i -t -p "80:80" -v ${PWD}/app:/app --name yourwebapp dgraziotin/apache-php

Test your deployment:

http://[boot2docker ip]

Environment description

The /app folder

Apache is configured to serve the files from the /app folder, which is a symbolic link to /var/www/html. In osx-docker-apache-php, the apache user www-data has full write permissions to the app folder.

Apache

Apache is pretty much standard in this image. It is configured to serve the Web app at app as / and phpMyAdmin as /phpmyadmin. Mod rewrite is enabled.

Apache runs as user www-data and group staff. The write support works because the user www-data is configured to have the same user id as the one employed by boot2docker (1000).

Environment variables

  • PHP_UPLOAD_MAX_FILESIZE="10M" will change PHP upload_max_filesize config value
  • PHP_POST_MAX_SIZE="10M" will change PHP post_max_size config value
  • VAGRANT_OSX_MODE="true" for enabling Vagrant-compatibility
  • DOCKER_USER_ID=$(id -u) for letting Vagrant use your host user ID for mounted folders
  • DOCKER_USER_GID=$(id -g) for letting Vagrant use your host user GID for mounted folders

Set these variables using the -e flag when invoking the docker client.

docker run -i -t -p "80:80"-v ${PWD}/app:/app -e PHP_UPLOAD_MAX_FILESIZE="10M" --name yourwebapp dgraziotin/apache-php

About Author

dgraziotin

Dr. Daniel Graziotin is a senior researcher (Akademischer Rat) at the University of Stuttgart, Germany. His research interests include human, behavioral, and psychological aspects of empirical software engineering, studies of science, and open science. He is associate editor at the Journal of Open Research Software and academic editor at the Research Ideas and Outcomes (RIO) journal. Daniel was awarded an Alexander von Humboldt Fellowship for postdoctoral researchers in 2017, the European Design Award (bronze) in 2016, and the Data Journalism Award in 2015. He received his Ph.D. in computer science at the Free University of Bozen-Bolzano, Italy.