You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

I will attempt to expand more on each of these as I learn the different phases of dockerization.

A quick-start guide to Docker can be found here: https://docs.docker.com/linux/step_one/

NOTE: CoreOS installations come with Docker pre-installed. You can skip that step if you already have Docker installed and scroll down to where they start running commands.

Using Docker Images

Building Custom Docker Images

Building an Image from a Dockerfile

Once you have a Dockerfile, you can tell docker to build it by running the following command:

docker build -t tag-name -f path/to/Dockerfile.extension path/to/build/context
i.e.
docker build -t clowder -f ./Dockerfile.clowder .

Tagging an Image

Tags are nice for saving a "snapshot" of an image, to make it easily runnable later. This is similar to using Git tags for new releases.

docker tag image-name [repository/]new-image-name[:tag-name]
i.e.
docker tag clowder ndslabs/clowder:0.9.1

 

NOTE: Don't forget to push your new tag up to Docker Hub!

Writing a Dockerfile

Docker images are built from files called Dockerfiles.

A simple Dockerfile example can be found below:

# Use centos66 as the base image for this build
FROM    centos:centos6
 
# Enable Extra Packages for Enterprise Linux (EPEL) for CentOS
RUN     yum install -y epel-release
# Install Node.js and npm
RUN     yum install -y nodejs npm
 
# Copy files from the host into the container
COPY package.json /src/package.json
 
# Run 'npm install' to install dependencies
RUN cd /src; npm install --production
 
# Tell Docker we plan to use this port
EXPOSE  8080
 
# Specify the default command for when the container runs
CMD ["node", "/src/index.js"]

 

Amazing Docker Cheat Sheet

https://github.com/wsargent/docker-cheat-sheet

Other Tips

CoreOS Docker Quirks

Default Docker IP Address

By default, Docker starts the daemon on a 172.17.X.X IP address. This can cause issues if 172.17.X.X is routable on the network from which you are trying to connect. 

For example, the IllinoisNet WiFi uses a 172.X.X.X network, so the default IP address is routable on IllinoisNet. This results in traffic designated for the docker daemon to be sent over the network (since the network thinks it knows where you are trying to send it. 10.0.1.1/16 is unroutable on that network, so setting the docker daemon's IP to 10.0.1.1/16 allows our machine to properly send traffic to the docker daemon, instead of it being pushed out over the network where docker cannot see it.

To change Docker's default IP address, execute the following command, substituting for the CIDR notation of the new IP. It is imperative that you set this to a non-routable IP according to your source network's configuration. 

sudo echo "[Service]
ExecStart=
ExecStart=/usr/lib/coreos/dockerd daemon --host=fd:// --bip=NEW_CIDR" > /etc/systemd/system/docker.service
sudo systemctl stop docker
sudo systemctl daemon-reload
sudo ip link set docker0 down
sudo brctl delbr docker0
sudo systemctl start docker

To verify:

ip addr should now list your newly specified ip instead of 172.17.x.x. A reboot may also be required in order for this change to take effect.

Command Completion: Unsupported

Bash completion is not available for CoreOS, making it difficult or impossible to install docker command completion, as described here: https://docs.docker.com/compose/completion/

Installing Docker Compose

Since the /usr/local/bin/ folder is read-only, and sudo -i did not seem to help, I was able to install docker-compose by using curl to place the executable in my home folder (or any writable folder). Then, simply add docker-compose to the PATH environment variable and give it permission to execute:

mkdir /home/core/docker-compose
curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /home/core/docker-compose
export PATH=$PATH:/home/core/docker-compose
chmod +x /home/core/docker-compose/docker-compose

Debugging

General

  • docker diff <name or id> - show what files differ from the source image (what changes you have made since running)

Building a Container

  • docker stats <name or id> - shows memory usage / limits
  • docker run <id> - can use the id of incremental build images to boot into the failing state

Running a Container

  • docker events <id> - shows what docker daemon is doing in the background
  • docker inspect <name or id> - inspect a particular container's configuration
  • docker logs <id> - shows the logs of a particular container
  • nsenter - enter a particular namespace

Inspecting a Running Container

  • docker exec -it <name or id> /bin/bash
  • No labels