Docker Lamp

A simple LAMP image using Ubuntu, Apache, PHP and MySql in a single image
Alternatives To Docker Lamp
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
8 days ago42mitPHP
A modern Docker LAMP stack and MEAN stack for local development
5 days ago16apache-2.0Java
Solutions to LeetCode problems; updated daily. Subscribe to my YouTube channel for more.
8 days ago28gpl-3.0Shell
Install LAMP(Linux + Apache + MySQL/MariaDB + PHP ) for CentOS/Debian/Ubuntu
4 months ago37otherTypeScript
App to easily query, script, and visualize data from every database, file, and API.
10 days ago5otherShell
LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Aliyun/Amazon、Debian/Ubuntu/Raspbian/Deepin/Mint Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。
Docker Compose Lamp2,139
6 days ago19mitDockerfile
A basic LAMP stack environment built using Docker Compose.
7 years ago47otherPython
a year ago
后端开发常用框架文档及中文翻译,包含 Spring 系列文档(Spring, Spring Boot, Spring Cloud, Spring Security, Spring Session),大数据(Apache Hive, HBase, Apache Flume),日志(Log4j2, Logback),Http Server(NGINX,Apache),Python,数据库(OpenTSDB,MySQL,PostgreSQL)等最新官方文档以及对应的中文翻译。
6 days agoHTML
Netkiller Free ebook - 免费电子书
3 years ago254otherPHP
Ushahidi v2. A platform that allows information collection, visualization and interactive mapping, allowing anyone to submit information through text messaging using a mobile phone, email or web form.
Alternatives To Docker Lamp
Select To Compare

Alternative Project Comparisons


Docker-LAMP is a set of docker images that include the phusion baseimage (18.04 and 20.04 varieties), along with a LAMP stack (Apache, MySQL and PHP) all in one handy package.

With Ubuntu 20.04 and 18.04 images on the latest-2004 and latest-1804 tags, Docker-LAMP is flexible enough to use with all of your LAMP projects.

Build Status Docker Hub License



As a developer, part of my day to day role is to build LAMP applications. I searched in vein for an image that had everything I wanted, up-to-date packages, a simple interface, good documentation and active support.

To complicate things even further I needed an image, or actually two, that would run my applications on both 14.04 and 16.04. Having two entirely separate workflows didn't make any sense to me, and Docker-LAMP was born.

Designed to be a single interface that just 'gets out of your way', and works on 18.04 and 20.04 with php 7 and 8. You can move between all images without changing how you work with Docker.

Image Versions

NOTE: PHP 5.6 is end of life, so the PHP 5 images mattrayner/lamp:latest-1404-php5 and mattrayner/lamp:latest-1604-php5 will not receive any updates. Although these images will stay on Docker Hub, we strongly recommend updating you applications to PHP 7 or PHP 8.

NOTE: The 14.04 and 16.04 variants of this image are no longer being actively supported or updated.

There are four main 'versions' of the docker image. The table below shows the different tags you can use, along with the PHP, MySQL and Apache versions that come with it.

Component latest-1404 latest-1604 latest-1804-php7 latest-1804-php8 latest-2004-php7 latest-2004-php8
Apache 2.4.7 2.4.18 2.4.29 2.4.41
MySQL 5.5.62 5.7.30 5.7.35 8.0.26
PHP 7.3.3 7.4.6 7.4.23/8.0.10 7.4.23/8.0.10
phpMyAdmin 4.8.5 5.0.2 5.1.1 5.1.1

Using the image

On the command line

This is the quickest way

# Launch a 20.04 based image with PHP 8
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-2004-php8

# Launch a 20.04 based image with PHP 7
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-2004-php7

# Launch a 18.04 based image with PHP 8
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-1804-php8

# Launch a 18.04 based image with PHP 7
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-1804-php7

# Launch a 16.04 based image with PHP 7
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-1604

# Launch a 14.04 based image with PHP 5
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-1404

With a Dockerfile

FROM mattrayner/lamp:latest-2004-php8

# Your custom commands

CMD ["/"]

MySQL Databases

By default, the image comes with a root MySQL account that has no password. This account is only available locally, i.e. within your application. It is not available from outside your docker image or through phpMyAdmin.

When you first run the image you'll see a message showing your admin user's password. This user can be used locally and externally, either by connecting to your MySQL port (default 3306) and using a tool like MySQL Workbench or Sequel Pro, or through phpMyAdmin.

If you need this login later, you can run docker logs CONTAINER_ID and you should see it at the top of the log.

Creating a database

So your application needs a database - you have two options...

  1. PHPMyAdmin
  2. Command line

Docker-LAMP comes pre-installed with phpMyAdmin available from http://DOCKER_ADDRESS/phpmyadmin.

NOTE: you cannot use the root user with PHPMyAdmin. We recommend logging in with the admin user mentioned in the introduction to this section.

Command Line

First, get the ID of your running container with docker ps, then run the below command replacing CONTAINER_ID and DATABASE_NAME with your required values:

docker exec CONTAINER_ID  mysql -uroot -e "create database DATABASE_NAME"

Adding your own content

The 'easiest' way to add your own content to the lamp image is using Docker volumes. This will effectively 'sync' a particular folder on your machine with that on the docker container.

