Skip to content

Commit 6dab1ea

Browse files
committed
Further refactoring of run.sh
1 parent a553577 commit 6dab1ea

File tree

1 file changed

+75
-36
lines changed

1 file changed

+75
-36
lines changed

run.sh

Lines changed: 75 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,58 @@
22

33
set -e
44

5-
DEFAULT_IMAGE_TAG=ngraph
6-
IMAGE_TAG=${2:-$DEFAULT_IMAGE_TAG}
7-
DEFAULT_CONTAINER_NAME=ngraph_jupyter
8-
CONTAINER_NAME=${3:-$DEFAULT_CONTAINER_NAME}
9-
IMAGE_ID=$(docker images --format "{{.ID}}" "$IMAGE_TAG")
10-
11-
USAGE="Usage: $0 COMMAND [IMAGE_TAG] [CONTAINER_NAME]\n"
12-
USAGE+=" COMMAND is what you expect the script to do:\n"
5+
DEFAULT_IMAGE_TAG="ngraph"
6+
DEFAULT_CONTAINER_NAME="ngraph_jupyter"
7+
8+
# Initialize variables with default values
9+
IMAGE_TAG="$DEFAULT_IMAGE_TAG"
10+
CONTAINER_NAME="$DEFAULT_CONTAINER_NAME"
11+
12+
USAGE="Usage: $0 COMMAND [-i IMAGE_TAG] [-c CONTAINER_NAME]\n"
13+
USAGE+=" COMMAND is required:\n"
1314
USAGE+=" build - Builds an image from a Dockerfile.\n"
1415
USAGE+=" run - Runs a container and starts Jupyter.\n"
16+
USAGE+=" stop - Stops a running container.\n"
1517
USAGE+=" shell - Attaches to the shell of a running container.\n"
1618
USAGE+=" killall - Stops and removes all containers based on the image tag.\n"
1719
USAGE+=" forcecleanall - WARNING: Stops and removes all containers and images. This action cannot be undone.\n"
18-
USAGE+=" IMAGE_TAG is the optional Docker image tag (default: $DEFAULT_IMAGE_TAG).\n"
19-
USAGE+=" CONTAINER_NAME is the optional Docker container name (default: $DEFAULT_CONTAINER_NAME).\n"
20+
USAGE+=" -i IMAGE_TAG: Optional Docker image tag (default: $DEFAULT_IMAGE_TAG)\n"
21+
USAGE+=" -c CONTAINER_NAME: Optional Docker container name (default: $DEFAULT_CONTAINER_NAME)\n"
2022

23+
# Check if at least one argument is provided
2124
if [[ $# -lt 1 ]]; then
2225
echo >&2 "ERROR: Must specify the command"
23-
printf "$USAGE" >&2
26+
printf "%b" "$USAGE" >&2
2427
exit 2
2528
fi
2629

30+
# Extract the command
31+
COMMAND="$1"
32+
shift
33+
34+
# Parse named parameters
35+
while getopts ":i:c:" opt; do
36+
case "$opt" in
37+
i)
38+
IMAGE_TAG="$OPTARG"
39+
;;
40+
c)
41+
CONTAINER_NAME="$OPTARG"
42+
;;
43+
\?)
44+
echo "Invalid option: -$OPTARG" >&2
45+
printf "%b" "$USAGE" >&2
46+
exit 1
47+
;;
48+
:)
49+
echo "Option -$OPTARG requires an argument." >&2
50+
printf "%b" "$USAGE" >&2
51+
exit 1
52+
;;
53+
esac
54+
done
55+
shift $((OPTIND -1))
56+
2757
# MODHACK is a workaround for Docker on macOS
2858
if [[ "$(uname)" == "Darwin" ]]; then
2959
MODHACK="-v /lib/modules:/lib/modules:ro"
@@ -32,11 +62,9 @@ else
3262
fi
3363

3464
function build {
35-
echo "Building docker container with tag $IMAGE_TAG"
65+
echo "Building Docker image with tag '$IMAGE_TAG'..."
3666
docker build . -t "$IMAGE_TAG"
37-
38-
IMAGE_ID=$(docker images --format "{{.ID}}" "$IMAGE_TAG")
39-
echo "Container image ID: $IMAGE_ID"
67+
echo "Docker image '$IMAGE_TAG' built successfully."
4068
return 0
4169
}
4270

