Creating Docker Images

In Docker lingo it is important to distinguish between an image and a container. A Docker image is what we make when we get when we run the docker build command. A Docker container is a running instance of an image, that is, what we get when we run the docker run command. It is possible to have many running containers started from a single image.

Other Documentation

Common Directives

FROM

The FROM directive specifies the base image that will be used for the current image. In the LAPPS Grid all images will either be based on one of the lappsgrid/* images or one of the Galaxy images (typically in the bgruening/* namespace).

The following Lappsgrid images are available:

COPY

The COPY directive takes two parameters, a source and a destination, and as the name suggests, copies the source file to the destination in the image being built.

Example

	COPY ./file.txt /usr/local/share/file.txt

The above copies file.txt to the /usr/local/share directory in the image being created.

Note

Docker will only copy files from the current directory. You cannot specify an arbitrary path as the source.

ADD

The ADD directive is the same as the COPY directive except it does some extra magic. In particular, the ADD directive will decompress any files when it copies them to the target.

The ADD directive’s source parameter can also be a URL, in which case Docker will download the file pointed to by the URL and copy it to the target image.

	ADD http://example.com/file.tgz /usr/share

RUN

The RUN directive can be used to execute arbitrary commands when building the image,

	RUN chmod ug+x /usr/local/share/file.txt

Long commands can be be split into several lines with the line continuation character \ and multiple commands can be run in sequence by joining them with the AND (&&) operator.

	RUN apt-get update && apt-get upgrade -y && \
	    apt-get install package1 package2 pacakge3 && \
		chmod u+x /usr/bin/startup.sh	    		

USER

The USER directive specifies the user account subsequent command will be RUN as.

	USER joe
	RUN echo 'some data' > /home/joe/file.txt && \
	    chmod a+r /home/joe/file.txt
	    
	USER root
	RUN apt-get install -y package1 package2 package3

CMD

The CMD directive specifies the command that will be run when the container is launched. When this command terminates the Docker container will exit.

	CMD /usr/bin/startup.sh