I have started to use the Docker images from wadmiraal/drupal for local Drupal development, for example, wadmiraal/drupal:8.1.0 to use Drupal 8.1.0. These images are very well documented at Use Docker to kickstart your Drupal development.
There are other images for working with Drupal, but I happened to choose this set since it incorporates the versions of PHP, MySQL, and Apache that are close to what I've been using.
Here are some random notes on what I have experienced initially as someone who is new to Docker.
(1) Containers are easy and really fast to spin up
(At least on my Ubuntu-based system).
you want to start completely fresh, run a new container, which means
any changes you have made are lost. Sometimes, that's what you want, for
example, when I want a fresh install of the module I'm working on and a
On the other hand, if you want to
preserve changes to the file system of the container, you can stop it
and then start the same container later. But be aware that it's really
easy to accumulate clutter in the way of containers that you no longer
want and have to manually remove. You can see all containers, running or not, by the command: docker ps -a
(2) There are different ways to communicate into Docker containers.
The ways I've used are port forwarding and volume mounting.
With port forwarding, when you run a container you specify which ports on the local host are passed on to a corresponding port of the container. For example, port 8080 locally can be mapped to the default port 80 of the container for http. Browsing to an address such as localhost:8080 then sends the request to the instance of the web server running in the container.
Volume mounting is a way to make local directories visible to processes running in the container. I mount my local development directory for the Optimizely module to a directory path in the container's file system under the Drupal site. This allows me to edit code locally without having to do so inside the container. Nice!
(3) Using ssh and scp
If you run the container with the appropriate port forwarding, you can ssh into the container. In the case of the image wadmiraal/drupal, once you have an ssh terminal the vi and vim editors are available.
However, other tools that you might want are not there. These can be added on the fly by using apt-get install, for example. But keep in mind that such changes will not necessarily persist, depending on how you manage the container.
If ssh is working, then so does scp for copying files back and forth between host and container. I have a one line php script that calls the function phpinfo(), which I scp from my local into the web root of the container for troubleshoot.
(4) Using xDebug and Sublime Text with Docker
The Docker image has xDebug enabled for PHP, but I'd like to have xDebug running on the container to communicate with Sublime on the local system so that I can edit and step through code locally.
So far, I am struggling to set this up. I expect to crack this nut eventually and will blog about it when I do.
Docker Tutorial Series, Part 1: An Introduction | Docker Components
Use Docker to kickstart your Drupal development
Bind container ports to the host