code: def create_container_student(self, parent_container_id, environment, network_grading, mem_limit,  student_path,
                                   socket_path, systemfiles_path, course_common_student_path):
          
          student_path = os.path.abspath(student_path)
          socket_path = os.path.abspath(socket_path)
          systemfiles_path = os.path.abspath(systemfiles_path)
          course_common_student_path = os.path.abspath(course_common_student_path)
  
          response = self._docker.containers.create(
              environment,
              stdin_open=True,
              command="_run_student_intern",
              mem_limit=str(mem_limit) + "M",
              memswap_limit=str(mem_limit) + "M",
              mem_swappiness=0,
              oom_kill_disable=True,
              network_mode=('none' if not network_grading else ('container:' + parent_container_id)),
              volumes={
                  student_path: {'bind': '/task/student'},
                   socket_path: {'bind': '/__parent.sock'},
                   systemfiles_path: {'bind': '/task/systemfiles', 'mode': 'ro'},
                   course_common_student_path: {'bind': '/course/common/student', 'mode': 'ro'}
              }
          )
          return response.id
docs: Creates a student container
          :param parent_container_id: id of the "parent" container
          :param environment: env to start (name/id of a docker image)
          :param network_grading: boolean to indicate if the network should be enabled in the container or not (share the parent stack)
          :param mem_limit: in Mo
          :param student_path: path to the task directory that will be mounted in the container
          :param socket_path: path to the socket that will be mounted in the container
          :param systemfiles_path: path to the systemfiles folder containing files that can override partially some defined system files
          :return: the container id