Docker im Docker ohne privilegierten Modus

Docker im Docker ohne privilegierten Modus

Letztes Mal habe ich Docker in Docker für Läufer verwendet, aberes erfordert den privilegierten Modus

Datei erstellen:

version: '3.7'
services:
  runner:
    image: gitlab/gitlab-runner:latest
    volumes:
      - ./config:/etc/gitlab-runner
      - ./run:/var/run/
#      - /var/run/docker.sock:/var/run/docker.sock

  docker:
    image: docker:dind
    restart: always
    privileged: true # <-- security problems
    volumes:
      - ./run:/var/run/

docker buildIch habe einen persönlichen PC. Ich habe ein Gitlab-Team, das Skripte mit Gitlab CI ausführen muss docker-compose up. Ich möchte CI wirklich beschleunigen. Deshalb teile ich meineGastgeberDocker mitLäufer, jetzt haben sie einen Docker-Cache (Images usw.), und wenn ein Stage-Build-Image und ein anderes eins erfordert, geht das wirklich schnell.

Ich habe das gleiche Problem mit Jenkins. Ich muss den Host-Docker mit Worker-Knoten teilen.

Beim letzten Mal wollte ich den neuen Ansatz testen und Runner mit ihrem eigenen Docker ausführen. Dabei habe ich fast zwei wichtige Dinge nicht: - Ressourcenlimit (ich möchte 7 von 8 CPU-Kernen, 10 von 16 GB Speicher und einige HDD-Limits teilen) - Sicherheit

Wichtig ist hinzuzufügen: Ich habe keine CI-Skripte, die GPU, Netzwerkfähigkeiten, das Einbinden einiger Geräte usw. erfordern. Normalerweise sind sie einfach docker buildund docker push, manchmal muss ich Artefakte mit erfassen docker cp, das ist alles. Hauptfrage: Wie kann ichFühren Sie Docker in Docker ohne Root-Berechtigungen für den Hostcomputer aus?

Beides - Socket-Sharing oder privilegierter Modus geben Schwachstellen auf Host-Maschinen, und eine virtuelle Maschine (wie VirtualBox oder so etwas) ist langsam und schwer zu tun, auch möchte ich Ressourcen teilen, und will, dass DockerdürfenVerwenden Sie 10 von 16 GB, aber 10 GB sollten frei sein, wenn es nicht verwendet wird.

Ich habe einige nicht informative Fehler vom Dind-Container (vor dem Fehler), wenn ich ihn mit den üblichen Berechtigungen ausführe:

gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | Could not mount /sys/kernel/security.
gitlab-runner-docker | AppArmor detection and --privileged mode might break.

Welche Probleme werde ich haben, wenn ich versuche, Docker im Docker ohne privilegierten Modus auszuführen? Wie geht das?

Antwort1

nun, was den Lastenausgleich des RAM-Speichers betrifft, kann ich nicht anders, als einen Docker in Docker (dind) ohne Sudo-Berechtigungen auszuführen, indem Sie Ihren aktuellen Benutzer zur Docker-Gruppe hinzufügen.

Ich sehe die Sicherheit der gemeinsam genutzten Sockets nicht, da sie ihre Integrität verlieren, aber ich würde empfehlen, den Dind mit dem Parameter des Composers mit dem privilegierten Parameter zu instanziieren: true

verwandte Informationen