Quickstart: Compose and WordPress
Estimated reading time: 4 minutes
You can use Docker Compose to easily run WordPress in an isolated environment built with Docker containers. This quick-start guide demonstrates how to use Compose to set up and run WordPress. Before starting, make sure you have Compose installed.
Define the project
Create an empty project directory.
You can name the directory something easy for you to remember. This directory is the context for your application image. The directory should only contain resources to build that image.
This project directory contains a
docker-compose.ymlfile which is complete in itself for a good starter wordpress project.
Tip: You can use either a
.yamlextension for this file. They both work.
Change into your project directory.
For example, if you named your directory
$ cd my_wordpress/
docker-compose.ymlfile that starts your
WordPressblog and a separate
MySQLinstance with volume mounts for data persistence:
services: db: # We use a mariadb image which supports both amd64 & arm64 architecture image: mariadb:10.6.4-focal # If you really want to use MySQL, uncomment the following line #image: mysql:8.0.27 command: '--default-authentication-plugin=mysql_native_password' volumes: - db_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD=somewordpress - MYSQL_DATABASE=wordpress - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress expose: - 3306 - 33060 wordpress: image: wordpress:latest volumes: - wp_data:/var/www/html ports: - 80:80 restart: always environment: - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=wordpress - WORDPRESS_DB_PASSWORD=wordpress - WORDPRESS_DB_NAME=wordpress volumes: db_data: wp_data:
The docker volumes
wordpress_datapersists updates made by WordPress to the database, as well as the installed themes and plugins. Learn more about docker volumes
WordPress Multisite works only on ports
Build the project
docker compose up -d from your project directory.
docker compose up in detached mode, pulls
the needed Docker images, and starts the wordpress and database containers, as shown in
the example below.
$ docker compose up -d Creating network "my_wordpress_default" with the default driver Pulling db (mysql:5.7)... 5.7: Pulling from library/mysql efd26ecc9548: Pull complete a3ed95caeb02: Pull complete <...> Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de Status: Downloaded newer image for mysql:5.7 Pulling wordpress (wordpress:latest)... latest: Pulling from library/wordpress efd26ecc9548: Already exists a3ed95caeb02: Pull complete 589a9d9a7c64: Pull complete <...> Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6 Status: Downloaded newer image for wordpress:latest Creating my_wordpress_db_1 Creating my_wordpress_wordpress_1
Note: WordPress Multisite works only on ports
443. If you get an error message about binding
443(depending on which one you specified), it is likely that the port you configured for WordPress is already in use by another service.
Bring up WordPress in a web browser
At this point, WordPress should be running on port
80 of your Docker Host,
and you can complete the “famous five-minute installation” as a WordPress
Note: The WordPress site is not immediately available on port
80because the containers are still being initialized and may take a couple of minutes before the first load.
If you are using Docker Desktop for Mac or Docker Desktop for Windows, you can use
http://localhost as the IP address, and open
http://localhost:80 in a web
Shutdown and cleanup
docker compose down removes the
containers and default network, but preserves your WordPress database.
docker compose down --volumes removes the containers, default
network, and the WordPress database.
More Compose documentation
- Docker Compose overview
- Install Docker Compose
- Getting Started with Docker Compose
- Docker Compose Command line reference
- Compose file reference
- Awesome Compose samples