22
33set -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"
1314USAGE+=" build - Builds an image from a Dockerfile.\n"
1415USAGE+=" run - Runs a container and starts Jupyter.\n"
16+ USAGE+=" stop - Stops a running container.\n"
1517USAGE+=" shell - Attaches to the shell of a running container.\n"
1618USAGE+=" killall - Stops and removes all containers based on the image tag.\n"
1719USAGE+=" 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
2124if [[ $# -lt 1 ]]; then
2225 echo >&2 " ERROR: Must specify the command"
23- printf " $USAGE " >&2
26+ printf " %b " " $USAGE " >&2
2427 exit 2
2528fi
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
2858if [[ " $( uname) " == " Darwin" ]]; then
2959 MODHACK=" -v /lib/modules:/lib/modules:ro"
3262fi
3363
3464function 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+
87122function 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
93128function 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
108143function 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 ;;
164203esac
0 commit comments