Windows docker container on linux

TL;DR:

Q: Can Windows containers run on Linux?

A: No. They cannot.

Containers are using the underlying operating system resources and drivers, so Windows containers can run on Windows only, and Linux containers can run on Linux only.

Q: But what about Docker for Windows? Or other VM-based solutions?

A: Docker for Windows allows you to simulate running Linux containers on Windows, but under the hood a Linux VM is created, so still Linux containers are running on Linux, and Windows containers are running on Windows.

Bonus: Read this very nice article about running Linux docker containers on Windows.

Q: So, what should I do with a .NET Framework 462 application, if I would like to run in a container?

A: It depends. Consider the following recommendations:

  • If it is possible, move to .NET Core. Since .NET Core brings support to most major features of .NET Framework, and .NET Framework 4.8 will be the last version of .NET framework

  • If you cannot migrate to .NET Core — As @Sebastian mentioned — you can convert your libraries to .NET Standard, and have two versions of the application — one on .NET Framework 4.6.2, and one on .NET Core — it is not always obvious. Visual Studio supports it pretty well (with multi-targeting), but some dependencies can require extra care.

  • (Less recommended) In some cases, you can run Windows containers. Windows containers are becoming more and more mature, with better support in platforms like Kubernetes. But to be able to run .NET Framework code, you still need to run on base image of «Server Core», which occupies about 1.4 GB. In same rare cases, you can migrate your code to .NET Core, but still run on Windows Nano server, with an image size of 95 MB.

Leaving also the old updates for history

Update 2: 08.2018

If you are using Docker-for-Windows, you can run now both Windows and Linux containers simultaneously: Running Docker Windows and Linux Containers Simultaneously

Bonus: Not directly related to the question, but you can now run not only the Linux container itself, but also an orchestrator like Kubernetes: Kubernetes is Now Available In Docker Desktop Stable Channel

Updated at 2018:

Original answer in general is right, BUT several months ago, Docker added experimental feature LCOW (official GitHub repository).

From this post:

Doesn’t Docker for Windows already run Linux containers? That’s right.
Docker for Windows can run Linux or Windows containers, with support
for Linux containers via a Hyper-V Moby Linux VM (as of Docker for
Windows 17.10 this VM is based on LinuxKit).

The setup for running Linux containers with LCOW is a lot simpler than
the previous architecture
where a Hyper-V Linux VM runs a Linux Docker
daemon, along with all your containers. With LCOW, the Docker daemon
runs as a Windows process (same as when running Docker Windows
containers), and every time you start a Linux container Docker
launches a minimal Hyper-V hypervisor running a VM with a Linux
kernel, runc and the container processes running on top.

Because there’s only one Docker daemon, and because that daemon now
runs on Windows, it will soon be possible to run Windows and Linux
Docker containers side-by-side, in the same networking namespace
. This
will unlock a lot of exciting development and production scenarios for
Docker users on Windows.

Original:

As mentioned in comments by @PanagiotisKanavos, containers are not for virtualization, and they are using the resources of the host machine. As a result, for now a Windows container cannot run «as-is» on a Linux machine.

But — you can do it by using VM — as it works on Windows. You can install a Windows VM on your Linux host, which will allow to run Windows containers.

With it, IMHO running it this way in a production environment will not be the best idea.

Also, this answer provides more details.

Running a Windows Docker container on a Linux host can be a challenging task, as the two operating systems have different architectures and require different configurations. However, it is possible to run a Windows container on a Linux host using a few different methods. These methods include using virtualization software, using the Windows Subsystem for Linux (WSL), and using a tool like Docker Machine.

Method 1: Virtualization Software

To run a Windows Docker container on a Linux host, you can use virtualization software like VirtualBox or VMware. Here are the steps to follow:

  1. Install virtualization software on your Linux host. In this example, we will use VirtualBox.

  2. Download the Windows Docker image from the Docker Hub registry:

    docker pull mcr.microsoft.com/windows/servercore:ltsc2019
  3. Create a new virtual machine in VirtualBox with the following settings:

    • Name: Windows Container
    • Type: Microsoft Windows
    • Version: Windows Server 2019 (64-bit)
    • Memory: 4 GB
    • Hard disk: Create a new virtual hard disk with at least 30 GB of space
  4. Start the virtual machine and install Docker Desktop for Windows.

  5. Open a PowerShell console in the virtual machine and run the following command to switch Docker to use Windows containers:

    & $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon
  6. Pull the Windows Docker image again to make sure it’s available for the Windows Docker daemon:

    docker pull mcr.microsoft.com/windows/servercore:ltsc2019
  7. Run the Windows Docker container:

    docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd

    This will start a command prompt inside the Windows Docker container.

