Well, I've never heard of "operating system" as just the middleware above the kernel. I don't think that's a standard usage. See for example https://en.wikipedia.org/wiki/Operating_system An operating system is managing the hardware, scheduling CPU time for processes, managing memory.
Some statements in this article are just wrong, I think. An image or container does NOT contain a complete OS. A VM does contain a complete OS.
These are wrong:
"images package not just your software but all supporting dependencies needed to run your software, up to and including a complete operating system."
"... what's important to understand is that the images you create will contain a complete operating system."
"... images are immutable and include all of the dependencies needed to run your software from the OS on up ..."
"... the container is running the same operating system every time ..."
These statements are correct:
"... images are packaged as if they're a complete operating system from the perspective of the software you wish to run ..."
"Virtual machines must contain a complete operating system ..."
The incorrect statements are a fundamental misunderstanding of the difference between containers and VMs. Container images are packaged with libraries that map from container-standard API (e.g. Ubuntu 18.04) to actual host OS's API (a moving target). A container image is NOT packaged with many of the things that constitute an OS: scheduler, memory manager, device drivers, filesystem modules, more. In contrast, a VM image DOES contain a whole OS, and makes that OS think it's running on bare metal.