From 7ad11f90ba07b5ea41f0910912b1a989b657d608 Mon Sep 17 00:00:00 2001 From: Allie Sadler <102604716+aevesdocker@users.noreply.github.com> Date: Thu, 6 Oct 2022 09:02:23 +0100 Subject: [PATCH] remove content repeated elsewhere --- desktop/install/linux-install.md | 159 ------------------------------- 1 file changed, 159 deletions(-) diff --git a/desktop/install/linux-install.md b/desktop/install/linux-install.md index c7102e9e04cd..bfcf19d270b9 100644 --- a/desktop/install/linux-install.md +++ b/desktop/install/linux-install.md @@ -136,165 +136,6 @@ Log out and log back in so that your group membership is re-evaluated. For more information, see [Docker Desktop Subscription Service Agreement](https://www.docker.com/legal/docker-subscription-service-agreement). We recommend that you also read the [FAQs](https://www.docker.com/pricing/faq){: target="_blank" rel="noopener" class="_" id="dkr_docs_desktop_install_btl"}. -## Differences between Docker Desktop for Linux and Docker Engine - -Docker Desktop for Linux and Docker Engine can be installed side-by-side on the -same machine. Docker Desktop for Linux stores containers and images in an isolated -storage location [within a VM](linux-install.md#why-docker-desktop-for-linux-runs-a-vm) and offers -controls to restrict [its resources](../settings/linux.md#resources). Using a dedicated storage -location for Docker Desktop prevents it from interfering with a Docker Engine -installation on the same machine. - -While it's possible to run both Docker Desktop and Docker Engine simultaneously, -there may be situations where running both at the same time can cause issues. -For example, when mapping network ports (`-p` / `--publish`) for containers, both -Docker Desktop and Docker Engine may attempt to reserve the same port on your -machine, which can lead to conflicts ("port already in use"). - -We generally recommend stopping the Docker Engine while you're using Docker Desktop -to prevent the Docker Engine from consuming resources and to prevent conflicts -as described above. - -Use the following command to stop the Docker Engine service: - -```console -$ sudo systemctl stop docker docker.socket containerd -``` - -Depending on your installation, the Docker Engine may be configured to automatically -start as a system service when your machine starts. Use the following command to -disable the Docker Engine service, and to prevent it from starting automatically: - -```console -$ sudo systemctl disable docker docker.socket containerd -``` - -### Switch between Docker Desktop and Docker Engine -{: id="context" } - -The Docker CLI can be used to interact with multiple Docker Engines. For example, -you can use the same Docker CLI to control a local Docker Engine and to control -a remote Docker Engine instance running in the cloud. [Docker Contexts](../../engine/context/working-with-contexts.md) -allow you to switch between Docker Engines instances. - -When installing Docker Desktop, a dedicated "desktop-linux" context is created to -interact with Docker Desktop. On startup, Docker Desktop automatically sets its -own context (`desktop-linux`) as the current context. This means that subsequent -Docker CLI commands target Docker Desktop. On shutdown, Docker Desktop resets -the current context to the `default` context. - -Use the `docker context ls` command to view what contexts are available on your -machine. The current context is indicated with an asterisk (`*`); - -```console -$ docker context ls -NAME DESCRIPTION DOCKER ENDPOINT ... -default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock ... -desktop-linux unix:///home//.docker/desktop/docker.sock ... -``` - -If you have both Docker Desktop and Docker Engine installed on the same machine, -you can run the `docker context use` command to switch between the Docker Desktop -and Docker Engine contexts. For example, use the "default" context to interact -with the Docker Engine; - -```console -$ docker context use default -default -Current context is now "default" -``` - -And use the `desktop-linux` context to interact with Docker Desktop: - -```console -$ docker context use desktop-linux -desktop-linux -Current context is now "desktop-linux" -``` - -Refer to the [Docker Context documentation](../../engine/context/working-with-contexts.md) for more details. - -## Why Docker Desktop for Linux runs a VM - - -Docker Desktop for Linux runs a Virtual Machine (VM) for the following reasons: - -1. **To ensure that Docker Desktop provides a consistent experience across platforms**. - - During research, the most frequently cited reason for users wanting Docker Desktop for Linux (DD4L) was to ensure a consistent Docker Desktop - experience with feature parity across all major operating systems. Utilizing - a VM ensures that the Docker Desktop experience for Linux users will closely - match that of Windows and macOS. - - This need to deliver a consistent experience across all major OSs will become increasingly important as we look towards adding exciting new features, such as Docker Extensions, to Docker Desktop that will benefit users across all tiers. We’ll provide more details on these at [DockerCon22](https://www.docker.com/dockercon/){: target="_blank" rel="noopener" class="_"}. Watch this space. - -2. **To make use of new kernel features** - - Sometimes we want to make use of new operating system features. Because we control the kernel and the OS inside the VM, we can roll these out to all users immediately, even to users who are intentionally sticking on an LTS version of their machine OS. - -3. **To enhance security** - - Container image vulnerabilities pose a security risk for the host environment. There is a large number of unofficial images that are not guaranteed to be verified for known vulnerabilities. Malicious users can push images to public registries and use different methods to trick users into pulling and running them. The VM approach mitigates this threat as any malware that gains root privileges is restricted to the VM environment without access to the host. - - Why not run rootless Docker? Although this has the benefit of superficially limiting access to the root user so everything looks safer in "top", it allows unprivileged users to gain `CAP_SYS_ADMIN` in their own user namespace and access kernel APIs which are not expecting to be used by unprivileged users, resulting in [vulnerabilities](https://www.openwall.com/lists/oss-security/2022/01/18/7){: target="_blank" rel="noopener" class="_"}. - -4. **To provide the benefits of feature parity and enhanced security, with minimal impact on performance** - - The VM utilized by DD4L uses [`virtiofs`](https://virtio-fs.gitlab.io){:target="_blank" rel="noopener" class="_"}, a shared file system that allows virtual machines to access a directory tree located on the host. Our internal benchmarking shows that with the right resource allocation to the VM, near native file system performance can be achieved with virtiofs. - - As such, we have adjusted the default memory available to the VM in DD4L. You can tweak this setting to your specific needs by using the **Memory** slider within the **Settings** > **Resources** tab of Docker Desktop. - -## File sharing - -Docker Desktop for Linux uses [virtiofs](https://virtio-fs.gitlab.io/){:target="_blank" rel="noopener"}{:target="_blank" rel="noopener"} as the -default (and currently only) mechanism to enable file sharing between the host -and Docker Desktop VM. In order not to require elevated privileges, without -unnecessarily restricting operations on the shared files, Docker Desktop runs -the file sharing service (`virtiofsd`) inside a user namespace (see -`user_namespaces(7)`) with UID and GID mapping configured. As a result Docker -Desktop relies on the host being configured to enable the current user to use -subordinate ID delegation. For this to be true `/etc/subuid` (see `subuid(5)`) -and `/etc/subgid` (see `subgid(5)`) must be present. Docker Desktop only -supports subordinate ID delegation configured via files. Docker Desktop maps the -current user ID and GID to 0 in the containers. It uses the first entry -corresponding to the current user in `/etc/subuid` and `/etc/subgid` to set up -mappings for IDs above 0 in the containers. - -| ID in container | ID on host | -| --------------- | -------------------------------------------------------------------------------- | -| 0 (root) | ID of the user running DD (e.g. 1000) | -| 1 | 0 + beginning of ID range specified in `/etc/subuid`/`/etc/subgid` (e.g. 100000) | -| 2 | 1 + beginning of ID range specified in `/etc/subuid`/`/etc/subgid` (e.g. 100001) | -| 3 | 2 + beginning of ID range specified in `/etc/subuid`/`/etc/subgid` (e.g. 100002) | -| ... | ... | - -If `/etc/subuid` and `/etc/subgid` are missing, they need to be created. -Both should contain entries in the form - -`::`. For example, to allow the current user -to use IDs from 100000 to 165535: - -```console -$ grep "$USER" /etc/subuid >> /dev/null 2&>1 || (echo "$USER:100000:65536" | sudo tee -a /etc/subuid) -$ grep "$USER" /etc/subgid >> /dev/null 2&>1 || (echo "$USER:100000:65536" | sudo tee -a /etc/subgid) -``` - -To verify the configs have been created correctly, inspect their contents: - -```console -$ echo $USER -exampleuser -$ cat /etc/subuid -exampleuser:100000:65536 -$ cat /etc/subgid -exampleuser:100000:65536 -``` - -In this scenario if a shared file is `chown`ed inside a Docker Desktop container -owned by a user with a UID of 1000, it shows up on the host as owned by -a user with a UID of 100999. This has the unfortunate side effect of preventing -easy access to such a file on the host. The problem is resolved by creating -a group with the new GID and adding our user to it, or by setting a recursive -ACL (see `setfacl(1)`) for folders shared with the Docker Desktop VM. ## Where to go next