4. 온라인 코딩 테스트 시스템 실행 Container 제작
Container 제작과 관리는 이 프로젝트의 핵심이라고 할 수 있다. 컨테이너 제작과 생성, 관리를 얼마나 잘 하느냐에 따라 사용자 경험이 달라 지기 때문이다. 언어별, 버전별, 상황별, 라이브러리별, 목적별 제작되는 컨테이너가 모두 다르고 생성 개수도 많이 때문에 컨테이너를 얼마나 잘 관리하는지 역시 중요하다.
Container 기본 형태
# 컨테이너 기본 구조
FROM 실행 언어 base 이미지
# 실행할 파일이 저장되어 있는 디렉토리 볼륨 마운트
VOLUME ["/exam"]
# 작업 위치 설정
WORKDIR /exam
# 환경 파일 실행
ENTRYPOINT ["실행 환경"]
# CMD 명령러를 통한 실행 파일명 동적 설정
CMD ["test.lang"]
# 이미지 생성 / 언어별 Dockerfile 사용
# docker build -t container_lang:latest -f Dockerfile_lang .
# 컨테이너 실행 / 공통 storage 연결을 위한 네트워크 설정과 volume 설정, 언어 실행 후 컨테이너 삭제
# docker run --rm --network net-onCoTe -v vol-onCoTe-storage:/exam container_lang:latest test.langC lang
# Dockerfile_c
# 베이스 이미지 설정
FROM gcc:12.4.0-bookworm
# 저장소 볼륨 설정
VOLUME ["/exam"]
# 작업 위치 설정
WORKDIR /exam
# gcc를 사용하여 컴파일을 진행 후 실행하는데 중간 오브젝트 파일이나 최종 실행 파일을 남기지 않기 위해 언어 실행 및 정리 작업을 shell script로 작성
ENTRYPOINT ["./run_c.sh"]
CMD ["clang.c"]
# 이미지 생성
# docker build -t container_c:latest -f Dockerfile_c .
# 컨테이너 실행
# docker run --rm --network net-onCoTe -v vol-onCoTe-storage:/exam container_c:latest # run_c.sh
#!/bin/sh
# 현재 시간을 활용하여 파일명이 겹치지 않도록 임시 파일명
TIME=$(date +%s)
# 컴파일 / 실행 / 삭제
gcc "$1" -o "$TIME" && ./"$TIME" && rm "$TIME"java
# Dockerfile_java
# 베이스 이미지 설정
FROM openjdk:17-jdk-slim
# 저장소 볼륨 설정
VOLUME ["/exam"]
# 작업 위치 설정
WORKDIR /exam
ENTRYPOINT ["java"]
CMD ["java.java"]
# 이미지 생성
# docker build -t container_java:latest -f Dockerfile_java .
# 컨테이너 실행
# docker run --rm --network net-onCoTe -v vol-onCoTe-storage:/exam container_java:latest javascript
# Dockerfile_js
# 베이스 이미지 설정
FROM node:22-alpine
# 저장소 볼륨 설정
VOLUME ["/exam"]
# 작업 위치 설정
WORKDIR /exam
# COPY ./test.js .
ENTRYPOINT ["node"]
CMD ["javascript.js"]
# 이미지 생성
# docker build -t container_js:latest -f Dockerfile_js .
# 컨테이너 실행
# docker run --rm --network net-onCoTe -v vol-onCoTe-storage:/exam container_js:latest python
# Dockerfile_py
# 베이스 이미지 설정
FROM python:3.13.5-alpine
# 저장소 볼륨 설정
VOLUME ["/exam"]
# 작업 위치 설정
WORKDIR /exam
ENTRYPOINT ["python"]
CMD ["python.py"]
# 이미지 생성
# docker build -t container_py:latest -f Dockerfile_py .
# 컨테이너 실행
# docker run --rm --network net-onCoTe -v vol-onCoTe-storage:/exam container_py:latest sql
# 네트워크 환경의 독립적인 SQL 실행 컨테이너 제작중...개선 및 버전 관리
- 언어별 컴파일러 버전 관리를 위한 언어 버전별 베이스 이미지 수정
- 커스텀 실행 환경 세팅을 위한 컨테이너 생성 중 library 설치 명령어 작성