That's very exciting news. I still find somewhat confusing to execute "RUN" instructions, as they're much cleaner in Linux, but I need to dig the documentation. However there is a line that caught my attention:
> This flexibility comes at the cost of some bulk: The `microsoft/windowsservercore` image takes up 10GB.
Hope next versions shrink the image size.
> And the Nano Server base image is an order of magnitude smaller than Windows Server Core, meaning it has less dependencies and surface area to keep updated.
I wonder how smaller it is. Do you have any estimate here?
What's the storage backend being used on Windows? With even an 800MiB base, let alone 10GiB, I'm curious what happens when creating 100 containers from that base? On Linux, whether the backend is device mapper (thin), overlayfs, or Btrfs, the snapshots are fast and the cost is only the change from the base.
Docker running on Windows comes with the same layering and CoW semantics as on Windows. If you're curious about the details, John Starks' session at DockerCon is really great: https://www.youtube.com/watch?v=85nCF5S8Qok
I was excited about the possibilities, until I came to this:
> The Windows Server Core image comes with a mostly complete userland with the processes and DLLs found on a standard Windows Server Core install. With the exception of GUI apps and apps requiring Windows Remote Desktop, most apps that run on Windows Server can be dockerized to run in an image based on microsoft/windowsservercore with minimal effort.
RDP actually worked in early tech previews, and I think Microsoft is trying to use some of this for browser-process isolation in Microsoft Edge, so maybe some day :-)
Will this work on Windows Home editions (that ship on almost every laptop you buy at MicroCenter / Best Buy / etc) or will it require Pro versions because it has some underlying dependency on Hyper-V?
On Windows 10 you need hyper-v to run windows container. So only pro and enterprise.
On Windows Server 2016, you can choose between hyper-v container or "native" container, but this is only possible thanks to a new architecture that is not present in W10 (hence why you need Hyper-V).
I guess the "for Windows Server 2016" part answers the question :) however you might be asking about Docker for Windows, which seems to be a different thing?
Did you even read the article before you posted your snotty retort?
> The kernel containerization features are available in all versions of Windows Server 2016, and are also on --> Windows 10 systems with the Anniversary Update <--, and the Windows-native Docker daemon runs on both Windows Server 2016 and --> Windows 10 <-- (although only containers based on Windows Server build and run on Windows 10).
Is the code for launching Windows containers open source yet? I'm not familiar with the Docker codebase, but a quick search didn't turn up anything except configuration-related stuff. I'm especially interested in how Hyper-V isolation and layering is implemented.
My hope is they at least get LSW (Linux Subsystem for Windows) at least to the point where Linux containers can build/run in windows. When I tried it a couple months ago, I was very disappointed in the weirdness with filesystem access from the GUI.
It should be good enough for docker usage, and am excited about that option.
There seem to be no current plans to ship LSW on Windows Server though, so it does not seem to be going to happen soon. Also LSW has a lot of bug fixing before it is ready for that.
Is there any plan to have docker for windows containers and docker for windows use a different socket? At the moment, both trample on each other, and there are times when I'd like to use them together.
> To build and run a Windows container, a Windows system is required. While the Docker tools, control APIs and image formats are the same on Windows and Linux, a Docker Windows container won’t run on a Linux system and vice-versa.
No, this is for running containers using the Windows kernel.
Although with the Windows Subsystem for Linux (WSL), I wonder how long until Windows Server supports running Linux containers.
I just wonder about the utility of all this. Most people should be trying to target .NET Standard/.NET Core and simply run their apps on Linux, meaning they can use regular Linux distributions with Docker installed. Who is Microsoft expecting to actually use Docker on Windows?
EDIT: I'll answer my own question and say that this is probably targeted toward shops that rely on a Microsoft stack (e.g., full .NET Framework, SQL Server, etc.) Running Docker on Windows and getting fully-configured environments should be a big boon to productivity for these folks.
Using Docker you can already run Linux containers on Windows, using native virtualization in Hyper-V. You are correct however this announcement is specifically about windows containers.
> While the Docker tools, control APIs and image formats are the same on Windows and Linux, a Docker Windows container won’t run on a Linux system and vice-versa.
I currently have a Django-based intranet site (Windows Server 2012 w/ MSSQL DB) and will also have a web-app with the same set-up - both will be for company-use only, so at most ~500 users for the intranet and significantly less for the web app.
As a single dev doing smaller scale projects, is there any reason for me to want to move to this sort of setup? I obviously keep my project version controlled on Bitbucket and we run our usual backups on the servers and DBs, but is there something that Docker would bring that I'm just not getting? Or is this better suited for larger scale, super-fast iteration type projects?
It helps with TDD, automation and Scaling.. it also keeps your dependencies separately... you can upgrade your platform for one app, without having to upgrade for all apps.
Server utilization for one-off apps is a lot better too as you can use a single windows server and have multiple containers... also checkout Application Request Routing extension for IIS, which is helpful for this kind of setup, it acts as a reverse-proxy option for IIS.
What will probably come next will be more automation tooling... It should now be possible to crate something like dokku, but using windows containers and powershell.
Is it the case that 'Docker for Windows Server 2016' can only run Windows containers and 'Docker for Windows' can only run Linux containers? If so, is there any plan for a solution that can run both side by side?
The reason I ask is because it would be useful, especially on dev machines, to be able to run existing full .NET apps in containers alongside linux containers with Postgres, Redis, etc.
IIS runs in both nanoserver and windowsservercore-based containers. Here's and IIS sample image (I suspect Microsoft will be updating it soon): https://hub.docker.com/r/microsoft/iis/
This is pretty interesting stuff, but a 10GB base image? Granted its a base and you don't have to push it often, but in my experience pull times to container hosts end up being a big part of overall deployment cycle time, and pulling 10GB to a new host during a scaling event sounds not so fun. In our container development we'll rely on alpine where possible because it brings image sizes down from, say 100-200MB with ubuntu to 10-20MB.
Since all your containers will be based on `windowsservercore` (and perhaps some on the much smaller `nanoserver` base image), you could choose to bake the image into your container host image.
This is exciting news for all .NET folks. We're running our Platform in .NET on AWS, so we'll need to wait for AWS to support Windows Server 2016 before we can leverage Docker.
For Windows Server 2012, AWS supported it [1] a little under 2.5 months after release [2].
I hope it works. I have had nothing but issues with the release version of Docker, it keeps dropping and messing with the network connection on the machine requiring restarts.
Last year a lot of people warned me that the technology was pretty unreliable and using this year for development work I tend to agree, its still bleeding edge.
Express works fine listening on TCP. While I haven't tried I don't see any reason it wouldn't work. And I've see the full SQL Server running in a Linux Docker container :-)
It seems they don't include the GUI parts, also, you can't run IE8 on windows later than Vista (iirc), it's fully deprecated at this point, and you're probably best off ignoring it.