-
Notifications
You must be signed in to change notification settings - Fork 7
How to create a new container
In this page you will see how to create a new container to assess a submission with another language or dependencies using Docker. Here you will find help about how to create containers with new languages, programs, and dependencies for UNCode. In order to make possible to extend available tools to assess the student's work. See the grading containers documentation to understand more about them. As here we will focus on how to a new grading container.
-
You must have already cloned or forked the repository to start adding this new container.
-
Create folder related to the container to create:
Once you are located into the
INGInious-containers
repository, go into thegrading
folder (where are located all the containers):
cd grading/
Create your new container folder (replace my-new-container
with the desired name for the container) :
mkdir my-new-container
-
Copy files and/or necessary dependencies not installable by package managers
The package managers available are 'dnf' or 'yum' on rockylinux base image and only 'yum' on CentOS base image
In the case that are needed software or files that are not available by package managers as in the case of verilog container. In order to add dependencies, just copy that what is needed into the already created folder.
-
Create a
Dockerfile
Create a file called
Dockerfile
and write the next code into it:FROM unjudge/uncode-c-base LABEL org.inginious.grading.name = "my-new-container" # Add other additional CentOS commands to install dependencies ADD . /UNCode RUN cp -R /UNCode/grading/. /usr/lib/python3.6/site-packages/grading/ RUN rm -R /UNCode
FROM clause specifies the immediate ancestor from the new container will inherit, for this case, this will be
unjudge/uncode-c-base
, which already contains a lot of utilities that you will probably use. You can choose which container you inherit from, as each container also implements different functionalities.Warning: Repository images on
unjudge
are now based on rockylinux, if you want older versions based on CentOS useunjudge/(repo):centos-python36
tagLABEL clause specifies the new container's name. This name will be the same that is shown in the platform in the task settings, in environment tab.
RUN clause specifies a CentOS command, in this case, CentOS package manager is a program called yum. For instance you may add compilers or other tools, for instance, nodejs.
Replace
my-new-container
with your container's name. Then, write the commands that have to be executed either to copy the files or to install dependencies.This Dockerfile copies the files inside this folder through the
ADD
clause and installs it through the command in theRUN
clause. For more information about supported clauses, please consult the official documentation.Its important to take into account 2 details:
-
As the container created is inheriting from the base containers, the corresponding images built are for x86 architectures. In case your machine runs on a particular architecture different to x86, complete rebuilding of previous images is required using buildx, official documentation here
-
Current implementation of the base containers are running Python 3.9, important to take into account when installing or using commands compatible with said version.
-
-
Add your grading files
In case you want that tasks are automatically configured and this container is in charge of parsing the files and the submission, you have to add the corresponding code. For that you have to add a new language factory to execute the submission, as well as using other utilities available in the
uncode/
folder. Check thenotebook/
,multilang/
,hdl/
folders to see how the grading functionality is extended to accept different language for each environment. -
Test the Dockerfile:
For testing the right work of Dockerfile, it is necessary to have installed Docker, build the container with next command and set a correct tag to the generated image.
docker build -t unjudge/inginious-c-<my-new-container> .
- Restart the UNCode process to register the new container within the other grading environments and try submitting code.
- In some cases it is necessary to do some changes in the frontend to start using the container and new submissions, for instance, it might be necessary to add a new subproblem or to modify the available languages, for that check the
multilang
plugin to determine which changes are required.
UNCode - Distributed and maintained by the Universidad Nacional de Colombia, Campus Bogotá.
Visit the UNCode web page.
Visit UNCode.
- Home
- User's Documentation
- Developer's Documentation
- Deploy UNCode
- Others