That’s it! You can now use a Windows Docker container on your Linux host using virtualization software.

Method 2: Windows Subsystem for Linux (WSL)

To run a Windows Docker container on a Linux host using Windows Subsystem for Linux (WSL), follow these steps:

  1. Install Docker on your Linux host and make sure it is running properly.
  2. Install WSL on your Windows machine and make sure it is running properly.
  3. Open a WSL terminal and run the following command to download the Windows Docker image:
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
  1. Run the following command to start the container:
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
  1. You should now be inside the container’s command prompt. To exit the container, simply type «exit».

That’s it! You have successfully run a Windows Docker container on a Linux host using Windows Subsystem for Linux (WSL).

Note: You may need to enable virtualization in your BIOS settings for this to work properly.

Code Examples:

docker pull mcr.microsoft.com/windows/servercore:ltsc2019
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe

Method 3: Docker Machine

To run a Windows Docker container on a Linux host using Docker Machine, you can follow these steps:

  1. Install Docker Machine on your Linux host machine.

  2. Create a new Docker Machine with the «virtualbox» driver. This will create a virtual machine that will act as the host for the Windows Docker container.

docker-machine create --driver virtualbox windows
  1. Set the environment variables for the new Docker Machine.
eval $(docker-machine env windows)
  1. Pull the Windows Docker image from the Docker Hub.
docker pull mcr.microsoft.com/windows/servercore:ltsc2019
  1. Run the Windows Docker container on the new Docker Machine.
docker run -it mcr.microsoft.com/windows/servercore:ltsc2019 cmd
  1. You can now interact with the Windows container as if it were running on a Windows host.

Note: Make sure that your Linux host machine has enough resources to run the virtual machine and the Windows Docker container.

That’s it! With Docker Machine, you can easily run a Windows Docker container on a Linux host machine.

Docker Windows Container — это инструмент, позволяющий запускать приложения Windows в среде Linux. Такие контейнеры предоставляют удобный и эффективный способ развертывания и управления приложениями и сервисами Windows, необходимыми для работы вашей организации.

Установка Docker Windows Container на Linux позволяет использовать мощные возможности Docker для работы с контейнерами Windows на вашем Linux-сервере. Вам не придется инсталлировать отдельную ОС Windows на физическом или виртуальном хосте, а вы сможете эффективно управлять контейнерами Windows с помощью уже знакомых Docker команд и инструментов.

Для установки Docker Windows Container на Linux нужно выполнить несколько шагов. Однако, перед этим необходимо убедиться, что ваша система соответствует требованиям, указанным разработчиками Docker. Также вам потребуется настроить некоторые параметры, чтобы обеспечить совместимость Windows-контейнеров с вашим Linux-хостом. После успешной установки вам будет доступно множество возможностей для работы с контейнерами Windows и их управления.

Содержание

  1. Что такое Docker
  2. Почему Docker Windows Container
  3. Преимущества Docker Windows Container
  4. Как установить Docker Windows Container
  5. Требования для установки
  6. Установка Docker на Linux

Что такое Docker

Основным компонентом Docker является Docker Engine, который позволяет создавать, запускать и управлять контейнерами. Docker Engine использует принцип виртуализации на уровне операционной системы, позволяя контейнерам совместно использовать ядро хоста и физические ресурсы. Это позволяет достичь высокой эффективности и скорости работы контейнеров, а также упрощает их управление и развертывание.

Для создания и настройки контейнеров Docker используется Dockerfile — текстовый файл, в котором описываются необходимые инструкции для сборки образа контейнера. Образы контейнеров могут быть созданы на основе базовых образов из Docker Hub или собраны самостоятельно. Образы являются шаблонами для создания и запуска контейнеров, которые могут быть легко переносимы и воспроизводимы на других системах.