@@ -48,21 +76,21 @@ function run {
4876
exit 1
4977
fi
5078

51-
echo "Starting a container with the name $CONTAINER_NAME using $IMAGE_TAG image..."
79+
echo "Starting a container with the name '$CONTAINER_NAME' using the image '$IMAGE_TAG'..."
5280

5381
# Check if a container with the exact name exists
54-
container_id=$(docker ps -aq -f name=^/${CONTAINER_NAME}$)
82+
container_id=$(docker ps -aq -f "name=^/${CONTAINER_NAME}$")
5583

5684
if [[ -n "$container_id" ]]; then
5785
# Stop the container if it's running
58-
if docker ps -q -f name=^/${CONTAINER_NAME}$ > /dev/null; then
59-
echo "Stopping existing container with the name $CONTAINER_NAME..."
86+
if docker ps -q -f "name=^/${CONTAINER_NAME}$" > /dev/null; then
87+
echo "Stopping existing container with the name '$CONTAINER_NAME'..."
6088
docker stop "$CONTAINER_NAME" > /dev/null
6189
fi
6290

63-
# Remove the container if it exists
64-
if docker ps -aq -f name=^/${CONTAINER_NAME}$ > /dev/null; then
65-
echo "Removing existing container with the name $CONTAINER_NAME..."
91+
# Remove the container if it's stopped
92+
if docker ps -aq -f status=exited -f "name=^/${CONTAINER_NAME}$" > /dev/null; then
93+
echo "Removing stopped container with the name '$CONTAINER_NAME'..."
6694
docker rm "$CONTAINER_NAME" > /dev/null
6795
fi
6896
fi
@@ -72,70 +100,77 @@ function run {
72100
-v "$PWD":/root/env -p 8787:8787 $MODHACK \
73101
--entrypoint=/bin/bash --privileged --cap-add ALL "$IMAGE_TAG")
74102
docker start "$CONTAINER_ID"
75-
echo "Started container with ID $CONTAINER_ID and name $CONTAINER_NAME"
103+
echo "Started container with ID '$CONTAINER_ID' and name '$CONTAINER_NAME'"
76104

77105
# Install the package inside the container
78106
docker exec -it "$CONTAINER_ID" pip install -e .
79-
echo "Starting Jupyter in the container. Open http://127.0.0.1:8787/ in your browser."
107+
echo "Package installed inside the container."
80108

81109
# Start Jupyter Notebook
110+
echo "Starting Jupyter in the container. Open http://127.0.0.1:8787/ in your browser."
82111
docker exec -it "$CONTAINER_ID" jupyter notebook --port=8787 \
83112
--no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token='' /root/env/notebooks
84113
return 0
85114
}
86115

116+
function stop {
117+
echo "Stopping the container '$CONTAINER_NAME'..."
118+
docker stop "$CONTAINER_NAME" > /dev/null || echo "Container '$CONTAINER_NAME' is not running."
119+
return 0
120+
}
121+
87122
function shell {
88-
echo "Attaching to the shell of the running container $CONTAINER_NAME..."
123+
echo "Attaching to the shell of the running container '$CONTAINER_NAME'..."
89124
docker exec -it "$CONTAINER_NAME" /bin/bash
90125
return 0
91126
}
92127

93128
function killall {
94-
echo "Stopping all running containers based on the image tag $IMAGE_TAG..."
129+
echo "Stopping all running containers based on the image tag '$IMAGE_TAG'..."
95130
for container_id in $(docker ps -q --filter "ancestor=$IMAGE_TAG"); do
96-
echo "Stopping container ID: $container_id"
131+
echo "Stopping container ID: '$container_id'"
97132
docker kill "$container_id" > /dev/null
98133
done
99134

100-
echo "Removing all containers based on the image tag $IMAGE_TAG..."
135+
echo "Removing all containers based on the image tag '$IMAGE_TAG'..."
101136
for container_id in $(docker ps -aq --filter "ancestor=$IMAGE_TAG"); do
102-
echo "Removing container ID: $container_id"
137+
echo "Removing container ID: '$container_id'"
103138
docker rm "$container_id" > /dev/null
104139
done
105140
return 0
106141
}
107142

108143
function forcecleanall {
109144
echo "WARNING: This will stop and remove all containers and images. This action cannot be undone."
110-
read -p "Are you sure you want to proceed? (Y/N): " confirm
145+
read -rp "Are you sure you want to proceed? (Y/N): " confirm
111146
if [[ "$confirm" != [Yy] ]]; then
112147
echo "Aborting forcecleanall."
113148
return 1
114149
fi
115150

116151
echo "Stopping all running containers..."
117152
for container_id in $(docker container ls -q); do
118-
echo "Stopping container ID: $container_id"
153+
echo "Stopping container ID: '$container_id'"
119154
docker container kill "$container_id"
120155
done
121156

122157
echo "Removing all containers..."
123158
for container_id in $(docker container ls -aq); do
124-
echo "Removing container ID: $container_id"
159+
echo "Removing container ID: '$container_id'"
125160
docker container rm "$container_id"
126161
done
127162

128163
echo "Removing all images..."
129164
for image_id in $(docker images -q); do
130-
echo "Removing image ID: $image_id"
165+
echo "Removing image ID: '$image_id'"
131166
docker image rm --force "$image_id"
132167
done
133168

134169
echo "Docker has been cleaned up."
135170
return 0
136171
}
137172

138-
case $1 in
173+
case "$COMMAND" in
139174
build)
140175
echo "Executing BUILD command..."
141176
build "$@"
@@ -144,6 +179,10 @@ case $1 in
144179
echo "Executing RUN command..."
145180
run "$@"
146181
;;
182+
stop)
183+
echo "Executing STOP command..."
184+
stop "$@"
185+
;;
147186
shell)
148187
echo "Executing SHELL command..."
149188
shell "$@"
@@ -157,8 +196,8 @@ case $1 in
157196
forcecleanall "$@"
158197
;;
159198
*)
160-
echo >&2 "ERROR: Unknown command $1"
161-
printf "$USAGE" >&2
199+
echo >&2 "ERROR: Unknown command '$COMMAND'"
200+
printf "%b" "$USAGE" >&2
162201
exit 2
163202
;;
164203
esac

0 commit comments

Comments
 (0)