이 Docker 이미지 환경은 Coduck 채점 시스템에서 사용하기 위한 멀티언어 샌드박스 채점기입니다.
IOI의 isolate를 통해 자원 제한, 보안 격리, 시간/메모리 제어가 가능합니다.
| 언어 | 컴파일러 / 인터프리터 | 컴파일 / 실행 방식 |
|---|---|---|
| C | gcc |
gcc Main.c -o Main./Main |
| C++ | g++ |
g++ Main.cpp -o Main./Main |
| Python3 | python3 |
python3 Main.py |
| PyPy3 | pypy3 |
pypy3 Main.py |
| Java | openjdk-8-jdk-headless |
javac Main.java java Main |
isolate --init 명령어를 사용하여 샌드박스를 초기화합니다.
$ isolate --init
/var/local/lib/isolate/0/var/local/lib/isolate/0/box 디렉토리가 작업 디렉토리가 됩니다.
hello.c 파일을 작성합니다.
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}isolate를 사용하여 C 프로그램을 컴파일하고 실행합니다.
cp hello.c /var/local/lib/isolate/0/box
isolate --run --processes=4 -- /usr/bin/gcc hello.c -o hello
isolate --run -- hellohello.py 파일을 작성합니다.
print("Hello, World!")isolate를 사용하여 Python3 프로그램을 실행합니다.
cp hello.py /var/local/lib/isolate/0/box
isolate --run -- /usr/bin/python3 hello.pyhello.java 파일을 작성합니다.
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}isolate를 사용하여 Java 프로그램을 컴파일하고 실행합니다.
cp hello.java /var/local/lib/isolate/0/box
isolate --run --processes=32 \
-- /usr/lib/jvm/java-8-openjdk-amd64/bin/javac \
-encoding UTF-8 Main.java
isolate --run --processes=32 \
-- /usr/lib/jvm/java-8-openjdk-amd64/bin/java \
-Dfile.encoding=UTF-8 Main