411 private links
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/sslpour 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 deTZ=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-mountdepuis l'hôte (via les volumes dans le dockerfile ?). Cf: un blog post
Donc la meilleure solution ? Ça dépend !
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
- 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
A great entry point into the RSS format
Selectors: * [attribute] > ~ +
With the part two about pseudo -classes and elements selectors. Examples used in development are explained 👍
How to use hexagonal grids. It is complete ! Wow well done.
Everything is here to create a game based on hexagons :)
| command | meaning |
|---|---|
| ${parameter:-defaultValue} | Get default shell variables value |
| ${parameter:=defaultValue} | Set default shell variables value |
| ${parameter:?"Error Message"} | Display an error message if parameter is not set |
| ${#var} | Find the length of the string |
| ${var%pattern} | Remove from shortest rear (end) pattern |
| ${var%%pattern} | Remove from longest rear (end) pattern |
| ${var:num1:num2} | Substring |
| ${var#pattern} | Remove from shortest front pattern |
| ${var##pattern} | Remove from longest front pattern |
| ${var/pattern/string} | Find and replace (only replace first occurrence) |
| ${var//pattern/string} | Find and replace all occurrences |
| ${!prefix*} | Expands to the names of variables whose names begin with prefix. |
| ${var,} | Convert first character to lowercase. |
| ${var,pattern} | Convert only if the pattern match |
| ${var,,} | Convert all characters to lowercase. |
| ${var,,pattern} | Convert only if the pattern match |
| ${var^} | Convert first character to uppercase. |
| ${var^pattern} | Convert only if pattern match |
| ${var^^} | Convert all character to uppercase.} |
| ${var^^pattern} | Convert only if pattern match |
Wow ! Charts are only created with HTML and CSS, making them very efficient
Construire un makefile pas à pas.
hello-world: init
@ echo "Hello, world"
Un Makefile est une collection de règles, chacune étant composée d'une cible, de pré-requis (ou pas) et d'une recette. Dans notre exemple précédent, hello-world est la cible et @ echo "Hello, world" est la recette de la règle. Elle spécifie un pré-requis: init .
Wow there is great explanations on Generators in javascript here !
OMG ! Someone did it !
Comment configurer :
- Une autorité de certification
- Des certificats serveur, pouvant être utilisés par un serveur voulant faire du TLS.
- Des certificats clients, signés par l’autorité de certification, me permettant donc en théorie de me connecter sur le serveur.
A guide to use and understand the context managers from the ground
Une série des meilleures pratiques pour la création d'API
La suite devrait arriver prochainement.
(shared by Arthur HOARO's links)