Benutzer-Werkzeuge

Webseiten-Werkzeuge


docker

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
docker [2025/03/04 17:31]
jango [Volumes]
docker [2025/06/22 03:46] (aktuell)
jango [Registry]
Zeile 1: Zeile 1:
-Docker ist eine Open-Source-Plattform zur [[container|Containerisierung]] von Anwendungen. Es ermöglicht die ErstellungBereitstellung und Ausführung von Anwendungen in isolierten Containern, die unabhängig von der zugrunde liegenden Infrastruktur sind. Docker bietet eine standardisierte Methode zum Verpacken von Software und allen damit verbundenen Abhängigkeiten in ein einzelnes Paket, das als Docker-Image bezeichnet wird. Diese Images können dann auf jedem System ausgeführt werden, das Docker unterstützt.+Docker ist eine Open-Source-Plattform zur [[container|Containerisierung]] von Anwendungen. Es ermöglicht das ErstellenBereitstellen und Ausführen von Anwendungen in isolierten Containern, die alle notwendigen Abhängigkeiten enthalten und plattformunabhängig betrieben werden können.
  
-Docker basiert auf der Linux-Containertechnologie ([[LXC]]) und nutzt die Funktionen des Linux-Kernels, um isolierte Umgebungen, sogenannte Container, zu erstellenJeder Container enthält eine eigenständige und isolierte Umgebung, in der eine Anwendung und ihre Abhängigkeiten ausgeführt werden können. Die Isolation sorgt dafürdass eine Anwendung und ihre Abhängigkeiten unabhängig von anderen Containern und dem Hostsystem ausgeführt werden können, was zu einer besseren Portabilität und Skalierbarkeit führt.+Ursprünglich auf LXC basierend, nutzt Docker heute seine eigene Laufzeit (runc) und baut auf Funktionen des Linux-Kernels wie Namespaces und Control Groups auf, um die Isolation der Container sicherzustellenDiese Architektur sorgt für hohe Portabilitäteffiziente Ressourcennutzung und einfache Skalierbarkeit von Anwendungen.
  
 Siehe auch [[kubernetes|Kubernetes]]. Siehe auch [[kubernetes|Kubernetes]].
Zeile 28: Zeile 28:
   * ENTRYPOINT: Die ENTRYPOINT-Anweisung in einem Dockerfile definiert den Standardbefehl oder das Skript, das beim Starten eines Containers ausgeführt wird. Der Befehl oder das Skript wird als ausführbare Datei innerhalb des Containers behandelt.   * ENTRYPOINT: Die ENTRYPOINT-Anweisung in einem Dockerfile definiert den Standardbefehl oder das Skript, das beim Starten eines Containers ausgeführt wird. Der Befehl oder das Skript wird als ausführbare Datei innerhalb des Containers behandelt.
   * VOLUME: Die VOLUME-Anweisung in einem Dockerfile wird verwendet, um ein oder mehrere Volumes im Container zu definieren. Ein Volume ist ein Speicherbereich, der von einem Container genutzt wird, um Daten persistent zu speichern, auch wenn der Container beendet oder neu gestartet wird.   * VOLUME: Die VOLUME-Anweisung in einem Dockerfile wird verwendet, um ein oder mehrere Volumes im Container zu definieren. Ein Volume ist ein Speicherbereich, der von einem Container genutzt wird, um Daten persistent zu speichern, auch wenn der Container beendet oder neu gestartet wird.
 +
 +<code>
 +# Ubuntu with SSH and root login
 +FROM ubuntu
 +
 +RUN apt-get update && apt-get install -y openssh-server
 +RUN mkdir /var/run/sshd
 +
 +RUN useradd -ms /bin/bash newuser
 +RUN echo "newuser:password" | chpasswd
 +
 +#RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
 +
 +CMD ["/usr/sbin/sshd", "-D"]
 +</code>
  
 <code> <code>
Zeile 144: Zeile 159:
 =====LVM===== =====LVM=====
  
 +Vor der Installation bzw Inbbetriebnahme von Docker das [[LVM]] anlegen.
  
 +<code>
 +sudo mount /dev/docker_vg_lv0 /var/lib/docker
 +</code>
 +
 +In der fstab
 +
 +<code>
 +/dev/docker-vg/lv0 /var/lib/docker ext4 defaults 0 2
 +</code>
 =====Netzwerke===== =====Netzwerke=====
  
