- Running Docker Windows and Linux Containers Simultaneously
- What you Need
- Let’s Get Started
- Conclusion
- FAQs for Windows
- Why is Windows 10 or Windows 11 required?
- Can I install Docker Desktop on Windows 10 Home?
- Can I run Docker Desktop on Windows Server?
- How do I run Windows containers on Windows Server?
- Why do I see the Docker Desktop Access Denied error message when I try to start Docker Desktop?
- Why does Docker Desktop fail to start when anti-virus software is installed?
- Can I change permissions on shared volumes for container-specific deployment requirements?
- How do symlinks work on Windows?
- File sharing with Kubernetes and WSL 2
- How do I add custom CA certificates?
- How do I add client certificates?
- How do I switch between Windows and Linux containers
- Начало работы. Настройка контейнеров Linux в Windows 10
- Предварительные условия
- Установка Docker Desktop
- Запуск первого контейнера Linux
- Docker command line to switch to running linux containers on Windows Core machine
Running Docker Windows and Linux Containers Simultaneously
Many of you with familiarity with Docker for Windows know how you currently have to switch between running either Windows or Linux Containers. In the following post, Premier Developer Consultant Randy Patterson teaches us how to combat this limitation and run Docker Windows and Linux Containers simultaneously on the same host. Starting with Docker for Windows version 18.03.0-ce-win59 the Linux Containers on Windows (LCOW) is available as an experimental feature. Previously, you could get LCOW only on the Edge or Nightly Build Channels. For people like me who need a stable version of Docker for Windows, this feature was not available until now. Docker for Windows currently allows you to switch between running Windows or Linux Containers but not both. Linux containers were hosted in a Linux Virtual Machine making it convenient for testing purposes but not production. LCOW will make it possible to have an application that mixes Linux and Windows containers together on a single host.
What you Need
In order to use the new LCOW feature, you will need the latest version Docker for Windows and have the Experimental Features enabled: 1. Docker for Windows version 18.03.0-ce-win59 or greater 2. Experimental Features enabled a. Docker -> Settings –> Daemon
Let’s Get Started
With Docker for Windows started and Windows containers selected, you can now run either Windows or Linux Containers simultaneously. The new –platform=linux command line switch is used to pull or start Linux images on Windows.
docker pull --platform=linux ubuntu
Now start the Linux container and a Windows Server Core container.
docker run --platform=linux -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" docker run -d microsoft/windowsservercore ping -t 127.0.0.1
Both containers are running on a single host. If you list your local image cache you’ll see a mixture of both Windows and Linux images. To determine the operating system an image requires you can use docker inspect and filter on the “Os” property.
docker inspect --format '>' ubuntu
Conclusion
Running Windows and Linux containers simultaneously on the same host is an interesting new feature in Docker with lots of possibilities. However, this is an experimental feature and may have some issues. One known problem is volumes are not stable especially when mapping between Linux and Windows file systems. This can cause some containers that rely heavily on volumes to fail to load. Furthermore, tooling support is not yet complete. For example, Docker-Compose and Kubernetes cannot yet mix Windows and Linux containers. Microsoft is currently tracking issues here and feature progress can be tracked at the Github site here.
FAQs for Windows
Yes, you can run VirtualBox along with Docker Desktop if you have enabled the Windows Hypervisor Platform feature on your machine.
Why is Windows 10 or Windows 11 required?
Docker Desktop uses the Windows Hyper-V features. While older Windows versions have Hyper-V, their Hyper-V implementations lack features critical for Docker Desktop to work.
Can I install Docker Desktop on Windows 10 Home?
If you are running Windows 10 Home (starting with version 1903), you can install Docker Desktop for Windows with the WSL 2 backend.
Can I run Docker Desktop on Windows Server?
No, running Docker Desktop on Windows Server is not supported.
How do I run Windows containers on Windows Server?
You can install a native Windows binary which allows you to develop and run Windows containers without Docker Desktop. For more information, see the tutorial about running Windows containers on Windows Server in Getting Started with Windows Containers.
Why do I see the Docker Desktop Access Denied error message when I try to start Docker Desktop?
Docker Desktop displays the Docker Desktop — Access Denied error if a Windows user is not part of the docker-users group.
If your admin account is different to your user account, add the docker-users group. Run Computer Management as an administrator and navigate to Local Users* and Groups > Groups > docker-users.
Right-click to add the user to the group. Log out and log back in for the changes to take effect.
Why does Docker Desktop fail to start when anti-virus software is installed?
Some anti-virus software may be incompatible with Hyper-V and Windows 10 builds which impact Docker Desktop. For more information, see Docker Desktop fails to start when anti-virus software is installed.
Can I change permissions on shared volumes for container-specific deployment requirements?
Docker Desktop does not enable you to control ( chmod ) the Unix-style permissions on shared volumes for deployed containers, but rather sets permissions to a default value of 0777 ( read , write , execute permissions for user and for group ) which is not configurable.
How do symlinks work on Windows?
Docker Desktop supports two types of symlinks: Windows native symlinks and symlinks created inside a container.
The Windows native symlinks are visible within the containers as symlinks, whereas symlinks created inside a container are represented as mfsymlinks. These are regular Windows files with a special metadata. Therefore the symlinks created inside a container appear as symlinks inside the container, but not on the host.
File sharing with Kubernetes and WSL 2
Docker Desktop mounts the Windows host filesystem under /run/desktop inside the container running Kubernetes. See the Stack Overflow post for an example of how to configure a Kubernetes Persistent Volume to represent directories on the host.
How do I add custom CA certificates?
You can add trusted Certificate Authorities (CAs) to your Docker daemon to verify registry server certificates, and client certificates, to authenticate to registries.
Docker Desktop supports all trusted Certificate Authorities (CAs) (root or intermediate). Docker recognizes certs stored under Trust Root Certification Authorities or Intermediate Certification Authorities.
Docker Desktop creates a certificate bundle of all user-trusted CAs based on the Windows certificate store, and appends it to Moby trusted certificates. Therefore, if an enterprise SSL certificate is trusted by the user on the host, it is trusted by Docker Desktop.
To learn more about how to install a CA root certificate for the registry, see Verify repository client with certificates in the Docker Engine topics.
How do I add client certificates?
You can add your client certificates in ~/.docker/certs.d//client.cert and ~/.docker/certs.d//client.key . You do not need to push your certificates with git commands.
When the Docker Desktop application starts, it copies the ~/.docker/certs.d folder on your Windows system to the /etc/docker/certs.d directory on Moby (the Docker Desktop virtual machine running on Hyper-V).
You need to restart Docker Desktop after making any changes to the keychain or to the ~/.docker/certs.d directory in order for the changes to take effect.
The registry cannot be listed as an insecure registry (see Docker Daemon). Docker Desktop ignores certificates listed under insecure registries, and does not send client certificates. Commands like docker run that attempt to pull from the registry produce error messages on the command line, as well as on the registry.
To learn more about how to set the client TLS certificate for verification, see Verify repository client with certificates in the Docker Engine topics.
How do I switch between Windows and Linux containers
From the Docker Desktop menu, you can toggle which daemon (Linux or Windows) the Docker CLI talks to. Select Switch to Windows containers to use Windows containers, or select Switch to Linux containers to use Linux containers (the default).
For more information on Windows containers, refer to the following documentation:
- Microsoft documentation on Windows containers.
- Build and Run Your First Windows Server Container (Blog Post) gives a quick tour of how to build and run native Docker Windows containers on Windows 10 and Windows Server 2016 evaluation releases.
- Getting Started with Windows Containers (Lab) shows you how to use the MusicStore application with Windows containers. The MusicStore is a standard .NET application and, forked here to use containers, is a good example of a multi-container application.
- To understand how to connect to Windows containers from the local host, see I want to connect to a container from Windows
If you set proxies or daemon configuration in Windows containers mode, these apply only on Windows containers. If you switch back to Linux containers, proxies and daemon configurations return to what you had set for Linux containers. Your Windows container settings are retained and become available again when you switch back.
Начало работы. Настройка контейнеров Linux в Windows 10
Это упражнение охватывает создание и запуск контейнеров Linux в Windows 10.
В рамках этого краткого руководства вы сможете выполнить следующие действия:
Это краткое руководство применимо только к Windows 10. Дополнительную документацию по быстрому началу работы можно найти в содержании в левой части этой страницы.
Предварительные условия
Убедитесь, что ваша система отвечает следующим требованиям:
- Одна физическая компьютерная система под управлением Windows 10 Профессиональная, Windows 10 Корпоративная или Windows Server 2019 версии 1809 или более поздней версии.
- Убедитесь, что включена технология Hyper-V.
Установка Docker Desktop
Скачайте Docker Desktop и запустите установщик. Вам потребуется войти в систему. Создайте учетную запись, если у вас ее нет. Подробные инструкции по установке доступны в документации по Docker.
Запуск первого контейнера Linux
Чтобы запустить контейнеры Linux, необходимо убедиться в ориентировании Docker на требуемую управляющую программу. Чтобы проверить это, щелкните значок Docker с изображением кита на панели задач и выберите Switch to Linux Containers в меню действий. Если вы видите Switch to Windows Containers , в качестве целевой уже задана управляющая программа Linux.
Убедившись в ориентировании на требуемую управляющую программу, запустите контейнер с помощью следующей команды:
docker run --rm busybox echo hello_world
Должен запуститься контейнер и отобразиться текст «hello_world». Затем будет выполнен выход.
При запросе docker images должен отобразиться образ контейнера Linux, который вы только что извлекли и запустили:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 59788edf1f3e 4 weeks ago 3.41MB
Docker command line to switch to running linux containers on Windows Core machine
I inherited a Windows Server Core machine, and I want to run linux-based containers in docker on that machine. It is currently set up to run windows-based containers, so I want to switch to running linux containers. When I try to use a linux-based image, I get this error:
PS C:\Program Files\Docker> docker pull my-linux-based-image Pulling from my-linux-based-image image operating system "linux" cannot be used on this platform
On my Windows desktop machine, I’d use the Docker Desktop context menu from the system tray to switch between linux and windows containers, but that’s not available in Windows Core. Can I make this switch from the command line? I see the suggestion to use DockerCli.exe but I don’t have this installed, even after making sure I installed the latest docker package. Is there a separate cli-related package I need? Here’s the version info for the docker install on my Windows Core machine:
PS C:\Program Files\Docker> docker version Client: Docker Engine - Enterprise Version: 18.09.8 API version: 1.39 Go version: go1.10.8 Git commit: 90e30bdf98 Built: 07/16/2019 17:13:22 OS/Arch: windows/amd64 Experimental: false Server: Docker Engine - Enterprise Engine: Version: 18.09.8 API version: 1.39 (minimum version 1.24) Go version: go1.10.8 Git commit: 90e30bdf98 Built: 07/16/2019 17:11:04 OS/Arch: windows/amd64 Experimental: false