Pulling Images

We are currently hosting the docker images that will be used for grading on the Docker Hub.

You can can “pull” the most recent submitty images using the commands:

docker pull submitty/python:2.7
docker pull submitty/python:3.6
docker pull submitty/java:8

Creating Containers

Once you have pulled the correct image from Docker Hub, you can create some containers. Container creation does not start a container, but rather merely creates it and gets it ready to run.

Within Submitty, we create our containers using a command similar to this one:

NOTE: capitalized arguments in a command are meant to be substituted/customized.

docker create -i -t -v SOURCE_CODE_DIRECTORY:SOURCE_CODE_DIRECTORY -w SOURCE_CODE_DIRECTORY --name UNIQUE_CONTAINER_NAME CONTAINER_IMAGE FULL_EXECUTABLE_PATH

-i boots the container in interactive mode, allowing submitty to pipe standard input to the containers.

-t Allocates a pseudo-TTY so that you can interact with your container.

-v mounts a directory on the host machine so that output persists after the docker exits. SOURCE_CODE_DIRECTORY:SOURCE_CODE_DIRECTORY specifies first the path to the mounted directory on the host machine, then the path to which it will be mapped in the docker container.

-w Specifies the working directory within the container.

--name UNIQUE_CONTAINER_NAME allows you to specify the unique name by which you can address your container. NOTE: This can be used as the hostname for the container when you create sockets.

CONTAINER_IMAGE is the image with which the container will be built (e.g. submitty/python:3.6 or submitty/java:8)

FULL_EXECUTABLE_PATH is the path to the executable that you want to run on the container.

NOTE: Specify FULL_EXECUTABLE_PATH to be /bin/bash to drop into a bash shell when the container is started.

Networking Containers

Once you have created a few containers, you can create a network with this command:

docker network create --driver bridge NETWORK_NAME

Where you can specify your own network_name.

Then, you can connect your containers to the network as follows:

docker network connect NETWORK_NAME CONTAINER_NAME

Starting Containers

A created container can be started using the command:

docker start -i --attach CONTAINER_NAME

Cleaning Up

When the run is finished, it is important to stop and remove the containers and network we have created:

docker stop CONTAINER_NAME
docker rm CONTAINER_NAME
docker network rm NETWORK_NAME

Note that these steps can be dropped into a bash script and customized.