Windows 10 i Windows 2019 – Linux LCOW Containers coexist with Windows Containers – Azure App Service Container Support

Konteneryzacja w systemach Windows Server po raz pierwszy była pokazywana na konferencji Microsoft Build w 2016 roku – co ciekawie wtedy do takiego kontenera (windowsowego) można było połączyć się po RDP i wszystkie operacje wykonywać nie za pomocą polecenia docker, a za pomocą PowerShell! Jeszcze w tym samym roku mogliśmy sami dotykać kontenerów w Windows 10, co pokazywałem w ramach relacji z Ignite 2016 – polecam Channel9.

Jak dzisiaj wygląda świat kontenerów w Windows 10 i Windows Server 2019. Zakładam, że mamy w miarę nową wersje systemu Windows (poniższe wykonywane na wersji Windows 10 1809) musimy zainstalować docker’a – najlepiej z oficjalnej strony. Docker instaluje się jako serwis i przy zegarku możemy zobaczyć jego status, gdzie po raz pierwszy zobaczymy informacje (zakładam, iż nie mamy wymienionych komponentów zainstalowanych):

Po wciśnięciu OK zainstalują się komponenty kontenerów oraz Hyper-V. Możemy wydać kilka komend aby uruchomić kontener i tak np.:

docker run -it busybox         #uruchomienie obrazu mini dystrybucji linuxa w trybie interaktywnym

ls

exit

dosker ps -a             #wyświetlenie wszystkich kontenerów także zatrzymanych

docker start id_kontenera     #uruchomienie kontenera

docker ps             #wyświetlenie uruchomionych kontenerów

Jak to możliwe, że linuxa uruchamiamy z pod Windows – a po prostu działa poniższy mechanizm:

Czyli pod spodem działa nam maszyna wirtualna MobyLinux, którą zresztą możemy podejrzeć w Hyper-V:

Jeżeli teraz chcemy uruchomić kontener Windows i wykonamy komendę:

docker run -it -d –name nano microsoft/nanoserver:1709

otrzymamy błąd:

docker: image operating system “windows” cannot be used on this platform.

No właśnie, do tej pory nie mogliśmy jednocześnie uruchamiać kontenerów Windows’owych razem z Linux’owymi, a musieliśmy się między nimi przełączać – prawy przycisk na wielorybie i wybieramy Switch to Windows containers…

Kontenery Windows mogą w systemach serwerowych działać w trybie natywnym lub w trybie Izolacji Hyper-V. W Windows 10 tylko i wyłącznie w trybie izolacji Hyper-V. W tym momencie możemy już uruchomić np. IIS w kontenerze Nano Serwer, poleceniem:

docker run -it -d –name nano microsoft/nanoserver:1709

Od wersji Docker for Windows 17.11 z Windows 10 1809, możemy również w trybie izolacji Hyper-V, uruchamiać kontenery Linuxow’owe wraz z kontenerami Windowsowymi, które to działają jednocześnie. Aby to zrobić należy włączyć tryb eksperymentalny w Docker’ze:

Od tego momentu możemy uruchamiać i kontenery Linux’owe i Windows’owe:

docker run -it -d –name nano2 microsoft/nanoserver:1709

docker run -d –name httpd2 -p 8080:80 httpd

Jak to działa:

Kontenery LCOW, działają w ramach minimalnej dystrybucji linux’a – LinuxKit (ciągle w trybie rozwoju).

Wkrótce przedstawię kilka zastosowań praktycznych kontenerów, obecnie warto zapoznać się z moim artykułem Jak rozpoznać i debugować aplikacje działającą w Windows Container.

Jeżeli chodzi o Microsoft Azure, to kontenery Linux’owe mogą zostać uruchomione na kilka rodzajów, na Ignite 2018 pobawiłem się w trybie nadzorowanym kontenerami Windowsowymi w ramach Web App (obecnie public preview), jak niżej:

Jeżeli chodzi o AWS – to tutaj mamy obecnie troszkę większe możliwości:


The first time that the containerization for the Windows Server systems was shown at the Microsoft Build Conference in 2016 year. What was interesting – it was possible to connect to container via RDP connection and all operations was performed not by a docker command, but using PowerShell! In the same year, we were able to touch the containers in Windows 10, which I showed in the context of the relation from Ignite and we can still watch in at the Channel9.

How today the world of containers looks like in Windows 10 and Windows Server 2019. We need to install a docker (https://www.docker.com/products/docker-desktop). I am using Windows 10 1809 for this screenshots. Docker installs as a service and we can see its status on behind the clock. For the first time we see this screen:

After pressing OK, container components and Hyper-V will be installed. We can issue a few commands to start the container, for an example:

docker run -it busybox         #launching the linux mini distribution image in interactive mode

ls

exit

dosker ps -a                            # displaying all containers (also stopped)

docker start icontainer_id  #start container

docker ps                                 # display of started containers

How is it possible that we run linux under Windows – see this:

So underneath we have a MobyLinux virtual machine, which can be seen in Hyper-V:

If you now want to start Windows container and execute the command:

docker run -it -d –name nano microsoft/nanoserver:1709

we receive:

docker: image operating system “windows” cannot be used on this platform.

Until today we have not been able to run Windows containers together with Linux at the same time, and we had to switch between them – the right button on the whale and choose Switch to Windows containers…

Windows containers can run on server systems in native mode or in Hyper-V isolation mode. On Windows 10, only in Hyper-V isolation mode. Let’s try to run Windows IIS container:

docker run -it -d –name nano microsoft/nanoserver:1709

Since Docker for Windows 17.11 with Windows 10 1809, we can also run Linux containers with Windows containers that work simultaneously in Hyper-V isolation mode. To do this, enable the experimental mode:

From that moment, we can run Linux and Windows containers:

docker run -it -d –name nano2 microsoft/nanoserver:1709

docker run -d –name httpd2 -p 8080:80 httpd

How is it works:

LCOW containers operate as part of the minimal linux distribution – LinuxKit (under development).

I will soon introduce some practical applications of containers, so stay tuned.

In Microsoft Azure Linux containers can be run on several ways, on Ignite 2018 I played in supervised mode with Windows containers as part of the Web App (currently public preview), as below:

According to the AWS – here we have a bit more possibilities:

Literatura / Literature:

https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers

https://forums.docker.com/t/linux-container-in-w2k16/26321/3

https://azure.microsoft.com/pl-pl/blog/announcing-the-public-preview-of-windows-container-support-in-azure-app-service/

https://rzetelnekursy.pl/jak-rozpoznac-i-debugowac-aplikacje-dzialajaca-w-windows-container-how-to-recognize-and-debug-applications-running-in-windows-container/

https://github.com/linuxkit/linuxkit