Docker предоставляет удобные инструменты для управления и мониторинга контейнеров, а также для работы с контейнерными сетями и хранилищами данных. Дополнительно, с помощью Docker Compose можно определить и управлять множеством связанных контейнеров, что позволяет развернуть и масштабировать сложные приложения с несколькими сервисами.

Использование Docker позволяет значительно упростить процесс разработки, тестирования и развертывания приложений, а также обеспечить их надежную и безопасную работу в различных окружениях.

Почему Docker Windows Container

Введение Docker Windows Container позволило исправить эту ситуацию и предоставить возможность разрабатывать, тестировать и запускать контейнеры на операционной системе Windows Server с использованием того же интерфейса и инструментов, что и для Linux-контейнеров. Это означает, что разработчики могут использовать знакомую командную строку Docker для создания и управления Windows-контейнерами, а также использовать стандартные образы контейнеров из Docker Hub.

Основные преимущества Docker Windows Container:

1. Большой выбор образов контейнеров из Docker Hub, включая образы с Windows-приложениями и компонентами.
2. Возможность запуска Windows-контейнеров на Windows Server без необходимости использования виртуальных машин.
3. Изоляция и безопасность: каждый контейнер имеет свою собственную изолированную среду, что позволяет избегать конфликтов и улучшает безопасность приложений.
4. Удобство разработки: Docker Windows Container позволяет разработчикам создавать и тестировать приложения на своей локальной машине, а затем легко развертывать их в производственной среде.
5. Масштабируемость: Docker Windows Container позволяет легко масштабировать приложения путем создания и запуска нескольких экземпляров контейнеров.

В целом, Docker Windows Container является мощным инструментом, который упрощает и ускоряет процесс разработки, тестирования и развертывания Windows-приложений. Он позволяет использовать все преимущества Docker, а также обеспечивает надежность и безопасность исполнения приложений в изолированных средах контейнеров.

Преимущества Docker Windows Container

Докер Windows Container предоставляет ряд преимуществ, которые делают его предпочтительным выбором для разработки и развертывания приложений на платформе Windows:

1. Легковесность и эффективность

Докер Windows Container использует контейнеризацию на уровне операционной системы, что делает контейнеры легкими и эффективными по сравнению со виртуальными машинами. Это позволяет сократить использование ресурсов и улучшить производительность приложений.

2. Изолированность и безопасность

Докер Windows Container предоставляет изолированное окружение для приложений, что позволяет избегать конфликтов и обеспечивает безопасность данных. В случае возникновения проблемы в одном контейнере, она не повлияет на другие контейнеры или операционную систему.

3. Гибкость и универсальность

Докер Windows Container поддерживает различные языки программирования и технологии, что позволяет разработчикам использовать любой стек технологий для своих приложений. Это дает большую гибкость и универсальность при разработке и развертывании приложений.

4. Простота использования и управления

Докер Windows Container предоставляет простой и интуитивно понятный интерфейс для разработки, управления и мониторинга контейнеров. Это упрощает процесс развертывания приложений и управления ими, что сокращает время и усилия, затрачиваемые на администрирование.

5. Поддержка современных DevOps-практик

Докер Windows Container интегрируется с инструментами DevOps, такими как системы управления версиями кода, автоматизированные средства развертывания и системы непрерывной интеграции и развертывания (CI/CD). Это дает возможность применять современные DevOps-практики в процессе разработки и доставки приложений.

Как установить Docker Windows Container

Вот пошаговая инструкция:

  1. Убедитесь, что ваша операционная система поддерживает Docker Windows Container. Для этого проверьте требования к системе, указанные на официальном сайте Docker.
  2. Установите Docker Engine. Вы можете скачать установщик Docker Engine с официального сайта Docker и следовать инструкции по установке.
  3. Настройте Docker для работы с Windows-контейнерами. Для этого откройте файл конфигурации Docker и задайте параметр «experimental»: true. Это позволит использовать экспериментальные функции Docker, включая поддержку Windows-контейнеров.
  4. Перезагрузите Docker Engine для применения настроек.
  5. Установите образы Windows-сервера, которые вы хотите запускать в контейнерах. Для этого используйте команду «docker pull» и укажите имя образа.
  6. Запустите контейнер с установленным образом Windows-сервера. Для этого используйте команду «docker run» и передайте необходимые параметры, такие как имя контейнера и имя образа.

