В этом конкретном приложении я бы, вероятно, скомпилировал бы программу в контейнере, а не создал бы из нее образ (так как вы немедленно выбрасываете его, а компиляция и тестирование являются важной частью, и, как правило, выпосле этого не требуется ничего для сборки).
Если вы предполагаете, что входной файл каким-то образом попадает в контейнер, вы можете написать скрипт, который выполняет сборку и тестирование:
#!/bin/sh
cd /project/src/student
tar xzf "/app/$1"
cd ../..
make
...
curl ??? # send the test results somewhere
Тогда ваш Dockerfile просто встраивает это в образ, без какого-либо конкретного кода студента
FROM buildpack-deps:stretch
RUN apt-get update && apt-get install ...
RUN adduser user
COPY build_and_test.sh /usr/local/bin
USER user
ADD project-structure.tar.gz /project
Затем, когда вы действительно запускаете его, вы можете использовать опцию docker run -v
для добавленияпредставленный код.
docker run --rm -v $HOME/submissions:/app theimage \
build_and_test.sh student_name.tar.gz
В исходном решении обратите внимание, что наиболее важными из них, вероятно, будут среда выполнения языка, набор инструментов C и связанные заголовочные файлы, и поэтому, пока вы получаете по-видимому огромное изображение, всеэти вещи происходят из слоев в базовом изображении и поэтому распределяются между отдельными сборками (это не занимаетой как ты думаешь)