Application to Docker containers in the OpenMOLE platform
Docker
OpenMOLE
2
3
reproducibility
security layer
Server-side
Client-side
HPC
Tasks
Results
4
Compute Node
Compute Node
Compute Node
Compute Node
High Performing Computing
(A)
(B)
Filesystem isolation
/home/openmole
Container 1
/home/openmole
Container 2
bind(localhost, 8000)
Container 1
Container 2
Network isolation
bind(localhost, 8000)
=> Same path
=> Same address/port
5
Server-side
#root
Client-side
HPC
#user
Tasks
Results
kernel 2.6.*
6
1
2
Running
#user
kernel-agnostic
7
Linux containers
in
restricted environments
Features:
Filesystem isolation
Network isolation
Restrictions:
images
in
8
Containerisation features:
#root
#user
but kernel >= 3.12
9
control another process
change their arguments
userspace implementation of chroot
10
/home/user/rootfs/bin/myprogram
/bin/myprogram
userspace
kernel-agnostic
filesystem isolation
network isolation
=> EXTENSION
11
Program
PRoot
Kernel
or bind(******, )
→
kernel operation
port mapping:
Command: -p :
proot
8001
8001
8000
8000
connect(******, )
8000
8000
bind(******, )
8001
program
12
Command: -n
proot
program
bind(******, )
8000
bind(******, )
0
OS selects new port
Retrieve new port
Add port mapping entry
13
script.py
server
client
bind
close
connect
send
close
"OK!"
1 iteration
14
15
Evaluation of PRoot's and Docker's overhead
over socket operations
16
17
Open Container Initiative
Image format
PRoot OCI Loader
1) Merge layers
2) Build launcher
with appropriate PRoot options
extract layers and remove whiteouts
=> Little Scala program
Steps:
18
also called squashing
Setup
: Fibonacci with recursion
script.py
Docker image used: Alpine + Python3
19
Evaluation of the Loader's and Docker's overhead using a Python Docker image
-
Restrictions
-
Not root
kernel 2.6
20
21
transition
task
inputs
workflow:
set of:
with:
outputs
EmptyTask
ExplorationTask
ScalaTask
CARETask
files
variables
...Task
...
22
ContainerTask
image archive
command
execute image over variables
(Scala case class)
Design
23
Implementation
ContainerTask steps:
1. Merge layers
2. Build launcher
3. Prepare input files
4. Prepare PRoot wrapper
5. Execute command
6. Fetch output files
CARETask
OCI Loader
24
25
Goals fulfilled with:
PRoot + extension
PRoot OCI Loader
ContainerTask
CARETask
script.py
bind
close
connect
send
close
"OK!"
script.py
bind
close
connect
send
close
"OK!"
same port?