После выполнения этих шагов вы сможете успешно установить и запустить Docker Windows Container на вашей системе Linux.

Требования для установки

Перед тем как выполнить установку Docker Windows Container на Linux необходимо удостовериться, что ваша система соответствует следующим требованиям:

Требование Описание
Операционная система Linux с ядром версии 3.10 или выше.
Хостовый процессор Архитектура x86_64 с поддержкой виртуализации, такой как Intel VT или AMD-V.
Память Рекомендуется минимум 4 ГБ оперативной памяти, хотя для определенных случаев может потребоваться больше.
Диск Рекомендуется иметь свободное место на диске не менее 20 ГБ для установки Docker Windows Container.
Интернет-соединение Обеспечивает доступ к Docker Hub и возможность загрузки контейнеров с образами ОС Windows.

Убедитесь, что ваша система соответствует всем указанным требованиям, чтобы успешно установить и использовать Docker Windows Container на Linux.

Установка Docker на Linux

  1. Удалите старые версии Docker (если они установлены) с помощью команды sudo apt-get remove docker docker-engine docker.io containerd runc.
  2. Установите Docker с помощью команды sudo apt-get install docker-ce docker-ce-cli containerd.io.
  3. Проверьте, что Docker успешно установлен, выполнив команду docker version.
  4. Добавьте текущего пользователя в группу docker для запуска Docker без использования sudo команды. Для этого выполните команду sudo usermod -aG docker ${USER} и выйдите из текущей сессии пользователя.
  5. Проверьте работу Docker, запустив простой контейнер с помощью команды docker run hello-world.

Установка Docker на Linux позволяет разработчикам быстро и удобно создавать и развертывать контейнеры для своих приложений. С помощью Docker можно изолированно запустить любой процесс в контейнере, что упрощает управление приложениями и их зависимостями.

Can Windows Containers be hosted on linux?

Is it possible to run Windows Containers on Linux? The scenario is based on an app written in the .NET (old net) and the Linux user that wants to run this with Docker to provide a net462 written API on the localhost .

I am using beta version from Docker Desktop for Windows

If no, then why can Windows run Linux containers and not vice-versa?

As some time has passed and this question is a popular one. I’d like to add one note here that the workaround is to use the new netstandard. It allowed me to pack 4.6.2 framework into new library.

9 Answers 9

Update3: 06.2019 Some of the comments says that the answer is not clear, I’ll try to clarify.

Q: Can Windows containers run on Linux?

A: No. They cannot. Containers are using the underlying Operating System resources and drivers, so Windows containers can run on Windows only, and Linux containers can run on Linux only.

Q: But what about Docker for Windows? Or other VM-based solutions?

A: Docker for Windows allows you to simulate running Linux containers on Windows, but under the hood a Linux VM is created, so still Linux containers are running on Linux, and Windows containers are running on Windows.

Bonus: Read this very nice article about running Linux docker containers on Windows.

Q: So, what should I do with a .Net Framework 462 app, if I would like to run in a container?

A: It depends. Following several recommendations:

    If it is possible — move to .Net Core. Since .Net Core brings support to most major features of .Net Framework, and .Net Framework 4.8 will be the last version of .Net framework

If you cannot migrate to .Net Core — As @Sebastian mentioned — you can convert your libraries to .Net Standard, and have 2 versions of app — one on .Net Framework 4.6.2, and one on .Net Core — it is not always obvious, Visual Studio supports it pretty well (with multi-targeting), but some dependencies can require extra care.

(Less recommended) In some cases, you can run windows containers. Windows containers are becoming more and more mature, with better support in platforms like Kubernetes. But to be able to run .Net Framework code, you still need to run on base image of «Server Core», which occupies about 1.4 GB. In same rare cases, you can migrate your code to .Net Core, but still run on Windows Nano servers, with an image size of 95 MB.

Leaving also the old updates for history

