
The first thing we are going to do is to create this file docker-compose.yml:
version: "3.1"
services:
myservicemariadbwp:
image: mariadb
restart: unless-stopped
container_name: mariadb_container_wp
environment:
MYSQL_ROOT_PASSWORD: ${SQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${SQL_DATABASE}
volumes:
- ./config/mariadb:/var/lib/mysql
expose:
- 3306
ports:
- 3306:3306
phpmyadminwp:
image: phpmyadmin
restart: unless-stopped
container_name: phpmyadmin_container_wp
ports:
- 8080:80
environment:
- PMA_ARBITRARY=1
links:
- myservicemariadbwp:db
wordpress:
image: wordpress
restart: always
container_name: wordpress
ports:
- 8000:80
environment:
WORDPRESS_DB_HOST: myservicemariadbwp
WORDPRESS_DB_USER: ${SQL_USER}
WORDPRESS_DB_PASSWORD: ${SQL_ROOT_PASSWORD}
WORDPRESS_DB_NAME: ${SQL_DATABASE}
volumes:
- ./www:/var/www/html
- ./logs:/var/log/apache2
This Docker Compose has a MariaDB image that we will use to host our WordPress .sql file.
It has a PHP MyAdmin that we will use to access the MariaDB environment of our WordPress in case we need it, and it will also store the database inside config/mariadb.
And it has an official WordPress image that will store the WordPress files in a www folder and the apache2 logs in logs.
Now let’s create the .env file with the configuration of the variables for Docker Compose:
SQL_USER=root SQL_ROOT_PASSWORD=123456 SQL_DATABASE=wordpress
I put this one as an example; replace it with more secure variables.
I also recommend creating this .gitignore file if we use git:
.env config logs
The final structure is as follows:

Now, we can start our Docker Compose using this command:
docker compose up -d
