DEV Community

Francesco Napoletano
Francesco Napoletano

Posted on • Updated on

How to use Docker for easy and fast WordPress development

A while ago I used to do my WordPress development using this "vagrant-based" environment. It's very well written, opensource and comes with whatever you may need to create themes and plugins for WordPress.

But I wanted something lighter.

I needed a superlight WordPress installation, with no hassle and a very fast deployment. Docker Compose was the right choice.

  • Containers are lighter than a Virtual Machine
  • Containers are isolated but share the same OS and libraries (if needed)
  • If needed, the same docker-compose.yml file can be used for development and production, making environments compatible at a higher level.

So, here's my docker-compose.yml file, for you to use.

version: '3'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: user
       MYSQL_PASSWORD: password
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     volumes:
       - ./wp-content/:/var/www/html/wp-content 
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: user
       WORDPRESS_DB_PASSWORD: password
volumes:
    db_data:
Enter fullscreen mode Exit fullscreen mode

You can also clone it from GitHub, if you want.

Let's dig into this a bit...

First line: we're telling docker which syntax version we're going to use in the rest of the file. You can read more about the different versions on the docs.

Then in the services section we're telling the system we need these images:

  • MySQL version 5.7, with some "strong" credentials :P
  • WordPress, latest version

For WordPress, we're telling the WordPress image to map the port 80 to our 8000, and to map the local wp-content folder to the same folder in the WordPress installation.

We're going to put all our code in that folder, in order to make it available in the WordPress admin panel (think of themes and plugins).

So, to be up and running all you have to do is:

Open your browser. go to http://localhost:8000 and you're good to go!

Easy, isn't it?

Originally published @ https://coding.napolux.com

Discussion (14)

Collapse
marvelouswololo profile image
MarvelousWololo

what about user permissions for the local /wp-content/?

Collapse
lukff profile image
Lucas Fernandes

Would like to know how to solve it

Collapse
napolux profile image
Francesco Napoletano Author

Well, if you have problems, go with 777 and be happy :P

I don't have any problem, my folder is at 644

Thread Thread
marvelouswololo profile image
MarvelousWololo

bro go with 777 is almost always a terrible idea. :(

Thread Thread
napolux profile image
Francesco Napoletano Author

It is in general. Probably not in this specific case ;-)

Thread Thread
iwasherefirst2 profile image
Adam Nielsen • Edited on

I have the same issue. The files are all owned by www-data:www-data and have permission 644 - I don't have permissions to edit/create because my user is adam and even if I add me to group www-data I won't get access. Any advice? And how would you do it with 777 permission? Would you change the permission each time you create a new file?

Collapse
shry profile image
shry
Collapse
pwkip profile image
Jules Colle • Edited on

Awesome! I love

  • how small this is
  • how it only keeps the wp-content folder in the file system (after 10 years of WP development this is the first time I find a dev example that encourages me to only place the wp-content folder under version control.)

Spotted 1 small error: your last two lines should be

volumes:
  db_data:

and not

volumes:
db_data:

otherwise it won't build. It's fine in your git repo though.

I agree that the 777 file permission is totally fine here. After all it's supposed to be a local dev environment.

Collapse
napolux profile image
Francesco Napoletano Author

Fixed, thanks!

Collapse
fy09 profile image
fy • Edited on

Not sure what useful info have you added in this post. The same but in more details can be found here
hub.docker.com/_/wordpress/

Collapse
mphat1000 profile image
mp10

I have error

ERROR: for wordpress-local_db_1 Cannot start service db: b'Mounts denied: EOF'

ERROR: for db Cannot start service db: b'Mounts denied: EOF'
ERROR: Encountered errors while bringing up the project.

Collapse
mphat1000 profile image
mp10

Hi. I have an error
MySQL Connection Error: (1130) Host '172.18.0.3' is not allowed to connect to this MySQL server

Collapse
chrisueda profile image
Christopher Ueda

This is the first docker/Wordpress tutorial/repo that has worked for me on the first try! Thanks!