Update2: 08.2018 If you are using Docker-for-Windows, you can run now both windows and linux containers simultaneously: https://blogs.msdn.microsoft.com/premier_developer/2018/04/20/running-docker-windows-and-linux-containers-simultaneously/

Bonus: Not directly related to the question, but you can now run not only the linux container itself, but also orchestrator like kubernetes: https://blog.docker.com/2018/07/kubernetes-is-now-available-in-docker-desktop-stable-channel/

Updated at 2018:

Original answer in general is right, BUT several months ago, docker added experimental feature LCOW (official github repository).

Doesn’t Docker for Windows already run Linux containers? That’s right. Docker for Windows can run Linux or Windows containers, with support for Linux containers via a Hyper-V Moby Linux VM (as of Docker for Windows 17.10 this VM is based on LinuxKit).

The setup for running Linux containers with LCOW is a lot simpler than the previous architecture where a Hyper-V Linux VM runs a Linux Docker daemon, along with all your containers. With LCOW, the Docker daemon runs as a Windows process (same as when running Docker Windows containers), and every time you start a Linux container Docker launches a minimal Hyper-V hypervisor running a VM with a Linux kernel, runc and the container processes running on top.

Because there’s only one Docker daemon, and because that daemon now runs on Windows, it will soon be possible to run Windows and Linux Docker containers side-by-side, in the same networking namespace. This will unlock a lot of exciting development and production scenarios for Docker users on Windows.

Original:

As mentioned in comments by @PanagiotisKanavos, containers are not for virtualization, and they are using the resources of the host machine. As a result, for now windows container cannot run «as-is» on linux machine.

But — you can do it by using VM — as it works on windows. You can install windows VM on your linux host, which will allow to run windows containers.

With it, IMHO run it this way on PROD environment will not be the best idea.

Источник

Можно ли запустить Windows приложение в Linux Docker container?

Возможно глупый вопрос, но всё же.
Есть машинка с Debian, на ней установлен Docker CE.
И мой вопрос — можно ли запустить в контейнере Docker Windows приложение (например я хочу попробовать www.passmark.com/products/pt.htm)
EN-форумы утверждают, что нет, но это было до выхода Docker for Windows.
Сейчас же на странице Docker висит красивая диаграмма, утверждающая, что можно запустить любое приложение на любой ОС, но видимо речь о собственных приложениях 🙂

You can run Windows-based containers on Windows Server 2016 and Windows 10. Windows-based containers require a Windows kernel to run, in the same way that Linux-based containers require a Linux kernel to run. You can even run Windows-based containers on a Windows virtual machine running on an macOS or Linux host. Docker Machine is not necessary if you run macOS 10.10.3 Yosemite, Windows Server 2016, or Windows 10.

Нет.
Докер — это не особо большая НАДСТРОЙКА над ядром Линукса.

Он просто удобным способом позволяет изолировать и запускать родные приложения Линукса.
Из неродных вариантов — разве только запуск Линуксовых приложений из под Докера ФриБСД или напротив запуск Фришных приложение из под Докера Линуха — так как эти операционные системы близки.

С Виндовс сие невозможно в принципе.
Тот Докер что устанавливается в Виндовс — тянет за собой полноценный Линукс. И только это делает возможным запуска Линукс приложений в Докере Виндовс.

Обратная процедура также нетривиальна.

Если вам нужен аналог Докера для запуска приложений Виндовс — обратитесь к технологии Windows Container.

Источник

Preview: Linux Containers on Windows

Microsoft is getting ready for the next big update for Windows Server (check out today’s complimentary Microsoft blog post ) and some of the new features are very exciting for Docker users. One of the most important enhancements is that Docker can now run Linux containers on Windows (LCOW), using Hyper-V technology.

Running Docker Linux containers on Windows requires a minimal Linux kernel and userland to host the container processes. This is exactly what the LinuxKit toolkit was designed for: creating secure, lean and portable Linux subsystems that can provide Linux container functionality as a component of a container platform.

We’ve been busy prototyping LinuxKit support for Docker Linux containers on Windows and have a working preview for you to try. This is still a work in progress, and requires either the recently announced “Windows Server Insider” or Windows 10 Insider builds.

