WordPress
Article

Wocker: Easy Dockerized WordPress

By Aleksander Koko

In my previous articles on Docker and WordPress, we’ve seen how to setup WordPress and Docker using plain commands on the terminal, then we moved on to automated tools like Docker Compose. Finally we deployed the Docker Compose configuration to DigitalOcean. If you haven’t read these articles yet, you can find them below:

In this article I’ll show you how we can setup WordPress with Docker in yet another way. We’ll use a tool called Wocker (WCKR) to simplify our workflow.

Wocker

Wocker is different to the tools I’ve covered previously. If you’ve used Vagrant before, you should find this easy to use. Wocker is essentially Vagrant that uses CoreOS and Docker. You might not see much evidence of Docker, but the underlying technology is Docker. To setup Wocker, it’s as easy as executing two commands:


git clone https://github.com/wckr/wocker.git && cd wocker
vagrant up

The first command clones Wocker from its GitHub repository and the second is just our standard vagrant up command that builds (provisions) the machine. If you’d like to follow along, make sure you’ve installed VirtualBox and Vagrant if you haven’t already.

A quick note here, in most nix* systems, you may have to execute sudo or pass sudo a password when you run vagrant up.

vagrant up on Wocker

The IP of this Vagrant box is 172.17.8.23, but it’s not working yet. If you check the network data, you’ll see that the HTML content has been downloaded, but the other files (CSS, JavaScript) have not been downloaded. That’s because all of our files are being requested from Wocker.dev. Wocker helps by setting everything up for us, we have a few options here.

Network stats for Wocker

You can manipulate the wp-config.php that lives under data/wocker/ by adding these two lines:

define('WP_HOME','http://172.17.8.23/');
define('WP_SITEURL','http://172.17.8.23/');

Sublime with Wocker

Network stats for Wocker

You can manually add 172.17.8.23 wocker.dev to your hosts file.


sudo nano /etc/hosts

editing etc hosts for wocker

This line will depend on your OS.

The easies way of all is to install the ‘host updater’ plugin.

vagrant plugin install vagrant-hostsupdater

This plugin makes the job of updating our hosts file much easier.

Now, you should be able to visit the IP or the hostname of your VM in your browser, both should work.

Wocker working

Let’s look carefully at your folder. Besides the Wocker files that you cloned from Github, there’s also a folder called data. In this folder you’ll see everything from WordPress (including your themes and plugins etc.).

Wocker CLI

Wocker also comes with a CLI. If you’ve worked with Docker, you will know that you need to execute a lot of commands to get a container running. You have to work with filesystem mapping, ports, linking containers and a lot more. Wocker CLI is an abstraction of Docker CLI. This doesn’t mean that you can’t use Docker CLI inside your VM. But if you’re starting out and want to get up and running with Docker and WordPress, it’s a nice tool. To access Wocker CLI you need to be inside the VM. In the project directory (the directory that has the Vagrantfile) execute:


vagrant ssh

Now execute:


wocker

Wocker CLI

You’ll see some information on how to use this CLI. The commands are self explanatory, but feel free to experiment and practice. A note here about the commands that aren’t in the help information. If you execute a command that is part of Docker CLI and not part of Wocker, then Wocker will execute it. That’s because Wocker extends Docker.


wocker stop wocker
wocker start wocker
docker ps
wocker ps

The first command stops the container named wocker. The same thing can be done with docker stop docker and wocker start docker.

Let’s say that you’ve finished your work and it’s now time to close the VM, we’d run:


exit
vagrant halt

Then, after a few hours, you want to work with your projects again. We would now run:


cd /pathtoyourproject
vagrant up

There’s one more step, because you have to start wocker manually this time. The first time when you create the VM, you don’t need to start docker, but from then onwards you do.


vagrant ssh
wocker start wocker

Check your browser, everything should now be working!

Digging Deeper

Curiosity is a powerful tool. In our jobs as developers, it is even more important. My moto is to be curious about the tools I use. This way I understand how the tool works.

The Wocker CLI is a simple tool. It’s actually a simple Bash script. You can check it out if you look at the Vagrantfile in the root directory of the project. Or, you can view it here.

If you’re even more curious (I’m glad to hear that!), you can look into what Wocker uses for its containers. Wocker uses an image named wocker/wocker, we can find out more on Docker Hub. On the Wocker image page you’ll find a link to the Dockerfile. If you want to change it’s behaviour, you can fork Wocker repository.

Room for Improvement

Before I talk about what I don’t like about this tool, I’d like to say that I really think it’s a great tool for those who have little or no experience with Docker.

After working with Wocker for a while, here are a few areas that can be improved:

  • No multiple WordPress installations
  • With every restart I have to manually ssh and start wocker
  • Only one container, MySQL isn’t a separate container

For the first issues there are a few solutions. The first is to manually modify the IP in our Vagrantfile and add these two lines on wp-config.php:

define('WP_HOME','http://172.17.8.23/');
define('WP_SITEURL','http://172.17.8.23/');

The MySQL problem is a big one if you think about the concept behind Docker. Docker was created to keep things separated and to build things with architecture in mind. Running Apache, PHP and MySQL in one container isn’t ideal. But Wocker was built with simplicity in mind and for new Docker and WordPress users and does its job very well.

Conclusion

In this article we’ve seen what Wocker is and how to get started using it. Wocker is easy to install and if you’re a new member of the Docker community, consider using this tool for your next WordPress project.

If you want to know more about Docker and how it works, check our previous articles on Docker and WordPress:

I want to hear from you. What do you think about Wocker? Would you consider it on your next project? Have you used other similar tools that you can recommend?

  • Brandon Tamm

    I love your series and am anxiously awaiting the full circle of your workflow – setting up and using version control as well as file/database backup solution to keep data persistent, etc.

    I have seen a lot of tutorials that stop after deployment – but we all know that development doesn’t end there and contains pushing data and backing up that data. I haven’t yet seen a perfect docker workflow tutorial from composing, to deploying, to version control and data backup.

    Curious as to why you would be using vagrant and wocker when the clear alternative is docker machine, which is a low-overhead, built-for-docker-by-docker piece of software.

    Have you used this? After using, would you consider updating your tuturorials to introduce this into your workflow?

    • Aleksander Koko

      Hi @brandontamm:disqus . Thanks for reading this and hope you enjoyed it.

      First I was thinking to stop here with Docker (Also some articles on Dokku) but you are giving some good ideas so I think there would be also another article on the deployment part. I haven’t used Docker Machine or Swarm but I’m planing to. That’s because when I was writing those, the two tools were in alpha/beta phase so a lot of things would change in the near future. The two tools are really great and promising.

      I’m will see them in more depth and I know that there will be other articles from me on this topics.

      The reason why I wrote this, is just to give the readers another alternative of Docker + WordPress. Many readers don’t have the time or the desire to try Docker (or similar technical things). Wocker is an alternative. I would use this tool on Mac but not on Linux. On Mac and Windows still many things don’t work. To fix some issues you would need to go inside boot2docker vm and start changing things.

  • Joe

    Something is b0rked… error “SSH-2.0-OpenSSH_6.4 Protocol mismatch.” when navigating to http://127.0.0.1:2022/ I am going to keep trying one of your other docker tutorials.

Recommended

Learn Coding Online
Learn Web Development

Start learning web development and design for free with SitePoint Premium!

Instant Website Review

Use Woorank to analyze and optimize your website to improve your website to improve your ranking!

Run a review to see how your site can improve across 70+ metrics!

Get the latest in WordPress, once a week, for free.