How to install and setup Docker Desktop on Fedora 35 workstation

How to install and setup Docker Desktop on Fedora 35 workstation

docker-desktop

Here in this article we will see how we can setup Docker Desktop on Fedora 35 workstation. We will first get a Docker Overview and proceed with the requirements for the Docker Desktop installation and them proceed with the setup for install Docker Desktop.

Test Environment

Fedora 35 workstation

What is Docker

Docker the most loved tool as per the Stack Overflow 2022 Developer Survey – https://survey.stackoverflow.co/2022/#section-most-loved-dreaded-and-wanted-other-tools is used to build, ship and run your code or application packaged as a container irrespective of the infrastructure on which it is run. The containers build locally on a developer desktop machine can be run anywhere either locally, in cloud provider environment or a hybrid environment of both without any change. This increases the developer productivity so they just focus on building their application and also reduces the delivery time to the production environment or end user as its the same container that is going to be deployed in any environment.

Docker is written in the Go programming language and takes advantage of several features of the Linux kernel to deliver its functionality. Docker uses the concept of namespaces in linux which is used to build an isolated environment for a process in this case for a container. It creates a separate namespace for each container so they are isolated from each other.

Benefits of Docker

  • Build portable application for fast and consistent delivery
  • Scale the deployed application with ease as per business requirement
  • Integrate with CICD pipeline for continuous build, deployment and testing of containerized application

Docker Architecture

Docker uses a client server architecture in which the docker client talks to the docker daemon which does the actual work of managing the images, containers, volumes and networks. Docker client and daemon can run on the same machine or you can connect docker client to a remode docker daemon. Docker client and daemon both communicate using REST API, over UNIX sockets or a network interface. Docker compose is another client that we can use to run multiple dependent containers as a service (ie. an application with postgres db requirement).

Docker Desktop

Docker Desktop is a collection Docker daemon (dockerd), Docker client (docker), Docker Compose (docker-compose), Docker Content Trust, Kubernetes and Credentail Help components.

NOTE: Commercial use of Docker Desktop in larger enterprises (more than 250 employees OR more than $10 million USD in annual revenue) requires a paid subscription.

Docker Desktop System Requirements

Make sure the following requirements are met.

64 bit kernel with CPU supporting virtualization

[admin@feddocker ~]$ uname -a
Linux feddocker.stack.com 5.14.10-300.fc35.x86_64 #1 SMP Thu Oct 7 20:48:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

KVM virtualization support

[admin@feddocker ~]$ lsmod | grep kvm
kvm_intel             331776  0
kvm                  1019904  1 kvm_intel
irqbypass              16384  1 kvm

[admin@feddocker ~]$ ls -al /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 Sep  8 13:42 /dev/kvm

[admin@feddocker ~]$ sudo usermod -aG kvm $USER

[admin@feddocker ~]$ id $USER
uid=1000(admin) gid=1000(admin) groups=1000(admin),10(wheel),36(kvm)

Log out and log back in so that your group membership is re-evaluated.

QEMU must be version 5.2 or newer

[admin@feddocker ~]$ /usr/bin/qemu-system-x86_64 --version
QEMU emulator version 6.1.0 (qemu-6.1.0-5.fc35)
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers

systemd init system

Fedora by default supports systemd for service management.

Gnome or KDE Desktop environment

I am using a Fedora 35 workstation with GNOME support.

Memory requirements

Have atleast 4GB RAM

Enable configuring ID mapping in user namespaces

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.

[admin@feddocker ~]$ cat /etc/subuid
admin:100000:65536
[admin@feddocker ~]$ cat /etc/subgid
admin:100000:65536

NOTE: Docker Desktop for Linux and Docker Engine can be installed side-by-side on the same machine. But it is recommended to stop the Docker Engine while you’re using Docker Desktop to prevent the Docker Engine from consuming resources and to prevent conflicts.

Procedure

Step1: Setup RPM Package repository

[admin@feddocker ~]$ sudo dnf -y install dnf-plugins-core

[admin@feddocker ~]$ sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
[sudo] password for admin: 
Adding repo from: https://download.docker.com/linux/fedora/docker-ce.repo

Step2: Download Docker Desktop

Download latest stable version of Docker Desktop from HERE.

[admin@feddocker Downloads]$ ls -ltr docker-desktop-4.11.0-x86_64.rpm 
-rw-r--r--. 1 admin admin 406824593 Sep  8 15:05 docker-desktop-4.11.0-x86_64.rpm

Step3: Install Docker Desktop

