Table of Contents

Docker Engine Linux

Installation

Per Script

:!: Always check scripts before running them!

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

curl -sSL https://get.docker.com | sh

Manuell

:!: Tested with Debian 11:

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

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

# add dockers gpg key
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# detect arch and add docker repo
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker version && echo && echo && sudo docker compose version

if gpg error:

sudo chmod a+r /etc/apt/keyrings/docker.gpg
sudo apt update

:!: Tested with Debian 12:

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

sudo apt update
sudo apt install ca-certificates curl

# add dockers gpg key
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# detect arch and add docker repo
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker version && echo && echo && sudo docker compose version

Optional

User zu Docker-Gruppe hinzufügen

usermod -aG docker username

Rasperry Pi 1

:!: Tested with Raspbian 11

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

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

# add dockers gpg key
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# add docker armhf raspbian bullseye stable repo
sudo echo "deb [arch=armhf signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/raspbian bullseye stable" > /etc/apt/sources.list.d/docker.list

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin
sudo docker version

docker version

Client: Docker Engine - Community
 Version:           23.0.2
 API version:       1.42
 Go version:        go1.19.7
 Git commit:        569dd73
 Built:             Mon Mar 27 16:16:08 2023
 OS/Arch:           linux/arm
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.2
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.7
  Git commit:       219f21b
  Built:            Mon Mar 27 16:16:08 2023
  OS/Arch:          linux/arm
  Experimental:     false
 containerd:
  Version:          1.6.20
  GitCommit:        2806fc1057397dbaeefbea0e4e17bddfbd388f38
 runc:
  Version:          1.1.5
  GitCommit:        v1.1.5-0-gf19387a
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Konfiguration

IPv6

/etc/docker/daemon.json erstellen bearbeiten:

{
  "ipv6": true,
  "ip6tables": true,
  "experimental": true,
  "fixed-cidr-v6": "fd66:73e8:7225:543b::/64"
}

Rootless mode

https://docs.docker.com/engine/security/rootless/

Befehle

docker start <ID/Name>
docker stop <ID/Name>
docker rm <ID/Name>
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker cp <Name>:/path/to/file /host/path/to/file
docker ps
docker container ls -a
docker network ls <ID/Name>
docker network inspect <ID/Name>
docker network rm <ID/Name>
docker exec -it <ID/Name> /bin/bash
docker exec -it <ID/Name> /bin/sh             #alpine based images
docker pull <imageName>
docker load -i <image-name.tar.gz>
docker images
docker image rm <ID>
docker stats (<ID/Name>)
docker logs <ID/Name>
docker system prune
docker system prune -a                        #all, not just dangling
docker system prune -f                        #force
docker system prune -a -f
docker system prune --volumes
/var/lib/docker/volumes/         #docker volumes

https://docs.docker.com/engine/reference/commandline/docker/

Format Stats

# sort by memory usage
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}" | sort -k 4 -h -r

https://docs.docker.com/engine/reference/commandline/stats/#format

Swarm

docker swarm init --advertise-addr 10.1.1.1
docker node ls
docker node rm node02
docker swarm leave

Logs

Docker Service

sudo journalctl -fu docker.service          #systemd

Docker Containers

sudo docker logs auth 2>&1 | grep "unexpected"