Heroku is a PaaS, which means that you don't have to worry about the details of the server configuration where you are deploying your code, you only focus on your code; Heroku will do the difficult job with the infrastructure configuration.
Instead of using a shell to install, configure, and tune up your packages in order to run in production mode, you only have to edit a configuration file and publish your changes with the standard git push
command.
Heroku uses lightweight Linux containers that run a single command in order to run your projects in the Heroku platform. Heroku calls these containers Dynos. A Dyno can host your code and run it as a single process in an isolated Linux environment.
If you don't have an experience in Linux containers such as Docker, you can imagine a container to be like a small virtual machine without hardware emulation; a Linux container uses the same kernel as the host machine, it means that you don't need to emulate hardware: