docker-lamp (ubuntu based)
A simple and mostly automatic LAMP setup. Well, actually it is more like a LNMP, as I use nginx in favour of apache, but everybody uses the term and in this context I doubt there are many usecases where it matters.
It is based on phusion's base docker image, as it takes care of service managment for me and is fine in terms of size.
It will download the phusion/baseimage
image, install nginx, php-fpm and mysqld, configure them and install service scripts for runit to start them.
For a more detailed guide to setting up dev environments with docker, check out my blog post
Usage
You can either just pull the image from the docker index using:
docker pull alexanderjulo/lamp
or you can build the image yourself, using
docker build --rm -t <yourname>/lamp git://github.com/alexex/docker-lamp.git
I do not guarantee that the version on the docker index is up-to-date at all times, but it should be at most. If you want to be sure or are sure that it is not up-to-date build the image yourself (it's really quick, too).
Run a container with the new image using:
docker run -d <yourname>/lamp
Or
docker run -d alexanderjulo/lamp
If you just
Mount your web app under /srv/http
using docker's -v
switch to make the container serve it up. Use -p 80
to expose the container's port.
A real world example could look like this:
docker run -d -p 80 -v /vagrant/app:/srv/http -name app <yourname>/lamp
In this one docker is run in a vagrant machine and the app is in the vagrant shared folder in app
. It will then be served by nginx/php-fpm in the container. Run docker ps
to find out which port was assigned on the host. By accessing <host>:<assigned port>
on the browser, you will be able to access your app.
Modify / Fork
If you need adjustments to configuration, rewrites or other stuff, you can fork my github repository and then build your fork by using the docker build
command above. Just replace my repository with yours.
If you are happy to have your changes locally you can just run an image and commit the container changes to a new image or a new tag on the same image. Whatever your prefer. This approach is the only valid if you need data volumes to work.
Additional information
I have modified some configuration and most of the services to keep the setup as simple as possible without using systemd. As containers are one-purpose things everything just runs as root. You can check the sections below to find out what modifications I made where.
mysql
- Access as root user with no password
nginx.conf
- One server serving at localhost from /srv/http using php
- Added
daemon off
to enable control by runit - All comments removed
php-fpm.conf
- Added
daemonize off
to enable control by runit - Remove unnecessary settings & comments
- Besides: all settings still default
php.ini
- Commented out open_basedir restriction
- Enabled mysql extension