Docker: Porovnání verzí

Z Poznámkový blok
Přejít na: navigace, hledání
 
(Není zobrazeno 9 mezilehlých verzí od stejného uživatele.)
Řádka 1: Řádka 1:
== Nastavení depositáře ==
+
== Instalace ==
 +
=== Nastavení depositáře ===
 
  sudo apt update
 
  sudo apt update
 
  sudo apt install ca-certificates curl gnupg
 
  sudo apt install ca-certificates curl gnupg
Řádka 11: Řádka 12:
 
   "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
 
   "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
 
   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 +
sudo apt update
  
== Instalace (bez compose) ==
+
=== Instalace ===
 
  sudo apt update
 
  sudo apt update
  sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
+
  sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 +
 
 +
* https://docs.docker.com/engine/install/debian/
 +
== Vytvoření self-signed certifikátu ==
 +
Doporučuji si nachystat prostředí
 +
mkdir /etc/ssl/certs/docker
 +
chmod -v 0444 /etc/ssl/certs/docker
 +
cd /etc/ssl/certs/docker
 +
 
 +
Vytváření server certifikát na 10 let (Měnit proměný který obsahují $)
 +
openssl genrsa -aes256 -out ca-key.pem 4096
 +
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
 +
 +
openssl genrsa -out server-key.pem 4096
 +
openssl req -subj "/CN=$LOCALHOST_DOMAIN" -sha256 -new -key server-key.pem -out server.csr
 +
 +
echo subjectAltName = DNS:$LOCALHOST_DOMAIN,DNS:$HOST_DOMAIN,IP:127.0.0.1 >> extfile.cnf
 +
echo extendedKeyUsage = serverAuth >> extfile.cnf
 +
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
 +
 
 +
Vytváření client certifikát na 10 let
 +
openssl genrsa -out key.pem 4096
 +
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
 +
echo extendedKeyUsage = clientAuth > extfile-client.cnf
 +
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
 +
 
 +
Změna práv pro certifikáty a pročištění
 +
chmod -v 0400 ca-key.pem key.pem server-key.pem
 +
chmod -v 0444 ca.pem server-cert.pem cert.pem
 +
 +
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
 +
 
 +
* https://medium.com/trabe/using-docker-engine-api-securely-584e0882158e
 +
* https://docs.docker.com/engine/security/protect-access/
  
 
== Otevření socketu ven ==
 
== Otevření socketu ven ==
 +
=== Override config ===
 
  sudo mkdir /etc/systemd/system/docker.service.d
 
  sudo mkdir /etc/systemd/system/docker.service.d
  touch /etc/systemd/system/docker.service.d/override.conf
+
  nano /etc/systemd/system/docker.service.d/override.conf
  
 +
Nastavení pro nešifrovaný otevření socketu, nedoporučeno
 +
[Service]
 +
ExecStart=
 +
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://IP_ADRESA:2735 --ipv6=false --tls=false
  
''/etc/systemd/system/docker.service.d/override.conf''
+
Nastavení pro šifrovaný otevření socketu, doporučeno
 
  [Service]
 
  [Service]
 
  ExecStart=
 
  ExecStart=
  ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://IP_ADRESA:2735 --ipv6=false --tls=false
+
  ExecStart=/usr/bin/dockerd -H fd:// -H tcp:///IP_ADRESA:2376 --ipv6=false --tlsverify --tlscacert=/CESTA/ca.pem --tlscert=/CESTA/server-cert.pem --tlskey=/CESTA/server-key.pem
 +
 
 +
* https://docs.docker.com/config/daemon/remote-access/
 +
* https://stackoverflow.com/questions/57996938/could-not-edit-systemd-service-file
 +
 
 +
=== Restartování ===
 +
sudo systemctl daemon-reload
 +
sudo systemctl restart docker.service
 +
 
 +
=== Povolení ufw ===
 +
  ufw allow 2375/tcp
 +
nebo
 +
  ufw allow 2376/tcp
  
== Restartování
 
systemctl restart docker.socket
 
  
pozn - zkusit upravit cofig
+
== Číštění ==
 +
Zjištění kolik a co zabírá místo na disku
 +
