Taking Docker for a spin

Taking Docker for a spin

Originally posted at www.walley.org.uk.

Docker has intrigued me for some time now so I thought I'd take a closer look. Purely in a personal capacity, as until Docker supports Windows containers there are few applications at work.

Let's pick something simple but non-trivial. I'd like to set up an instance of WordPress locally. WordPress relies on MySQL for storage so let's split the MySQL database out into its own container first.

>> docker run --name db -e MYSQL_ROOT_PASSWORD=example -d mysql

We can then run the WordPress container and link it to our MySQL container like so.

>> docker run --name wordpress --link db:mysql -p 8080:80 -d wordpress

This is all fine and dandy but we need to persist the data beyond the lifetime of an ephemeral container.

We could mount a host directory as a data volume.

>> docker run --name db -v /var/container_data/mysql:/var/lib/mysql -d mysql

This will mount the host directory, /var/container_data/mysql, into the container at /var/lib/mysql.

A problem with this approach is that it is no longer portable and the data directory is outside the control of Docker.

Data Volume Containers, essentially data-only containers, provide the solution.

>> docker run -v /dbdata --name dbdata mysql /bin/true

The bin/true command is simply a dummy as docker needs something to run. It's also worth noting that the container doesn't need to be running to be used. Run docker ps -a to confirm that the container has been created.

We can then use this data container from our MySQL container.

>> docker run --name db --volumes-from dbdata -e MYSQL_ROOT_PASSWORD=example -d mysql

The data is encapsulated by our data container. Within the data container we could mount a host directory as a data volume. However it feels more Docker-like to let the container manage the data and access it through other containers. See wordpress-backup for an example of backing up and restoring a WordPress install.

If you're curious you can use docker inspect dbdata to pinpoint the location of the MySQL storage directory.
















"State": { "ExitCode": 0, "FinishedAt": "2015-05-11T18:35:01.586748612Z", "Paused": false, "Pid": 0, "Running": false, "StartedAt": "2015-05-11T18:35:01.270467585Z"},"Volumes": { "/dbdata": "/var/lib/docker/vfs/dir/fa6b72b85c32190da7307764f25888bb63f19e1fa728aeddb8b31b672a46f4ef", "/var/lib/mysql": "/var/lib/docker/vfs/dir/b091111b39a9da92883153bcd1ef3f6ae1dd5ac557381a972444e3e18c330d12"},"VolumesRW": { "/dbdata": true, "/var/lib/mysql": true}

Running ls /var/lib/docker/vfs/dir/b091111b39a9da92883153bcd1ef3f6ae1dd5ac557381a972444e3e18c330d12 shows the contents of our MySQL directory.

>> auto.cnf  ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  wordpress

Hi! We've been using Docker to help manage our development environment at work for about a year now ... although at home I use Vagrant for the same purpose, as I'm trying to maintain a cross-platform development environment there. (Work is mostly Linux-only).

Like
Reply

To view or add a comment, sign in

More articles by John Walley

  • EAST CROYDON: Where Art Thou?

    I have a confession. Whenever I have an opportunity to use a ticket machine at a train station I’m secretly hoping to…

  • Never attribute to malice what can be explained by incompetence

    I remind myself of this saying whenever I come across a new and surprising example of poor user interface design. With…

    9 Comments
  • Readme Driven Development

    Originally posted at https://www.mulberryhousesoftware.

  • Reusable Charts

    Originally posted at https://www.mulberryhousesoftware.

  • Prioritization

    The list of ideas and features you and your team could come up with is likely enough to last a lifetime. There's both…

    1 Comment
  • Memoization

    Originally posted at www.walley.

    2 Comments
  • React and D3

    Originally posted at www.walley.

Others also viewed

Explore content categories