[admin@feddocker Downloads]$ sudo dnf install ./docker-desktop-4.11.0-x86_64.rpm 
...
Installed:
  at-spi2-atk-devel-2.38.0-3.fc35.x86_64           at-spi2-core-devel-2.42.0-1.fc35.x86_64      atk-devel-2.36.0-4.fc35.x86_64                  brotli-1.0.9-6.fc35.x86_64                   brotli-devel-1.0.9-6.fc35.x86_64              
  bzip2-devel-1.0.8-9.fc35.x86_64                  cairo-devel-1.17.4-4.fc35.x86_64             cairo-gobject-devel-1.17.4-4.fc35.x86_64        cmake-filesystem-3.22.2-1.fc35.x86_64        dbus-devel-1:1.12.20-5.fc35.x86_64            
  docker-ce-cli-1:20.10.17-3.fc35.x86_64           docker-desktop-4.11.0-83626.x86_64           docker-scan-plugin-0.17.0-3.fc35.x86_64         fontconfig-devel-2.13.94-3.fc35.x86_64       freetype-devel-2.11.0-1.fc35.x86_64           
  fribidi-devel-1.0.10-5.fc35.x86_64               gdk-pixbuf2-devel-2.42.6-2.fc35.x86_64       glib2-devel-2.70.0-5.fc35.x86_64                graphite2-devel-1.3.14-8.fc35.x86_64         gtk3-devel-3.24.30-4.fc35.x86_64              
  harfbuzz-devel-2.8.2-2.fc35.x86_64               libX11-devel-1.7.2-3.fc35.x86_64             libXau-devel-1.0.9-7.fc35.x86_64                libXcomposite-devel-0.4.5-6.fc35.x86_64      libXcursor-devel-1.2.0-6.fc35.x86_64          
  libXdamage-devel-1.1.5-6.fc35.x86_64             libXext-devel-1.3.4-7.fc35.x86_64            libXfixes-devel-6.0.0-2.fc35.x86_64             libXft-devel-2.3.3-7.fc35.x86_64             libXi-devel-1.7.10-7.fc35.x86_64              
  libXinerama-devel-1.1.4-9.fc35.x86_64            libXrandr-devel-1.5.2-7.fc35.x86_64          libXrender-devel-0.9.10-15.fc35.x86_64          libXtst-devel-1.2.3-15.fc35.x86_64           libblkid-devel-2.37.2-1.fc35.x86_64           
  libcloudproviders-devel-0.3.1-4.fc35.x86_64      libdatrie-devel-0.2.13-2.fc35.x86_64         libepoxy-devel-1.5.9-1.fc35.x86_64              libffi-devel-3.1-29.fc35.x86_64              libglvnd-core-devel-1:1.3.3-2.fc35.x86_64     
  libglvnd-devel-1:1.3.3-2.fc35.x86_64             libicu-devel-69.1-2.fc35.x86_64              libmount-devel-2.37.2-1.fc35.x86_64             libpng-devel-2:1.6.37-11.fc35.x86_64         libselinux-devel-3.2-4.fc35.x86_64            
  libsepol-devel-3.2-3.fc35.x86_64                 libthai-devel-0.1.28-7.fc35.x86_64           libtiff-devel-4.3.0-2.fc35.x86_64               libxcb-devel-1.13.1-8.fc35.x86_64            libxkbcommon-devel-1.3.1-1.fc35.x86_64        
  libxml2-devel-2.9.12-6.fc35.x86_64               pango-devel-1.49.1-1.fc35.x86_64             pass-1.7.4-3.fc35.noarch                        pcre-cpp-8.45-1.fc35.x86_64                  pcre-devel-8.45-1.fc35.x86_64                 
  pcre-utf16-8.45-1.fc35.x86_64                    pcre-utf32-8.45-1.fc35.x86_64                pcre2-devel-10.37-4.fc35.x86_64                 pixman-devel-0.40.0-4.fc35.x86_64            qrencode-4.1.1-1.fc35.x86_64                  
  sysprof-capture-devel-3.42.1-1.fc35.x86_64       wayland-devel-1.19.0-2.fc35.x86_64           wayland-protocols-devel-1.26-2.fc35.noarch      wl-clipboard-2.0.0-5.fc35.x86_64             xclip-0.13-15.git11cba61.fc35.x86_64          
  xorg-x11-proto-devel-2021.5-1.fc35.noarch        xz-devel-5.2.5-7.fc35.x86_64                 zlib-devel-1.2.11-30.fc35.x86_64

There are a few post-install configuration steps done through the post-install script contained in the RPM package.

The post-install script:

  • Sets the capability on the Docker Desktop binary to map privileged ports and set resource limits.
  • Adds a DNS name for Kubernetes to /etc/hosts.
  • Creates a link from /usr/bin/docker to /usr/local/bin/com.docker.cli.
[admin@feddocker Downloads]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1	kubernetes.docker.internal
[admin@feddocker Downloads]$ ls -ltr /usr/local/bin/com.docker.cli
lrwxrwxrwx. 1 root root 15 Sep  8 15:06 /usr/local/bin/com.docker.cli -> /usr/bin/docker

Step4: Start Docker Desktop from GUI

Search for Docker Desktop in Fedora Applications list and launch it.

The first time you launch the Docker Desktop application you will get a pop up to accept the aggrement. Read it and accept it if you are comfortable and launch the application.

For the first it will show Docker Desktop Starting as shown below.

After a few minutes its ready to be used as shown below. You can follow the 2 min tutorial to experiment with Docker Desktop on how it works.

If you skip the tutorial you will get into the Docker Desktop Home Window where in you can manage your containers, images, volumes as shown in below screenshot.

Hope you enjoyed reading this article. Thank you..