Zeile 151: Zeile 176:
 ^Name^Beschreibung^ ^Name^Beschreibung^
 |none|todo| |none|todo|
-|Host|Das Host-Netzwerkmodell verwendet das Netzwerk des Docker-Hosts direkt für die Container. Container, die das Host-Netzwerk verwenden, haben Zugriff auf alle Netzwerkressourcen des Hosts, einschließlich der Netzwerkschnittstellen und Ports. Dieses Modell bietet eine maximale Leistung, kann aber die Isolation zwischen Containern beeinträchtigen.| +|[[https://docs.docker.com/engine/network/drivers/host/|Host]]|Das Host-Netzwerkmodell verwendet das Netzwerk des Docker-Hosts direkt für die Container. Container, die das Host-Netzwerk verwenden, haben Zugriff auf alle Netzwerkressourcen des Hosts, einschließlich der Netzwerkschnittstellen und Ports. Dieses Modell bietet eine maximale Leistung, kann aber die Isolation zwischen Containern beeinträchtigen.| 
-|Bridge|Ein Bridge-Netzwerk ist das Standardnetzwerkmodell von Docker. Es erstellt ein isoliertes Netzwerk für Container auf dem Docker-Host und ermöglicht die Kommunikation zwischen Containern über einen gemeinsamen Bridge-Dienst. Bridge-Netzwerke sind standardmäßig in Docker aktiviert und bieten eine einfache Möglichkeit, Container zu verbinden.| +|[[https://docs.docker.com/engine/network/drivers/bridge/|Bridge]]|Ein Bridge-Netzwerk ist das Standardnetzwerkmodell von Docker. Es erstellt ein isoliertes Netzwerk für Container auf dem Docker-Host und ermöglicht die Kommunikation zwischen Containern über einen gemeinsamen Bridge-Dienst. Bridge-Netzwerke sind standardmäßig in Docker aktiviert und bieten eine einfache Möglichkeit, Container zu verbinden.| 
-|Overlay|Overlay-Netzwerke werden verwendet, um Container über mehrere Docker-Hosts hinweg zu verbinden. Sie ermöglichen es Containern, über Host-Grenzen hinweg zu kommunizieren und eine skalierbare, verteilte Anwendung zu erstellen. Overlay-Netzwerke verwenden spezielle Protokolle wie VXLAN oder IPSec, um Container über das gesamte Cluster hinweg zu vernetzen.| +|[[https://docs.docker.com/engine/network/drivers/overlay/|Overlay]]|Overlay-Netzwerke werden verwendet, um Container über mehrere Docker-Hosts hinweg zu verbinden. Sie ermöglichen es Containern, über Host-Grenzen hinweg zu kommunizieren und eine skalierbare, verteilte Anwendung zu erstellen. Overlay-Netzwerke verwenden spezielle Protokolle wie VXLAN oder IPSec, um Container über das gesamte Cluster hinweg zu vernetzen.| 
-|MacVlan|Das macvlan Netzwerkmodell ermöglicht es Containern, eine eigene MAC-Adresse zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige MAC-Adresse, die von der des Hosts abweichen kann. Dies ermöglicht es Containern, direkt auf das physische Netzwerk zuzugreifen und mit anderen Geräten zu kommunizieren, als ob sie direkt an das physische Netzwerk angeschlossen wären.| +|[[https://docs.docker.com/engine/network/drivers/macvlan/|MacVlan]]|Das macvlan Netzwerkmodell ermöglicht es Containern, eine eigene MAC-Adresse zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige MAC-Adresse, die von der des Hosts abweichen kann. Dies ermöglicht es Containern, direkt auf das physische Netzwerk zuzugreifen und mit anderen Geräten zu kommunizieren, als ob sie direkt an das physische Netzwerk angeschlossen wären.| 
-|IpVlan|Das ipvlan Netzwerkmodell ist ähnlich wie das macvlan Modell, jedoch auf IP-Ebene. Es ermöglicht es Containern, eigene IP-Adressen zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige IP-Adresse, die von der des Hosts abweichen kann.|+|[[https://docs.docker.com/engine/network/drivers/ipvlan/|IpVlan]]|Das ipvlan Netzwerkmodell ist ähnlich wie das macvlan Modell, jedoch auf IP-Ebene. Es ermöglicht es Containern, eigene IP-Adressen zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige IP-Adresse, die von der des Hosts abweichen kann.|
  
 Mit  Mit 
Zeile 165: Zeile 190:
 </code> </code>
  
-kann man ein neues erstellen. Ein Container Interface an ein Netzwerk binden kann man mit dem Parameter --network.+kann man ein neues erstellen. Ein macvlan mit 
 + 
 +<code bash> 
 +network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macvlan_net 
 +</code> 
 + 
 +Ein Container Interface an ein Netzwerk binden kann man mit dem Parameter --network.
  
 <code> <code>
 docker run -dit --name test --network mynetwork ubuntu docker run -dit --name test --network mynetwork ubuntu
 +
 +docker run -dit --name test --network macvlan_network --ip=192.168.0.2 ubuntu
 </code> </code>
  
Zeile 184: Zeile 217:
  
 Docker [[https://docs.docker.com/engine/install/|Installation]]. Docker [[https://docs.docker.com/engine/install/|Installation]].
 +
 +====Installer Script====
 +Die einfachste Weise ist das Installer Script von der Docker Website.
  
 <code> <code>
 curl -fsSL https://get.docker.com -o get-docker.sh curl -fsSL https://get.docker.com -o get-docker.sh
 sh get-docker.sh sh get-docker.sh
 +usermod -aG docker <my-user>
 </code> </code>
  
-====Ubuntu====+====Ubuntu Repository==== 
 + 
 +Es gibt zwei verschiedene Paketquellen (Repositories) für Docker unter Ubuntu. Im offiziellen Ubuntu Repository ist das Paket docker.io erhältlich. Das ist aber oft veraltet und hinkt stark hinterher. Ausserdem wird es nicht direkt von Docker Inc. gepflegt und enthält nur Basis-Docker, keine Compose v2, kein Buildx.
  
 <code> <code>
-# update packages +sudo apt install docker.io 
-sudo apt-get update+</code>
  
 +====Docker Repository====
 +
 +Dann gibt es noch das offizielle Docker Repository docker-ce (Community Edition). Dieses muss man manuell einbinden (GPG-Key, APT-Repo). Es wird allerdings von Docker inc. selbst gepflegt, ist immer die aktuellste Version und alle Plugins bekommt man auch.
 +
 +<code>
 # add pgp key for signed docker repository # add pgp key for signed docker repository
 sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Zeile 209: Zeile 253:
 </code> </code>
  
-====WSL2==== 
- 
-<code> 
-# Install Docker 
-curl -fsSL https://get.docker.com -o get-docker.sh 
-sudo sh get-docker.sh 
  
-sudo usermod -aG docker $USER 
- 
-# Install Docker Compose v2 
-sudo apt-get update && sudo apt-get install docker-compose-plugin 
- 
-# Sanity check that both tools were installed successfully 
-docker --version 
-docker compose version 
- 
-# Using Ubuntu 22.04 or Debian 10 / 11? You need to do 1 extra step for iptables 
-# compatibility, you'll want to choose option (1) from the prompt to use iptables-legacy. 
-sudo update-alternatives --config iptables 
-</code> 
 =====Docker Daemon===== =====Docker Daemon=====
  
Zeile 249: Zeile 274:
 </code> </code>
  
 +=====Registry=====
 +
 +Run a local registry: Quick Version
 +
 +<code>
 +docker run -d -p 5000:5000 --restart always --name registry registry:2
 +</code>
 +
 +Now, use it from within Docker:
 +
 +<code>
 +docker pull ubuntu
 +docker tag ubuntu localhost:5000/ubuntu
 +docker push localhost:5000/ubuntu
 +</code>
 +See also [[https://hub.docker.com/_/registry]]
 =====Usage===== =====Usage=====
  
Zeile 339: Zeile 380:
 =====Links===== =====Links=====
  
 +  * [[https://labs.play-with-docker.com/|Play with Docker]]
   * [[https://www.redhat.com/de/topics/containers/what-is-docker|RedHat - Was ist Docker]]   * [[https://www.redhat.com/de/topics/containers/what-is-docker|RedHat - Was ist Docker]]
   * [[https://www.youtube.com/playlist?list=PLYxzS__5yYQlzv9_z1eZmZY8dzMlQFbaH|First steps - Youtube Playlist]]   * [[https://www.youtube.com/playlist?list=PLYxzS__5yYQlzv9_z1eZmZY8dzMlQFbaH|First steps - Youtube Playlist]]
docker.1741105868.txt.gz · Zuletzt geändert: 2025/03/04 17:31 von jango