288 words
1 minutes
π³ Production-Ready WordPress with Docker

π§ Whatβs Inside This Stack?
This setup ships with:
- β WordPress + WP-CLI support
- β
Auto plugin installation via
.env
- β Seamless MariaDB setup or external DB compatibility
- β
Lightweight base image:
php-docker-nginx:php82
- β Multi-arch support (ARM64, AMD64)
π» Supported Platforms
Run it confidently on:
- Apple Silicon (M1/M2)
- AWS Graviton instances
- Intel/AMD-based servers and desktops
π Project Setup
Step 1: Get the Files
Create a new project directory and copy in the following:
docker-compose.yml
.env_example
β rename to.env
Sample docker-compose.yml
services:
wordpress:
image: ghcr.io/nooblk-98/wordpress-docker:php82
container_name: ${PROJECT_NAME}
environment:
WP_SITE_TITLE: ${WP_SITE_TITLE}
WP_ADMIN_USER: ${WP_ADMIN_USER}
WP_ADMIN_PASSWORD: ${WP_ADMIN_PASSWORD}
WP_ADMIN_EMAIL: ${WP_ADMIN_EMAIL}
WORDPRESS_DB_HOST: ${MYSQL_HOST}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WP_PLUGINS: ${WP_PLUGINS}
WORDPRESS_DEBUG: false
volumes:
- web_data:/var/www/html
ports:
- "8080:80"
depends_on:
- mariadb
mariadb:
image: mariadb:10
container_name: ${PROJECT_NAME}-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
web_data:
βοΈ Configure Environment Variables
cp .env_example .env
Edit .env
:
PROJECT_NAME=wordpress
MYSQL_DATABASE=wordpress_database
MYSQL_USER=wordpress_user
MYSQL_PASSWORD=YW08dsm0XP2cek6f
MYSQL_ROOT_PASSWORD=lb9tjjGGHTIvZZr6
MYSQL_HOST=mariadb
WP_SITE_TITLE=My WordPress
WP_ADMIN_USER=admin
WP_ADMIN_PASSWORD=secureAdmin123
WP_ADMIN_EMAIL=[email protected]
WP_PLUGINS="advanced-custom-fields all-in-one-wp-migration"
Deploy (Internal MariaDB)
docker compose up --build -d
Once deployed:
- WordPress is auto-installed
- Plugins from
.env
are installed - Setup is skipped on reboot (via
.wp-init-done
)
π Visit: http://localhost:8080
π Use an External Database
Want to connect to an external MySQL/MariaDB service?
- Set these in
.env
:
MYSQL_HOST=db.myhost.com
MYSQL_DATABASE=external_db
MYSQL_USER=wp_user
MYSQL_PASSWORD=securepass
-
Comment out the
mariadb
section indocker-compose.yml
. -
Start just the WordPress service:
docker compose up --build -d wordpress
Features at a Glance
Feature | Description |
---|---|
β Dockerized Setup | Simplifies deployment and scaling |
β Plugin Auto-Installer | Set once, install always |
β DB Compatibility | Use internal or cloud-hosted DBs |
β Secure Configuration | Secrets are stored in .env files |
β Persistent Volumes | Data survives container restarts |
β WP-CLI Integrated | Automation-friendly WordPress management |
π Environment Variables Reference
Variable | Description |
---|---|
PROJECT_NAME | Container name |
MYSQL_HOST | DB host (internal or external) |
MYSQL_DATABASE | WordPress DB name |
MYSQL_USER | WordPress DB user |
MYSQL_PASSWORD | WordPress DB password |
WP_SITE_TITLE | Website title |
WP_ADMIN_USER | WordPress admin username |
WP_ADMIN_PASSWORD | WordPress admin password |
WP_ADMIN_EMAIL | WordPress admin email |
WP_PLUGINS | Space-separated plugin slugs |
Manage Plugins via .env
To add or change plugins:
WP_PLUGINS="seo-by-rank-math woocommerce"
Theyβll be automatically installed and activated during the first boot.
π€ Contribute & Feedback
Found a bug or want to suggest improvements? Contributions welcome!
π§ For more details visit my repository source in github
Waiting for api.github.com...
π³ Production-Ready WordPress with Docker
https://www.itsnooblk.com/posts/wordpess-docker/