Ich muss gestehen. Ich hasse Docker. Mit meiner ganzen Seele. Dies ist die schlechteste Software, die ich in den letzten 10 Jahren gesehen habe.
Einerseits respektiere ich die gleichnamige Firma sehr. Jungs von Docker Inc. wirklich populäre Containerisierung. Jetzt wissen nur die Faulen nichts über sie. Auf der anderen Seite haben sie nichts grundlegend Neues erfunden - Containerisierung gab es seit mehr als 30 Jahren, als Docker „feuerte“ (ausgehend von Chroot, erinnern Sie sich an Gefängnisse und Zonen und schließlich an Namespaces und Gruppen).
Cool, dass Docker die Entwicklung um ein Vielfaches beschleunigt. Wenn Sie es richtig machen, dann auch ohne Qualitätsverlust. In jedem Fall ist Docker hier, Sie können nicht davon loskommen und müssen es verwenden.
Aber warum ruft dieses Produkt mit einem Wal-Logo so unterschiedliche Emotionen hervor? Im Folgenden werde ich die Momente auflisten, aus denen sie bombardieren. Es ist möglich, dass der Leser anderer Meinung ist oder im Gegenteil einige Dinge findet, von denen er nichts wusste und die er interessant finden würde.
Haftungsausschluss: Alles, was unten geschrieben steht, ist die persönliche Meinung des Autors und kann entweder die Realität widerspiegeln oder nicht. Das Material ist streng provokativ und das Hauptziel ist nicht, jemanden zu demütigen oder zu beleidigen, sondern die Menschen dazu zu bringen, sich auf den Kopf zu stellen und die Tiefen zu erkennen (c).
Docker und Firewall
Beim Erstellen von Containern in überbrückten Netzwerken fügt Docker dem System eigene Firewall-Regeln hinzu. Dies führt zu sehr interessanten Effekten. Erstens ist es einfach unmöglich, die Netzfilterketten zurückzusetzen (dies kann passieren, wenn Sie Ihre Regeln erneut anwenden), weil Danach sind die Docker-Container defekt und der Docker-Daemon muss neu gestartet werden. Außerdem geht die Bedeutung in den Dienstprogrammen zum Speichern / Wiederherstellen von iptables verloren, weil Tatsächlich speichern sie die Regeln, aber nicht die, die benötigt werden - Sie müssen ihre Ausgabe filtern. Eine weitere sehr interessante Aufgabe besteht darin, Docker und alles zu kombinieren, was versucht, die Firewall unabhängig zu verwalten - sei es ein VPN-Client / Server oder ein Konfigurationsverwaltungssystem, das sorgfältig sicherstellt, dass die Regeln dem entsprechen, was der Systemadministrator beschrieben hat.
Bis vor kurzem gab es keine Möglichkeit, den Netzwerkzugriff auf den Container über die Firewall zuverlässig und wiederholbar zu steuern, aber die Entwickler haben eine separate DOCKER-USER-Kette hinzugefügt, aber um ehrlich zu sein, macht dies keinen Sinn.
: , , — . , INPUT , NAT ( CentOS docker run ... -p XX:YY
)
, , , — docker- , , . , , .. docker'.
docker
docker- docker-bridge docker0, , - . (!) DNS . ( docker network create
docker-compose). . 172.16.0.0/12. , , . — . , bip , docker-compose , .. .
-p --publish, network host mode — 5% , … :-) - , docker NAT.
docker —
, , ? . — "" aufs, overlay2, .. . — . volume image, - . , overlay2 . docker info .
— ! - -. ( ) — . , -.
docker hub —
Docker Inc. — Docker Hub. , . , ( ). , ? , , - . — root' . , , . — , , .
— . , — . , - ( , ). — , . — — python, ruby, node.js. golang java — .
? — , — — registry -. ( , , , , k8s).
registry vs repository, bind mount vs volume ( docker run ... -v
, ), tag vs image name, EXPOSE vs expose vs ports, volumes (, ...). . , , .. . , , .. , .
— docker . . . . . systemd unit' (, — - ), bash.
, docker-compose. , . depends_on, — , .. ( docker-compose up) , . , ( 2.4 docker-compose).
docker-compose — 2.*
3.*
. . 3.* docker swarm . .
100500 docker docker-compose. . , - docker, Docker Inc. . "" docker.io docker-ce. , , , . Docker
, , docker Ubuntu snap. - . . , docker .
docker-compose — pip — . -, docker-compose ( ). -, python (! ), docker-compose (, — , , ). — — . ( — md5sum).
docker
docker — , . , docker agile- : . , . — , - root . , :
docker run --rm -it -v /:/rootfs ubuntu bash
, . , . (), .
, , bind mount ( -), . , , , , hot reload' . , — bind mount docker run ... -v ...
root . bind mount (docker run ... --mount ...
), , . ? , :-) — volume ( /var/lib/docker/volumes
, docker . , , CVE .
docker -
linux-kind . , .. docker namespaces cgroups . ? , Mac Windows docker Docker Desktop , volume ( , .. ). , .
docker
100% . iops, . , , — , . , , . — dentry
docker
docker json-file . /var/lib/containers/<hash>/<hash>-json.log
. , ? . " "
— journald, docker logs ( !?). — , Docker-EE, ?
— ? . , , .
docker
. , docker . , systemd-nspawn. — , Vagrant, VirtualBox lxc/lxd, . docker , kubernetes — containerd, .
: docker-compose — YAML docker-compose- ? docker swarm (kubernetes ) — . Docker Inc. ( ), (*) , . .
The END
? — docker — . , . . docker — . , , cri-o/podman/buildah, . FireCracker, ( ) ( ).
, .
(*) — docker-template, multi-stage docker build, buildkit , — .