CourseStack Blog

How to Give Your Students Hands-On VMs

Written by Chris Myers | Apr 25, 2025 5:06:17 PM

Why Hands-On VMs Matter

Courses, workshops, and other educational content have a simple goal; help the student learn and retain new skills. For technical skills in industries like cybersecurity, information technology, software engineering, and data science this can be especially challenging! 

In these fields, traditional methods of teaching often fall short. Purely relying on slides, blog posts, or even video content just isn't effective enough for many students to truly understand and retain the knowledge they came for. In technology, a certain amount of hands-on practice and muscle memory really helps to drive home the more difficult concepts. 

This is where using VMs in your course comes in! By providing students their own realistic, hands-on learning environment you can significantly improve their learning outcomes. 

What Makes a Great Student VM Experience

A critical part of making sure learning with hands-on virtual machines is beneficial, rather than a distraction, is ensuring a fantastic student VM experience. We've found this come downs to three core requirements:

  1. Speed and Reliability - Students should spend their time practicing the technical skills you're teaching, not setting up their environment or getting frustrated by flaky virtual machine connections. 
  2. Isolation and Security - Every student deserves their own learning environment. While shared VM setups might seem attractive from a cost perspective, they can lead to students disrupting each others learning. 
  3. Affordability - This can be the trickiest part of giving your students hands-on VMs, but also the most important. Controlling the cost of your learning environments is critical to ensuring students can afford to participate (and/or you can afford to foot the bill). 

On CourseStack, these core requirements come for free with every VM you build - and it's incredibly easy! 

Let's dive into actually creating hands-on VM content in CourseStack. 

Building Virtual Machines in CourseStack

We've made building VM's as simple as possible in CourseStack so you can focus on creating amazing course content, not fighting with your tech stack. Part of simplifying VM creation meant consolidating some of the terminology and concepts of the platform we build on, AWS, to reduce complexity. 

First, let's go over the core concepts and terminology of the CourseStack platform to set the stage. 

Systems - We refer to VMs in CourseStack as "Systems". This is a more generic term and gives us flexibility in the future to lump in other similar content types to this category, regardless of the actual technology they run on. 

Images - Your saved versions of Systems that can be added to courses are called "Images". Underneath the hood these are in fact AWS AMI's.

Credits - All of our hands-on content types, including Systems, use a credit system to track usage. This allows us to provide out creators with a single, transparent usage metric so you always know what your potential costs are when including Systems and other hands-on content in your courses. 

Now that the basic concepts are covered, lets launch right into creating some VM content!

If you want to follow along - sign in or sign up at https://app.coursestack.com

You can also skip the building and check out the student experience for CourseStack systems by enrolling in our Academy course, "Student VMs with CourseStack" here: https://academy.coursestack.com/

Launch your first system by navigating to the Images tab, and selecting any of the CourseStack provided base images. These are default, clean operating systems without any modifications. We currently have flavors of the following OS's to choose from:

  • Amazon Linux
  • Debian
  • Kali Linux
  • Suse
  • Ubuntu
  • Windows Server

You can also import your own images from AWS, which we'll cover later!

When selecting your specific operating system to launch, there are a number of other settings you'll need to set. Give your system a System Name, choose the System Size based on the performance you'll require for your specific scenario, and set how much storage you'll need with the Disk Size setting. 

Launch your system, then head on over to the Systems page. You'll see your system most likely in the Starting state. Once it's running and able to be connected to, you can select "Connect" for direct browser access to your System! Since we just launched an AWS Linux OS. by default we'll connect via SSH. 

You can configure connection details in the system settings (available in the dropdown menu). We currently support connections via SSH, RDP, or VNC. 

 

Once you've connected to your system, the world is your oyster! Run commands, upload files, install software, and set the system up exactly how you want your students to access it. 

After configuring your system for student use, the last step before adding it to a course is to create Image. Select "Create Image" from the system drop down menu, and give your new image a name!

Not everyone prefers to build directly within CourseStack, and that's OK! If you like building outside the platform, or already have existing build processes. you can import an image you've already built from an AWS Account you control. On the Images page, select "Import an Image" an provide the requested details. 

Once you've created your image (or imported it), your image will show as pending in your My Images table. Once it's ready, we can add it to a course! This process can sometimes take a few minutes (up to 15-20), so be patient as your system image gets ready. 

Once the image is ready, we can add it to a course for students to access!

Adding VMs to CourseStack Courses

To add VMs to a Course... first we'll need a course to work with! Create a new course, or Edit one of your existing courses. 

If you've made a new course, it will have a single chapter and lesson. Selecting "Add Content" will present a modal of all our supported content types. Select "System".

Before we can actually add select a system to display inline with the rest of our content to students, we'll need to add our recently created custom image as a course system. 

In the lefthand side panel, select Systems and "Add System". 

Choose the custom image you configured earlier, and set the System name, performance, and other settings. 

"Create" that system, and then select it from your available options in the System content you added prior. This will now display a system card top any students enrolled in the course. 

 

To see what this will look like for your students, be sure to save your lesson then "Preview" the content. You'll notice we display the the Credits per hour this system consumes. That will be important to note when you publish your course and are deciding how many credits to include for your students. It also helps you stay aware of how many credits you're using as the creator while building and testing the system. 

Select "Launch" to deploy your preview system and access it from the student perspective. 

 

Once your system is launched, you'll notice it now has a "Running" state and a specific IP address! You can view power settings to stop or reset the system. 

Finally, "Connect" to the system to get dropped into your browser based SSH session!

Wrapping Up

If you've followed along with the simple steps above, you've now got a browser accessible, customized virtual machine ready to deploy to thousands of students :) 

We work very hard to make this process as fast, simple, and painless as possible! If you have specific feedback, drop us a note at contact@coursestack.com with your thoughts. 

Don't forget to check out the companion course here!

Student VMs with CourseStack