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