Talking about Docker, it is an abstraction that helps us create self-sufficient (and isolated) containers for running an application. The intent is to isolate the dependencies of an application and provide it as a container so that it is portable and reproduce-able across deployments. For example, Docker solves issues like “It works on dev machines but fails on test/staging environment because the environment was created say 1 year back and fails due to library version mismatch”. Ideally, as part of the CI/CD pipeline, we build the container, run a set of tests against it and archive it in a registry. Deployment is now simplified to retrieve the image from the registry and running it. This means, we are deploying the entire ecosystem that the application depends on as a whole rather than just the application artifacts like JAR or binary etc.. Docker, as such is not restricted to any platform like .Net / Java etc.
On the other hand Orleans, unlike Docker, is a distributed programming model for .NET. The intent behind this project is to come up with a .NET based framework that makes it easy for us to build distributed scalable services. A better way to think of it like having a distributed JVM / CLR runtime sort of thing, where we write trivial object-oriented programs (with some nuances though), but they magically become scalable and run across the cluster in a distributed fashion. I’m not sure about the status of Docker in the Windows ecosystem, but my guess is that you could deploy Orleans applications using Docker. If you want to learn Docker in a much better way then you must have a look at the following Docker training course. You can also watch the following Docker video tutorial to know such kind of things.