Docker

Some of my notes about how I use Docker.

Create a Dockerfile:

FROM ubuntu

# Install whatever you need.
RUN apt-get update
RUN apt-get -y install apache2 php
# ...etc.

WORKDIR "/work"

# Start services that you need when you run the container. The last should be bash if you want to log in.
ENTRYPOINT service mysql start \
   && apachectl graceful \
   && /bin/bash

Create an image (tagged myimage):

docker build -t myimage .

View it and any others:

docker images

Remove an image:

docker rmi <leading-unique-part-of-image-id>

Run an image, mounting the current directory as /work (note that you can't specify the host-dir of the volume in the Dockerfile, so it has to be done at run-time). The port mapping is <host-port>:<container-port>

docker run -it --rm -v $PWD:/work -p81:80 myimage

Show existing containers:

docker ps -a

Remove a container:

docker rm <leading-unique-part-of-container-id>

MySQL

Start a new MySQL container, which can be accessed at 127.0.0.1:3305 and which has its data in a local volume:

docker run -it -e MYSQL_ROOT_PASSWORD=pwd123 -p3305:3306 -v$PWD/mysqldata:/var/lib/mysql mysql

Note that because we're keeping local data, root's password is only set on the first set-up, and so can be left off in future commands.