# docker-build: build your software with docker ## Description docker-build is a script to build docker images from source. It will be deprecated once the 'build' feature is incorporated into docker itself (See https://github.com/dotcloud/docker/issues/278) Author: Solomon Hykes ## Install docker-builder requires: 1) A reasonably recent Python setup (tested on 2.7.2). 2) A running docker daemon at version 0.1.4 or more recent (http://www.docker.io/gettingstarted) ## Usage First create a valid Changefile, which defines a sequence of changes to apply to a base image. $ cat Changefile # Start build from a know base image from base:ubuntu-12.10 # Update ubuntu sources run echo 'deb http://archive.ubuntu.com/ubuntu quantal main universe multiverse' > /etc/apt/sources.list run apt-get update # Install system packages run DEBIAN_FRONTEND=noninteractive apt-get install -y -q git run DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl run DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang # Insert files from the host (./myscript must be present in the current directory) copy myscript /usr/local/bin/myscript Run docker-build, and pass the contents of your Changefile as standard input. $ IMG=$(./docker-build < Changefile) This will take a while: for each line of the changefile, docker-build will: 1. Create a new container to execute the given command or insert the given file 2. Wait for the container to complete execution 3. Commit the resulting changes as a new image 4. Use the resulting image as the input of the next step If all the steps succeed, the result will be an image containing the combined results of each build step. You can trace back those build steps by inspecting the image's history: $ docker history $IMG ID CREATED CREATED BY 1e9e2045de86 A few seconds ago /bin/sh -c cat > /usr/local/bin/myscript; chmod +x /usr/local/bin/git 77db140aa62a A few seconds ago /bin/sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang 77db140aa62a A few seconds ago /bin/sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl 77db140aa62a A few seconds ago /bin/sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -q git 83e85d155451 A few seconds ago /bin/sh -c apt-get update bfd53b36d9d3 A few seconds ago /bin/sh -c echo 'deb http://archive.ubuntu.com/ubuntu quantal main universe multiverse' > /etc/apt/sources.list base 2 weeks ago /bin/bash 27cf78414709 2 weeks ago Note that your build started from 'base', as instructed by your Changefile. But that base image itself seems to have been built in 2 steps - hence the extra step in the history. You can use this build technique to create any image you want: a database, a web application, or anything else that can be build by a sequence of unix commands - in other words, anything else.