is a running container created by each RUN command during multistage build?
Yes your understanding is correct. The RUN &lt;commands&gt; command in the Dockerfile is somewhat equivalent to
container = $(docker run base-image) #1
docker exec base-image commands #2 
docker commit $container #3

Since images are static, we'll need a running instance/process to execute our command. this is why a container is created from the base image. #1
After the execution of the command in #2, the changes are committed back #3, which means a new layer is created on top of the previous layers. This layer will contain the changes introduced by the container in (#2).