Daily Shaarli

All links of one day in a single page.

January 6, 2021

enix.io - Chérie, j'ai rétréci Docker - part 3/3

Dans un context avec de nombreux conteneurs, il vaut mieux partager les ressources que de créer des binaires statiques. Pour cela, toutes les images doivent partir de la même image de base.
Les binaires statiques ont un avantage : ils vont être utilisés dans des environnements hétérogènes.

Nettoyage de binaires et compression:

  • suppression des symboles de debug avec l'outil strip
  • mettre les assets en dehors des conteneurs 🤔
  • des outils exotiques:
    • dockerSlim qui semble supprimer les fichier inutilisés
    • Distroless si la taille compte vraiment, sinon Alpine fonctionne très bien :D
    • Bazel pour les gros builds, mais vraiment très gros. C'est un outil complexe !
    • Nix (le package manager) en combinaison avec Nixery: Nixery, c’est un registre de conteneurs “magique” : il génère à la volée des manifests d’images de conteneurs qui référencent des layers qui correspondent aux objets du Nix store.
  • Récupérer les certificats SSL des autorités: COPY --from=alpine /etc/ssl /etc/ssl pour copier le dossier SSL de l'image Alpine
  • Récupérer les fichiers de timezone: COPY --from=debian /usr/share/zoneinfo /usr/share/zoneinfo; puis vérifier avec un retour de TZ=Europe/Paris date
  • Pour les fichiers concernant les UID/GID, notamment pour exécuter des apps de bureau dans des conteneurs, on peut les génßerer localement, ou dans le conteneur, ou faire un bind-mount depuis l'hôte (via les volumes dans le dockerfile ?). Cf: un blog post

Donc la meilleure solution ? Ça dépend !

enix.io - Chérie, j'ai rétréci Docker - part 2/3

Sur Go et ses binaires statiques
Et Alpine Linux ❤️
→ 5Mo, avec un environnement Unix GNU/Linux cependant complet
→ son package manager rapide: dpk
→ Alpine utilise musl à la place de GNU C en tant que bibliothèque C standard, et comme ces deux bibliothèques ne sont pas compatibles, il faut compiler le binaire avec musl: soit avec des images officielles qui ont des tags :alpine, soit directement depuis l'image Alpine.

Exemple de dockerfile :

FROM alpine
RUN apk add build-base
COPY hello.c .
RUN gcc -o hello hello.c

FROM alpine
COPY --from=0 hello .
CMD ["./hello"]

Pour java, il faut mettre la main dans le cambouis.

Pour les langages interprétés, ça passe oklm... sauf si des bibliothèques externes sont utilisées: soit le build est très long, soit on cherche le compromis avec des images taggés :slim. Puis mettre les mains dans le cambouis pour savoir laquelle d'Alpine ou celle taggée :slim produit la plus petite image.

Pour Rust ❤️ , il y a rust:alpine et les binaires s'exécutent bien avec alpine. La documentation renseigne sur la génération de binaires statiques

enix.io - Chérie, j'ai rétréci Docker - part 1/3
  • Utiliser les multi-stage builds pour générer les artefacts dans l'environnement que l'ont veut, puis utiliser la dernière stage pour build l'image.
  • Utiliser FROM scratch et construire des binaires statiques au besoin
[Qu’es aquò ?] Le protocole ESNI · Pofilo.fr

TL;DR Le SNI (Server Name Indication) est utilisé pour que le serveur envoie le bon certificat TLS. Le ESNI est la version chiffrée du SNI et se passe avant le handshake. La clé publique du serveur est stockée dans un enregistrement DNS, qui est envoyée en même temps que l'adresse IP.

RSS Tutorial

A great entry point into the RSS format

Note: expérience utilisateur de https://www.messenger.com/privacy

Sur le site de l'application Messenger, on ne peut pas scroll avec Firefox (et mes extensions?) une fois que la page est totalement chargée. WTF ?!

Free Information Technology Research Library of White Papers, Magazines, Reports, and eBooks

All these ebooks or documents at 0$