Hacker News new | past | comments | ask | show | jobs | submit login
Introducing Docker for Windows Server 2016 (docker.com)
218 points by samber on Sept 26, 2016 | hide | past | favorite | 60 comments



Post author here: people at Docker and Microsoft have worked on this for years. More to come during the day, also happy to answer any questions here.


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?


If it's really a order of magnitude I'd expect it to be 1 gig.


The `docker pull` payload is 358MB: https://hub.docker.com/r/microsoft/nanoserver/tags/


It's 800MB.


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


Any plans for allowing to dockerize GUI/RDP apps?

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?


You can install the free Windows Server 2016 evaluation version in VirtualBox (which should run fine on Home). Download here: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-...


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).


No, I didn't.

However, it wasn't my intention to come across as snotty - I thought you might just missed the title, which isn't something unheard of :-)

I'm sorry if you felt I had a conceited attitude, that's not how I behave.


Docker for Windows also runs Windows containers now (in the beta channel). But it requires Windows 10 Pro, as do Windows containers.


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.


There's not a lot yet, but you can take a look at the shim used by Docker Engine: https://github.com/Microsoft/hcsshim


Any clear statement possible if all or (which?) parts of docker for Windows will be open source?


This is calling into something named "HNS"; what is that please?


This is the "host networking service", which is a new service that manages VM and container networking on Windows.


Awesome, thanks!


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.


A LOT of bug fixing... but then again, a lot of those issues may be less of an issue wrt having enough for docker/lxc container support.


Can you run IE/Edge inside a container for eg selenium/web driver testing?


GUI apps (and remote desktop use cases) is not supported for Docker Windows containers, at least not yet.


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.



How does it work? Is it a Windows container implementation that got the "Docker" branding?


Could you explain - can windows server run linux images and other way around? What about speed?


> 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.


99% of .net apps don't run on Linux yet.


Bump that up to 99.99% and you'd be right.

There are a lot of big .Net heavy-duty apps that are wedded to Windows.


There are a lot of legacy apps, and third party components that use bits of .Net that aren't in core (or mono), and unlikely to ever be there.


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.

-- edit: s/not/now above.


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.


The public beta version (which has all the latest and greatest) has support for Windows containers too: https://stefanscherer.github.io/run-linux-and-windows-contai...


So if I have a asp.net Mvc app on IIS backed by sql server express and some NT services. I can package them into a container?


Yes, it works great!

I built a sample with MusicStore. It doesn't use ISS (but could), just a self-hosting ASP.NET Core MVC app: https://github.com/friism/Musicstore/

You might find the SQL Server Dockerfile interesting (hopefully it'll be an image on Hub soon): https://github.com/friism/MusicStore/blob/master/docker/mssq...

Here's now to run it:

    docker build -t sqlserver:2016 -f .\docker\mssql-server-2016-express\Dockerfile .\docker\mssql-server-2016-express\.
    docker-compose -f .\src\MusicStore\docker-compose.yml up
Open a browser and open http://<ip-of-vm-running-docker>:5000/

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].

1: https://aws.amazon.com/blogs/aws/windows-server-2012-now-ava...

2: https://en.wikipedia.org/wiki/Windows_Server_2012


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.


If you have details on the problems you've had, feel free to drop me a line at michael.friis@docker.com


Is full sql server containerizable? If so, how would it work?


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 :-)


Yeah, I'd heard that was possible. Is it because the SQL server team abstracted their system calls?


They did more than abstract their own system calls, Microsoft SQL Server essentially runs it's own OS, aptly named SQLOS.


That's not true, SQLOS is not a wrapper for system calls or another OS running on-top of a host platform. It's more of a resource/synchronicity/management layer: http://blog.sqlauthority.com/2015/11/11/sql-server-what-is-s...


It would be great when we can run Exchange and other internal tools we have as containers.


Any Docker for running IE8 on Windows-2012 and later?


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.


You can, with e.g. ThinApp, but with some issues. That was the reason of my question: if Docker could increase compatibility in that regard.


Right now we're focused on server workloads only.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: