diff --git a/utils/dockerized/linux/msspec b/utils/dockerized/linux/msspec
new file mode 100644
index 0000000..e0bc225
--- /dev/null
+++ b/utils/dockerized/linux/msspec
@@ -0,0 +1,165 @@
+#!/usr/bin/env bash
+#
+# Copyright © 2016-2021 - Rennes Physics Institute
+#
+# This file is part of msspec.
+#
+# msspec is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# msspec is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License
+# along with this msspec. If not, see .
+#
+# Source file : utils/dockerized/linux/msspec
+# Last modified: Tue, 21 Sep 2021 17:52:10 +0200
+# Committed by : sylvain tricot
+
+THIS_SCRIPT="$0"
+IMAGE_NAME="iprcnrs/msspec:latest"
+
+Logln () {
+ echo "$1" >&2
+}
+
+Log () {
+ echo -n "$1" >&2
+}
+
+Read_YesNo () {
+ PROMPT="$1"
+ DEFAULT="$2"
+
+ ANSWER=""
+ RESPONSE=""
+
+ VALID=1
+ while test $VALID -ne 0; do
+ read -p "${PROMPT} (y/n) [${DEFAULT}]? " "RESPONSE"
+ ANSWER="${RESPONSE:-${DEFAULT}}"
+ case "${ANSWER}" in
+ y|n) VALID=0 ;;
+ *) echo "Invalid choice, please answer \"y\" or \"n\"."; VALID=1 ;;
+ esac
+ done
+}
+
+Get_MsSpecContainerID () {
+ CID=$(docker ps -a -q --filter ancestor=$IMAGE_NAME)
+ echo $CID
+}
+
+Get_MsSpecImageID () {
+ IID=$(docker images -q $IMAGE_NAME)
+ echo $IID
+}
+
+Add_MsSpecImage () {
+ docker pull $IMAGE_NAME 1>&2
+}
+
+Add_MsSpecContainer () {
+ CID=$(Get_MsSpecContainerID)
+ if [ -z "$CID" ]; then
+ IID=$(Get_MsSpecImageID)
+ if [ -z "$IID" ]; then
+ Logln "Pulling MsSpec image..."
+ Add_MsSpecImage
+ fi
+ Log "Creating the MsSpec container... "
+ USERNAME=$(whoami)
+ USERID=$(id -u $USERNAME)
+ GROUPID=$(id -g $USERNAME)
+ CID=$(docker create -i --net=host -e DISPLAY=$DISPLAY -v $HOME:$HOME -u ${USERID}:${GROUPID} --entrypoint /bin/bash $IMAGE_NAME)
+ Logln "done."
+ fi
+ echo $CID
+}
+
+Start_MsSpecContainer () {
+ CID=$(Add_MsSpecContainer)
+ status=$(docker container inspect -f '{{.State.Status}}' $CID)
+ if [ $status != "running" ]; then
+ Log "Starting MsSpec container... "
+ # Start the container
+ CID=$(docker start $CID)
+ Logln "done."
+ fi
+}
+
+Remove_MsSpecContainer () {
+ Log "Removing MsSpec container... "
+ CID=$(Get_MsSpecContainerID)
+ docker stop -t 1 $CID >/dev/null 2>&1
+ docker rm $CID >/dev/null 2>&1
+ Logln "done."
+}
+
+Run_MsSpec () {
+ # Run msspec command
+ CID=$(Get_MsSpecContainerID)
+ xhost +localhost >/dev/null 2>&1
+ docker exec -i -t -w "$PWD" $CID msspec "$@"
+}
+
+Run_Bash () {
+ # Run msspec command
+ CID=$(Get_MsSpecContainerID)
+ xhost +localhost >/dev/null 2>&1
+ docker exec -i -t -w "$PWD" -e HOME=$HOME -e PS1="MsSpec:\w> " $CID /bin/bash --norc --noprofile
+}
+
+Uninstall_MsSpecImage () {
+ Read_YesNo "You are about to remove the MsSpec Docker image, its container and this script. Are you sure" "n"
+ case $ANSWER in
+ y) Remove_MsSpecContainer;
+ Log "Removing ${IMAGE_NAME}...";
+ docker rmi $IMAGE_NAME >/dev/null 2>&1;
+ Logln "done.";
+ Log "Removing ${THIS_SCRIPT}...";
+ rm -f $THIS_SCRIPT;
+ Logln "done.";
+ ;;
+ n) echo "Uninstallation aborted."
+ esac
+}
+
+Show_Help () {
+ echo "Usage: 1) msspec -p [PYTHON OPTIONS] SCRIPT [ARGUMENTS...]"
+ echo " 2) msspec [-l FILE | -i | -h]"
+ echo " 3) msspec [bash | reset | uninstall]"
+ echo ""
+ echo "Form (1) is used to launch a script"
+ echo "Form (2) is used to load a hdf5 data file"
+ echo "Form (3) is used to control the Docker container/image."
+ echo ""
+ echo "List of possible options:"
+ echo " -p Pass every arguments after this option to the msspec"
+ echo " virtual environment Python interpreter."
+ echo " -i Run the interactive Python interpreter within msspec"
+ echo " virtual environment."
+ echo " -l Load and display a *.hdf5 data file in a graphical"
+ echo " window."
+ echo " -v Print the version."
+ echo " -h Show this help message."
+ echo ""
+ echo " bash This command starts an interactive bash shell in the"
+ echo " MsSpec container."
+ echo " reset This command removes the MsSpec container (but not the"
+ echo " image). Changes made in the container will be lost and"
+ echo " any new call to msspec will recreate a new fresh container."
+ echo " uninstall This command will completely remove the MsSpec container,"
+ echo " the image and this script."
+}
+
+case $1 in
+ reset) Remove_MsSpecContainer ;;
+ uninstall) Uninstall_MsSpecImage ;;
+ bash) Start_MsSpecContainer; Run_Bash ;;
+ "-h"|"") Start_MsSpecContainer; Show_Help ;;
+ *) Start_MsSpecContainer; Run_MsSpec "$@" ;;
+esac