Solomon Hykes 048f9f4974 Added docker-build (formerly github.com/shykes/changer) as a contrib script 12 năm trước cách đây
..
README 048f9f4974 Added docker-build (formerly github.com/shykes/changer) as a contrib script 12 năm trước cách đây
docker-build 048f9f4974 Added docker-build (formerly github.com/shykes/changer) as a contrib script 12 năm trước cách đây
example.changefile 048f9f4974 Added docker-build (formerly github.com/shykes/changer) as a contrib script 12 năm trước cách đây

README

# 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.