-
Notifications
You must be signed in to change notification settings - Fork 0
/
rundocker.sh
executable file
·71 lines (61 loc) · 2.82 KB
/
rundocker.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
#####################################################
# Name of the image and container
#####################################################
readonly name=test
#####################################################
# src_data is the address at the host
# dest_data is the address at the container
# This folder is READ ONLY hence, algorithms run inside
# the container can read the data from the folder but
# they cannot save data in it
#####################################################
readonly src_data=$PWD/data/
readonly dest_data=/program/data/:ro
#####################################################
# src_results is the address at the host
# dest_results is the address at the container
# Algorithms run inside the container
# can read and write the data from the folder
# Data saved outside the designated directory will
# be erased when the container is stopped
#####################################################
readonly src_results=$PWD/results/
readonly dest_results=/program/results
#####################################################
# Location of the executable inside the container
#####################################################
readonly executable=/program/src/experiments.py
#####################################################
# Stop running container and clean files
#####################################################
docker stop $name
docker system prune --force
#####################################################
# Build the container (in case source files were updated)
# Change Dockerfile to DockerfileGPU for GPU support
#####################################################
docker build --tag $name -f Dockerfile .
#####################################################
# Automatically determine if GPUs are available
#####################################################
gpus=$([ $(ls -la /dev | grep nvidia | wc -l) "==" "0" ] && echo "" || echo "--gpus all")
#####################################################
# Start container, mount data directory as read-only
# and mount results directory.
# We specify the user, i.e. "-u $(id -u):$(id -g)"
# to prevent docker from creating files owned
# by root in the mounted folder.
# See:
# https://unix.stackexchange.com/questions/627027/files-created-by-docker-container-are-owned-by-root
#####################################################
docker run $gpus -d --name $name -v $src_results:$dest_results -v $src_data:$dest_data -u $(id -u):$(id -g) -it $name /bin/bash
#####################################################
# Execute the algorithm in the container
# and pass all arguments passed to this script
#####################################################
docker exec -it $name python $executable "$@"
#####################################################
# Stop running container
#####################################################
docker stop $name