[Ndn-interest] Dockerfile for NFD on Ubuntu
felix at rabe.io
Tue Sep 2 14:19:02 PDT 2014
Greetings from around the corner :)
As I see no way to edit that Wiki page (I'm logged in to Redmine), I've
just written a bit of a writeup about the most important Docker commands
and how to use the image in the attached file. Feel free to put the
content on the wiki.
On 01/Sep/14 03:38, Alex Afanasyev wrote:
> When you have time, can you also write some basic steps on how one would start working with Docker? For example, on this wiki page: http://redmine.named-data.net/projects/nfd/wiki/Using_NFD_with_Docker?parent=Wiki (I already linked it from main NFD wiki)
> I have only read briefly about the Docker and others probably also have very limited knowledge about it. But from what I get, it could be very convenient way to deploy NFD on any linux distribution without the need to tailor the binary packages for each.
> On Aug 31, 2014, at 6:08 PM, Felix Rabe <felix at rabe.io> wrote:
>> I've just managed to install NFD on Ubuntu inside Docker, it was straightforward thanks to the instructions on http://named-data.net/doc/NFD/0.2.0/INSTALL.html.
>> FROM ubuntu:14.04
>> RUN apt-get update
>> RUN apt-get install -y software-properties-common
>> RUN add-apt-repository -y ppa:named-data/ppa
>> RUN apt-get update
>> RUN apt-get install -y nfd
>> If you want man pages, throw an `apt-get install -y man` in there.
>> Caveat: Have not actually run the software :) will do that on my next opportunity before the meeting.
>> - Felix
>> Ndn-interest mailing list
>> Ndn-interest at lists.cs.ucla.edu
-------------- next part --------------
# Using NFD with Docker
Docker is a command-line frontend to operating system-level virtualization solutions such as Linux containers (LXC). This allows running application processes in isolation without the overhead of a more traditional VM – for example, there is no (operating system) boot process involved. For more information, see https://www.docker.com/ and http://en.wikipedia.org/wiki/Docker_(software).
## Step 1: Install Docker
Go to https://docs.docker.com/installation/ for installation instructions. Docker runs natively on (recent) Linux kernels, and via a VM on Windows and OS X.
## Step 2: Save the Dockerfile
Create a new directory and put the following in a file called `Dockerfile`:
# This is based on the instructions from:
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:named-data/ppa
RUN apt-get update
RUN apt-get install -y nfd
The syntax is documented at http://docs.docker.com/reference/builder/.
## Step 3: Build the image
Open a terminal and change to the new directory created above, and execute the following command to build an image called `named_data/nfd`:
docker build -t named_data/nfd .
This is similar to a compilation step to transform source code (the Dockerfile) into executable code (the Docker image). If you are new to Docker, the first time you run that command, it will pull the Ubuntu base image, which will take some time. Later rebuilds happen fast, thanks to Docker's snapshotting.
## Step 4: Run a shell from the image
To start a process (create a Docker container), you use the `docker run` command. As you might want to explore the Docker container at first, this shows you the usual way to start a Bash process that leaves no traces: (`--rm` removes the container afterwards)
docker run --rm -ti named_data/nfd /bin/bash
You find the full documentation of the `docker run` command at https://docs.docker.com/reference/run/, and the full command-line reference at https://docs.docker.com/reference/commandline/cli/.
## Next steps
There is an interactive Docker tutorial at https://www.docker.com/tryit/, and more documentation at https://docs.docker.com/. `docker help [command]` is also helpful.
Docker works best if a container runs only one process at a time, such as NFD. Bash is usually only used for exploration. To trim down the image, consider using Debian (90 MB) or Busybox (2.5 MB) as a base image instead of Ubuntu (225 MB). (There are currently no instructions for these base images, as these distributions are currently not supported / tested by the Named Data project.)
(TODO: Push a trusted build to https://registry.hub.docker.com/ so others can directly pull the pre-built image.)
## Summary of the Docker command line
This section lists the `docker` commands and arguments that are most commonly used.
build Build an image from a Dockerfile (`docker build -t imageName directory`)
run Run a command in a new container (`docker run --rm -ti ubuntu:14.04`)
### `docker run` arguments: general
Arguments marked with `*` can also be defined in the `Dockerfile`.
-d Run in the background (and use `docker ps/logs/stop/kill`)
-i Keep STDIN open (together with `-t`, for Bash)
--name containerName Give a container a name (for `--link` and `--volume-from`)
--rm Remove the container after it exits
-t Allocate a pseudo-TTY (together with `-i`, for Bash)
### `docker run` arguments: networking
--expose port * Expose a port for use with `--link`
--link otherContainer:alias Link to exposed ports of another container (sets env. vars)
-p hostPort:containerPort Publish a TCP port to the host
### `docker run` arguments: filesystem
-v /containerPath * Make a mount point available without content (for `--volumes-from`)
-v /hostPath:/containerPath Mount a host path into a volume (mount point, also for `--volumes-from`)
--volumes-from name Mount volumes from another container
More information about the Ndn-interest