The below examples assume the following project layout and that you are running the commands from the 'project root'.

/ (project root)
/app/ (your PHP files live here)
/mysql/ (docker will create this and store your MySQL data here)

In english, your project should contain a folder called app containing all of your app's code. That's pretty much it.

Adding your app

The below command will run the docker image mattrayner/lamp:latest interactively, exposing port 80 on the host machine with port 80 on the docker container. It will then create a volume linking the app/ directory within your project to the /app directory on the container. This is where Apache is expecting your PHP to live.

docker run -i -t -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest

Persisting your MySQL

The below command will run the docker image mattrayner/lamp:latest, creating a mysql/ folder within your project. This folder will be linked to /var/lib/mysql where all of the MySQL files from container lives. You will now be able to stop/start the container and keep your database changes.

You may also add -p 3306:3306 after -p 80:80 to expose the mysql sockets on your host machine. This will allow you to connect an external application such as SequelPro or MySQL Workbench.

docker run -i -t -p "80:80" -v ${PWD}/mysql:/var/lib/mysql mattrayner/lamp:latest

Doing both

The below command is our 'recommended' solution. It both adds your own PHP and persists database files. We have created a more advanced alias in our .bash_profile files to enable the short commands ldi and launchdocker. See the next section for an example.

docker run -i -t -p "80:80" -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql mattrayner/lamp:latest

.bash_profile alias examples

The below example can be added to your ~/.bash_profile file to add the alias commands ldi and launchdocker. By default it will launch the 16.04 image - if you need the 14.04 image, simply change the docker run command to use mattrayner/lamp:latest-1404 instead of mattrayner/lamp:latest.

# A helper function to launch docker container using mattrayner/lamp with overrideable parameters
# $1 - Apache Port (optional)
# $2 - MySQL Port (optional - no value will cause MySQL not to be mapped)
function launchdockerwithparams {
    if ! [[ -z "$1" ]]; then
    if ! [[ -z "$2" ]]; then
        MYSQL_PORT_COMMAND="-p \"$2:3306\""

    docker run -i -t -p "$APACHE_PORT:80" $MYSQL_PORT_COMMAND -v ${PWD}/app:/app -v ${PWD}/mysql:/var/lib/mysql mattrayner/lamp:latest
alias launchdocker='launchdockerwithparams $1 $2'
alias ldi='launchdockerwithparams $1 $2'
Example usage
# Launch docker and map port 80 for apache

# Launch docker and map port 8080 for apache
ldi 8080

# Launch docker and map port 3000 for apache along with 3306 for MySQL
ldi 3000 3306

Developing the image

Building and running

# Clone the project from Github
git clone
cd docker-lamp

# Build the images
docker build --build-arg PHP_VERSION=8.0 -t=mattrayner/lamp:latest -f ./2004/Dockerfile .
docker build --build-arg PHP_VERSION=8.0 -t=mattrayner/lamp:latest-2004-php8 -f ./2004/Dockerfile .
docker build --build-arg PHP_VERSION=7.4 -t=mattrayner/lamp:latest-2004-php7 -f ./2004/Dockerfile .
docker build --build-arg PHP_VERSION=8.0 -t=mattrayner/lamp:latest-1804-php8 -f ./1804/Dockerfile .
docker build --build-arg PHP_VERSION=7.4 -t=mattrayner/lamp:latest-1804-php7 -f ./1804/Dockerfile .

# Run the image as a container
docker run -d -p "3000:80" mattrayner/lamp:latest

# Sleep to allow the container to boot
sleep 30

# Curl out the contents of our new container
curl "http://$(docker-machine ip):3000/"


We use docker-compose to setup, build and run our testing environment. It allows us to offload a large amount of the testing overhead to Docker, and to ensure that we always test our image in a consistent way that's not affected by the host machine.

One-line testing command

We've developed a single-line test command you can run on your machine within the docker-lamp directory. This will test any changes that may have been made, as well as comparing installed versions of Apache, MySQL, PHP and phpMyAdmin against those expected.

docker-compose -f docker-compose.test.yml -p ci build; docker-compose -f docker-compose.test.yml -p ci up -d; cd tests && ./; echo "Exited with status code: $?";

So what does this command do?

docker-compose -f docker-compose.test.yml -p ci build;

First, build that latest version of our docker-compose images.

docker-compose -f docker-compose.test.yml -p ci up -d;

Launch our docker containers (web2004-php8 etc.) in daemon mode.

cd tests && ./;

Change into the test directory and run out tests

echo "Exited with status code: $?"

Report back whether the tests passed or not


This image was originally based on dgraziotin/lamp, with a few changes to make it compatible with the Concrete5 CMS.

I also changed the setup to create ubuntu (well, baseimage, but you get what I'm saying) images so that this project could be as useful as possible to as many people as possible.


If you wish to submit a bug fix or feature, you can create a pull request and it will be merged pending a code review.

  1. Clone/fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Test your changes using the steps in Testing
  5. Push to the branch (git push origin my-new-feature)
  6. Create a new Pull Request


Docker-LAMP is licensed under the Apache 2.0 License.

Popular Mysql Projects
Popular Apache Projects
Popular Data Storage Categories

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Command Line