Eu tenho que confessar. Eu odeio estivador. Com toda a minha alma. Este é o pior software que eu já vi nos últimos 10 anos.
Por um lado, eu realmente respeito a empresa com o mesmo nome. Caras de Docker Inc. containerização realmente popularizada. Agora, apenas o preguiçoso não sabe sobre ela. Por outro lado, eles não inventaram nada fundamentalmente novo - a conteinerização existia há mais de 30 anos no momento em que o Docker "disparou" (a partir do chroot, lembre-se de cadeias e zonas e, finalmente, namespaces e cgroups).
Legal que o docker realmente acelera o desenvolvimento várias vezes. Se você conduzi-lo corretamente, mesmo sem perda de qualidade. De qualquer forma, a janela de encaixe está aqui, você não pode se afastar dela e precisa usá-la.
Mas por que esse produto com o logotipo da baleia evoca emoções tão diversas? Abaixo vou listar aqueles momentos a partir dos quais eles bombardeiam. É possível que o leitor discorde ou, pelo contrário, encontre algumas coisas que ele não sabia e que acharia interessantes.
Isenção de responsabilidade: tudo o que está escrito abaixo é da opinião pessoal do autor e pode refletir a realidade ou não. O material é estritamente provocativo por natureza e o objetivo principal não é humilhar ou ofender ninguém, mas fazer as pessoas virar a cabeça e perceber as profundezas (c).
janela de encaixe e firewall
Ao criar contêineres em redes com ponte, o docker adiciona suas próprias regras de firewall no sistema. Isso leva a efeitos muito interessantes. Em primeiro lugar, torna-se impossível redefinir as cadeias de filtros de rede (isso pode acontecer quando você reaplicar suas regras), porque depois disso, os contêineres do docker são quebrados e o daemon do docker deve ser reiniciado. Além disso, o significado nos utilitários iptables-save / restore é perdido, porque de fato, eles salvam as regras, mas não as que precisam - você precisa filtrar a saída deles. Outra tarefa muito interessante é combinar o docker e qualquer coisa que tente gerenciar independentemente o firewall - seja um cliente / servidor VPN ou um sistema de gerenciamento de configuração que garanta que as regras correspondam ao que o administrador do sistema descreveu.
Até recentemente, não havia como controlar de maneira confiável e repetida o acesso à rede do contêiner por meio do firewall, mas os desenvolvedores adicionaram uma cadeia DOCKER-USER separada, mas, para ser sincero, não faz sentido.
: , , — . , 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 , — .