Setting Up a LAMP Stack with Docker Compose
Docker Compose is a tool that allows to declare which Docker containers should run, and which relationships should exist between them. It follows the infrastructure as code approach, just like most automation software and Docker itself.
The docker-compose.yml
File
When using Docker Compose, the Docker infrastructure must be described in a YAML file called docker-compose.yml
.
Let's see an example:
version: "3" services: web: image: "apache:${PHP_VERSION}" restart: 'always' depends_on: - mariadb restart: 'always' ports: - '8080:80' links: - mariadb mariadb: image: "mariadb-${MARIADB_VERSION}" restart: 'always' volumes: - ${MARIADB_DATA_DIR-./data/mysql}:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD}
In the first line we declare that we are using the version 3 of the Docker compose language.
Then we have the list of services, namely the web
and the mariadb
services.
For web
, we map the 8080 container port to the 80 host system port. This is very useful for a development environment, because it allows us to connect our browser to the containerized web server. Also in the links
property we declare that this container must be able to connect mariadb
. We also have a depends_on
property to declare that mariadb
needs to start before web
. This is because we cannot do anything with our application until MariaDB is ready to accept connections. restart: always
declares that the container must restart if it crashes.
Docker Compose Commands
Docker Compose Resources
- Overview of Docker Compose in the Docker documentation
- Compose file in the Docker documentation
- Docker Compose on GitHub
Content initially contributed by Vettabase Ltd.