Docker installieren [ThoSch:Wiki]

Benutzer-Werkzeuge

Webseiten-Werkzeuge


thoschwiki:docker:installdocker

Docker installieren

Für die Verwendung unter macOS oder Windows gibt es den sogenannten Docker Desktop, der jeweils alle Komponenten enthält. Unter Linux erfolgt die Installation über den jeweiligen Paketmanager.

Installation unter Linux

Die Repositories der meisten Linux-Distributionen dürften Docker-Pakete enthalten, nur sind diese nicht mehr ganz taufrisch hoffnungslos veraltet. Daher sollte man das Repository auf download.docker.com einbinden und das jeweils neueste Paket docker-ce aus diesem Repository installieren.

Hierfür gibt es zwei Wege:

  1. manuelle Installation
  2. automatisierte Installation mit dem Covenience-Script

Manuelle Installation

Die manuelle Installation umfasst die üblichen Schritte, die für eine Installation aus Fremdquellen notwendig sind:

  1. ggf. vorhandene Version aus den Distributionsquelle deinstallieren (meist nicht nötig1))
  2. Pakete installieren, die für die Nutzung von apt mit https notwendig sind (meist bereits erfüllt)
  3. GPG-Key von Docker einbinden
  4. Repository einbinden
  5. Installieren

Das folgende Beispiel stellt die Installation unter Ubuntu dar. Für andere Distributionen sind bestimmte Parameter anzupassen. Für die einzelnen Distributionen gibt es Beschreibungen in der Docker Dokumentation.

Ggf. vorhandene Version aus den Distributionsquelle deinstallieren:

sudo apt remove docker docker-engine docker.io containerd runc

Ggf. fehlende Pakete installieren, die für die Nutzung von apt mit https notwendig sind:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

GPG-Key von Docker einbinden:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Repository einbinden:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker installieren:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Nun sollte Docker-CE installiert sein.

Installation mit Convinience-Script

Neben der Möglickeit die einzelnen Schritte von Hand vorzunehmen, kann man auch das sogenannte Convenience Script benutzen, das abhängig von der verwendeten Distribution sämtliche Schritte automatisiert durchführt.

Mit der Verwendung des Convinience Scripts gibt man die Kontrolle über den Installationsprozess ab. Das Script wird zwar zunächst nicht mit root-Rechten gestartet, jedoch benutzt es sudo.

Sofern es einer interessierten Seite gelingt, das Script auf der Webserver mit einer Version, die böstrigen Code enthält, zu ersetzen, kann die Sicherheit des Systems gefährdet sein.

Die Empfehlung, das Script vorab zu untersuchen, ist aus meiner Sicht aufgrund der Komplexität des Scriptes unrealistisch.

Der sicherste Weg der Installation bleibt somit der hier noch nicht beschriebene manuelle Weg. Der in der Folge dargestellte Ablauf der scriptgesteuerten Installation kann Anhaltpunkte für das manuelle Vorgehen geben.

Die aktuelle Version des Convinience Scripts herunterladen:

curl -fsSL get.docker.com -o get-docker.sh

Das Script ausführen (mit Ausgabe des Scriptes):

me@raspi:~ $ sh get-docker.sh 
# Executing docker install script, commit: 26ff363bcf3b3f5a00498ac43694bf1c7d9ce16c
+ sudo -E sh -c apt-get update -qq >/dev/null
[sudo] Passwort für me: 
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sudo -E sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian buster stable" > /etc/apt/sources.list.d/docker.list
+ sudo -E sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sudo -E sh -c docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46
 Built:             Wed Sep 16 17:07:02 2020
 OS/Arch:           linux/arm
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46
  Built:            Wed Sep 16 17:00:52 2020
  OS/Arch:          linux/arm
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker me

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

weitere Anpassungen unter Linux

Anpassen der Rechte (optional)

Der Befehl docker kann nur von Mitgliedern der Gruppe docker oder mit Administratorrechten (z.B. per sudo) aufgerufen werden. Um auf die Verwendung von sudo verzichten zu können, kann man den jeweiligen Benutzer in die Gruppe docker aufnehmen:

sudo usermod -aG docker $USER
Da Docker-Container mit root-Rechten auf dem Docker-Host laufen, kann dieses Vorgehen neue Angriffsmöglichkeiten eröffnen (vgl. Docker daemon attack surface).

Aus meiner Sicht muss man hier im Einzelfall Pro und Kontra abwägen. Weiterhin würde ich nur Benutzer in die Gruppe docker aufnehmen, denen man in soweit vertraut, dass die zu den Sudoers gehören.

docker-compose installieren

Auch bei der Installation von docker-compose muss man sich entscheiden, über welchen Weg man die Installation vornimmt. In den Repositories findet sich zumeist ein entsprechendes Paket, das jedoch nicht mehr ganz taufrisch ist. Über pip3 kann man eine aktuellere Version installieren. Bei diesem Installationsweg muss bei Updates daran denken, dass man mit pip3 Install --upgrade docker-compose das Aktualisieren manuell anstoßen muss.

Installationsweg verfügbare Version
pip3 install –upgrade docker-compose 1.29.1
Repository Ubuntu 18.04. (25.04.2021) 1.17.1-2
Repository Ubuntu 20.04. (25.04.2021) 1.25.0-1
Repository Raspbian Buster (25.04.2021) 1.21.0-3

Zunächst sind die notwendigen Pakete zu installieren:

sudo apt install -y libffi-dev libssl-dev
sudo apt install -y python3 python3-pip
sudo apt remove python-configparser

Das Entfernen von python-configparser ging bei mir ins Leere, weil dieses Paket nicht installiert war.

Danach wird docker-compose mit pip3 installiert:

sudo pip3 -v install docker-compose
Unter Ubuntu 18.04 besteht das Problem, dass sich die aktuelle Version von docker-compose nicht mehr mit dem distributionsseitig verfügbaren 'pip3' installieren lassen.
Hier ist eine spezielle Vorgehensweise beim Update von pip notwendig.

Test der Installation

Nachdem Docker CE oder der Docker desktop installiert ist, ist der Zeitpunkt für einen ersten Test gekommen.

Zunächst ein Blick, ob docker „funktioniert“:

sudo docker version

Es sollte eine Aufstellung mit Versionsinformationen erfolgen.

Wenn der Aufruf docker version erfolgreich verlaufen ist, kann man den hello-world-Container starten:

sudo docker run hello-world

Zunächst sollte der Docker selbständig das entsprechende Image laden und dann der Container starten, der den folgenden Ausgibt.

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/Hello from Docker!
Die unter 2. ausgegebene Prozessorarchitektur (hier amd64) hängt von der eigenen Hardware ab.
Sofern man wie oben beschrieben die Rechte des eigenen Nutzer angepasst hat, sollte man die obigen Behle (zusätzlich) ohne sudo testen.

Quellen

1)
ggf. einfach mal docker aufrufen
thoschwiki/docker/installdocker.txt · Zuletzt geändert: 25.04.2021 16:39 von thosch