Pulling Images
We are currently hosting the docker images that will be used for grading on the Docker Hub.
You 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
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.