Docker는 기본적으로 Root 권한으로 작동하고, daemon 하나로 모든 process를 통제하는 구조입니다. 이런 구조는 여러 node를 통제하는 HPC에 사용하기에는 매우 어려움이 따릅니다.
Singularity는 이런 단점을 해결할 수 있는 Container Solution 중 하나입니다.
이런 이유 때문에, Slurm이라는 강력한 Workload Manager를 사용하는 Datacenter에서는 Docker 사용을 막아놓고 Singularity가 설치되어 있습니다.
그러나 활용성(root 권한이 있어 패키지 설치가 비교적 자유롭기 때문에 usability가 높습니다), 커뮤니티(docker-hub) 활성화 정도에서 Docker가 매우 강력하고 점유율이 높습니다. Root가 없어 불편한 build 환경과 익숙하지 않은 recipe 형식 때문에, Singularity package 자체의 접근성은 매우 낮은 편입니다
이런 불편함 때문에 연구원들은 점차 Singularity를 기피하게 되고, Datacenter의 고정된 환경에 우겨넣은 python virtual env (anaconda)로 모든 환경 설정을 맞춰서 사용하곤 합니다. 이런 방식은 복잡한 환경 설정 과정에서 매우 많은 시간을 할당하게 하고, 까다롭게 관리하지 않으면 구성원 각자가 호환되지 않는 환경을 만들곤 합니다.
다행히 Docker 사용자가 많기 때문에 Singularity 측에서는 Docker 환경이 호환되도록 많은 신경을 썼습니다. 저희는 연구실 내부에 있는 Workstation을 사용해 활용성이 높은 Docker Image를 구축하고, Singularity Image로 변경하여 Datacenter에 넣는 방법을 제공함으로써 container를 자유롭게 쓸 수 있도록 하려 합니다.
이 문서에서는 Workstation을 이용해 구축된 Docker Image를 Singularity Image로 바꾸는 4가지 방법에 대해 기술합니다.
Docker daemon으로부터 직접 받아서 하는 방법도 있습니다. 매우 강력!