docker system df
 +
docker system df --verbose
 +
Zjištění kolik místa zabírají logy
 +
<nowiki>sudo du -ch $(docker inspect --format='{{.LogPath}}' $(docker ps -qa)) | sort -h</nowiki>
 +
<nowiki>sudo du -ch $(docker inspect --format='{{.LogPath}}' $(docker ps -qa)) | sort -h | sed 's/\/var\/lib\/docker\/containers\///' | awk '{if ($1 != "total") {split($NF, arr, "/"); id = arr[1]; print $1 " " $2 " " id} else {print $1 " " $2 " " $1}}' | while read size unit id; do if [ "$size" != "total" ]; then name=$(docker ps --format "{{.Names}}" --filter id=$id); echo "$size $unit $name"; else echo "$size $unit $id"; fi; done</nowiki>
 +
Mazání jednotlivých věcí
 +
docker container prune    - Smaže všechny zastavený kontejnéry
 +
docker image prune        - Smaže nepoužíváné images, který nemají tag
 +
docker image prune -a    - Smaže všechny nepoužívané images, který nemají kontejner
 +
docker volume prune      - Smaže nepoužívané volume
 +
docker builder prune      - Vymaže build cache Removes unused build cache.
 +
docker system prune      - Vymaže vše zmíněné (stopped containers, unused networks, dangling images, build cache)

Aktuální verze z 21. 7. 2025, 14:41

Instalace

Nastavení depositáře

sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /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
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

Instalace

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

Vytvoření self-signed certifikátu

Doporučuji si nachystat prostředí

mkdir /etc/ssl/certs/docker
chmod -v 0444 /etc/ssl/certs/docker
cd /etc/ssl/certs/docker

Vytváření server certifikát na 10 let (Měnit proměný který obsahují $)

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem

openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$LOCALHOST_DOMAIN" -sha256 -new -key server-key.pem -out server.csr

echo subjectAltName = DNS:$LOCALHOST_DOMAIN,DNS:$HOST_DOMAIN,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

Vytváření client certifikát na 10 let

openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

Změna práv pro certifikáty a pročištění

chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

Otevření socketu ven

Override config

sudo mkdir /etc/systemd/system/docker.service.d
nano /etc/systemd/system/docker.service.d/override.conf

Nastavení pro nešifrovaný otevření socketu, nedoporučeno

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://IP_ADRESA:2735 --ipv6=false --tls=false

Nastavení pro šifrovaný otevření socketu, doporučeno

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp:///IP_ADRESA:2376 --ipv6=false --tlsverify --tlscacert=/CESTA/ca.pem --tlscert=/CESTA/server-cert.pem --tlskey=/CESTA/server-key.pem

Restartování

sudo systemctl daemon-reload
sudo systemctl restart docker.service

Povolení ufw

 ufw allow 2375/tcp

nebo

 ufw allow 2376/tcp


Číštění

Zjištění kolik a co zabírá místo na disku

docker system df
docker system df --verbose

Zjištění kolik místa zabírají logy

sudo du -ch $(docker inspect --format='{{.LogPath}}' $(docker ps -qa)) | sort -h
sudo du -ch $(docker inspect --format='{{.LogPath}}' $(docker ps -qa)) | sort -h | sed 's/\/var\/lib\/docker\/containers\///' | awk '{if ($1 != "total") {split($NF, arr, "/"); id = arr[1]; print $1 " " $2 " " id} else {print $1 " " $2 " " $1}}' | while read size unit id; do if [ "$size" != "total" ]; then name=$(docker ps --format "{{.Names}}" --filter id=$id); echo "$size $unit $name"; else echo "$size $unit $id"; fi; done

Mazání jednotlivých věcí

docker container prune    - Smaže všechny zastavený kontejnéry
docker image prune        - Smaže nepoužíváné images, který nemají tag
docker image prune -a     - Smaže všechny nepoužívané images, který nemají kontejner
docker volume prune       - Smaže nepoužívané volume
docker builder prune      - Vymaže build cache Removes unused build cache.
docker system prune       - Vymaže vše zmíněné (stopped containers, unused networks, dangling images, build cache)