UPDATE: LCOW support is available in Windows 10 Fall Creators Update and in Windows Server 1709. The simplest way to try it out on Windows 10 is to install the edge variant of Docker for Windows (details). On Windows Server 1709, install EE preview.

Running Docker Linux Containers on Windows with LinuxKit

The instructions below have been tested on Windows 10 and Windows Server Insider builds 16278 and 16281.

Be sure to install Docker for Windows (Windows 10) or Docker Enterprise Edition (Windows Server Insider) before starting.

Setup Docker and LinuxKit

A preview build of LinuxKit is available by simply running the following commands in PowerShell (with Administrator rights):

Now get a master branch build of the Docker daemon that contains preview support for Linux containers on Windows:

Start a new Docker daemon listening on a separate pipe and using a separate storage location from the default install:

Try it

Run a Linux container:

Docker just launched a minimal VM running a LinuxKit instance hosting the Linux container!

Since this is an early preview there are some limitations, but basic Docker operations like pull and run work.

Looking ahead

Both Windows Server Insider builds and Docker support for Linux containers on Windows are in early preview mode. When GA, Docker Linux containers on Windows will improve the Docker Linux container experience for both Windows developers and server administrators. Developers will be able to more easily build and test mixed Windows/Linux Docker applications by running containers for both platforms side-by-side on the same system.

And IT-admins that prefer Windows will soon be able to easily run (mostly) Linux-only software like HAProxy and Redis on Windows systems by way of Docker Linux containers on Windows. For example, Docker Linux containers on Windows will make setting up Docker Enterprise Edition and Universal Control Plane (which relies on some Linux-only components) on Windows Server much simpler.

We hope this LinuxKit-based walkthrough will set you up to start experimenting. Feedback is always welcome! For general help and getting started with Insider builds use the Windows Feedback Hub (Windows 10), or the Windows Server Insiders Tech Community . For issues with LinuxKit and Docker support for Linux containers on Windows use the Docker for Windows issue tracker on GitHub . And let us know on Twitter if you build something cool!

Источник

Приветствую!

Возможно глупый вопрос, но всё же.
Есть машинка с Debian, на ней установлен Docker CE.
И мой вопрос — можно ли запустить в контейнере Docker Windows приложение (например я хочу попробовать www.passmark.com/products/pt.htm)
EN-форумы утверждают, что нет, но это было до выхода Docker for Windows.
Сейчас же на странице Docker висит красивая диаграмма, утверждающая, что можно запустить любое приложение на любой ОС, но видимо речь о собственных приложениях :)


  • Вопрос задан

  • 8606 просмотров

ну читайте же внимательнее )

You can run Windows-based containers on Windows Server 2016 and Windows 10. Windows-based containers require a Windows kernel to run, in the same way that Linux-based containers require a Linux kernel to run. You can even run Windows-based containers on a Windows virtual machine running on an macOS or Linux host. Docker Machine is not necessary if you run macOS 10.10.3 Yosemite, Windows Server 2016, or Windows 10.

https://docs.docker.com/engine/faq/

Пригласить эксперта

Нет.
Докер — это не особо большая НАДСТРОЙКА над ядром Линукса.

Он просто удобным способом позволяет изолировать и запускать родные приложения Линукса.
Из неродных вариантов — разве только запуск Линуксовых приложений из под Докера ФриБСД или напротив запуск Фришных приложение из под Докера Линуха — так как эти операционные системы близки.

С Виндовс сие невозможно в принципе.
Тот Докер что устанавливается в Виндовс — тянет за собой полноценный Линукс. И только это делает возможным запуска Линукс приложений в Докере Виндовс.

Обратная процедура также нетривиальна.

Если вам нужен аналог Докера для запуска приложений Виндовс — обратитесь к технологии Windows Container.


  • Показать ещё
    Загружается…

09 окт. 2023, в 11:29

30000 руб./за проект

09 окт. 2023, в 11:22

400000 руб./за проект

09 окт. 2023, в 11:14

1500 руб./за проект

Минуточку внимания

  • Windows do not go to sleep
  • Windows dhcp server несколько подсетей
  • Windows dns сервер условной пересылки dns
  • Windows dhcp server не выдает ip
  • Windows dns сервер по умолчанию