SlideShare une entreprise Scribd logo
1  sur  27
Optimiser le
build des
images avec
BuildKit
D’abord,
t’es qui ?
Julien CROUZET aka “Poulet”
Señor Architech @ eTF1
Developer Golang, Node.js, C, python, etc.
MAIS PAS JAVA
Mais aussi hipster devops, tahu ?
Fun Fact !
BuildKit ?
BuildKit ?
• Brique issue de Moby Project (from Docker)
https://mobyproject.org/
• Permet de construire des images en respectant
le format Dockerfile
• Inclus (opt-in) dans Docker 18.09 :
{"features":{"buildkit": true}}
export DOCKER_BUILDKIT=1
BuildKit ?
• Testable dès aujourd’hui dans docker :
Concurrent
builds
• Le parsing et l’exécution des Dockerfile sont
désormais inversés :
AVAN
T
APRE
S
Concurrent
builds
• Ce qui permet de simplifier l’arbre de décision :
FROM …
RUN …
RUN …
FROM …
RUN …
FROM …
RUN …
CMD …
FROM …
RUN …
RUN …
FROM …
RUN …
CMD …
Concurrent
builds
• Et/ou de l’exécuter de manière concurrente :
FROM …
RUN …
RUN …
FROM …
RUN …
FROM …
RUN …
CMD …
FROM …
RUN …
RUN …
FROM …
RUN …
FROM …
RUN …
CMD …
Concurrent
builds
Light weighted
build context
• Sans BuildKit, docker build génère un fichier .tar
contenant l’ensemble du répertoire courant
Ce fichier .tar est ensuite envoyé via HTTP POST au
docker engine pour exécuter le build
• Cette opération peut être longue dans le cas de
projets volumineux
Des fichiers inutiles peuvent être transférés
Light weighted
build context
• Avec BuildKit, cette opération n’est plus nécéssaire,
désormais les builds sont gérés dans le cadre de
sessions et le contenu n’est envoyé que si nécessaire
Client Engine
HTTP/1.1 POST /build —data context.tar
LEGACY WORKFLOW
Light weighted
build context
Client Engine
HTTP/1.1 POST /build
NEW WORKFLOW
HTTP/1.1 POST /session
gRPC read(Dockerfile)
gRPC diff(/go/github.com/project)
Light weighted
build context
LLB / Frontends
• Le building d’images a été séparé en deux niveaux :
•LLB: Low-Level Builder, un format binaire
intermédiaire qui permet, entre autres, de créer de
vrais graphes de dépendances.
•Les Frontends, les composants qui prennent en
entrée un format lisible comme un Dockerfile, pour
le convertir en LLB.
LLB / Frontends
• LLB :
• Permet une exécution efficiente
• Permet une meilleure gestion du cache
• Laisse le choix sur l’implémentation du builder
(https://github.com/genuinetools/img)
LLB / Frontends
• Frontend :
• Permet de créer des formats/syntaxes
• Distribué sous forme d’image
• Exécuté dans un conteneur (modèle Sandbox)
New Docker
frontends
• Images fournies par Docker :
https://hub.docker.com/r/docker/dockerfile/tags/
• Header sous la forme :
#syntax=image:tag
=> #syntax=docker/dockerfile:1
• Nouvelles fonctionnalités livrées sous :
docker/dockerfile:experimental
Context
mounts
• Permet d’utiliser un montage de répertoire,
directement lors du build
• Moins de layers
• Builds plus rapides
Context
mounts
#syntax=docker/dockerfile:1
FROM alpine
COPY ./archive.tgz /files/
RUN tar xfz /files/archive.tgz
RUN rm -f /files/archive.tgz
CMD /files/start.sh
LEGACY
#syntax=docker/dockerfile:experimental
FROM alpine
RUN 
—mount=target=./files 
tar xfz /files/archive.tgz
CMD /files/start.sh
NEW FRONTEND
Context
mounts
Cache
mounts
• Docker utilise un nouveau type de stockage,
le Build cache
• Les cache mounts permettent d’utiliser
directement ce stockage pour des builds encore
plus rapide
• Permet de mutualiser le cache entre plusieurs
instances d’un outil de CI/CD
Cache
mounts
# syntax = docker/dockerfile:experimental
FROM golang
COPY ...
RUN --mount=type=cache,target=/root/.cache/go-build 
go build ...
FROM alpine
RUN --mount=type=cache,target=/var/cache/apk 
apk add gcc g++ make
FROM node:alpine
COPY ...
RUN --mount=type=cache,target=/root/.npm 
npm install
Cache
mounts
Mais
aussi …
# syntax = docker/dockerfile:experimental
FROM ...
RUN --mount=type=ssh ssh -T git@github.com
## $> DOCKER_BUILDKIT=1 docker build —ssh default -t test .
## ...
## Hi jucrouzet! You've successfully authenticated, but GitHub does not provide shell access.
SSH FORWARDING
Mais
aussi …
# syntax = docker/dockerfile:experimental
FROM mesosphere/aws-cli
RUN 
—mount=type=secret,id=aws,target=/root/.aws/credentials 
aws s3 cp s3://bucket-files/data.tgz .
## $> DOCKER_BUILDKIT=1 docker build 
--secret id=aws,src=$HOME/.aws/credentials 
-t test .
-t test .
## ...
## Hi jucrouzet! You've successfully authenticated, but GitHub does not provide shell access.
SECRETS
That’s all
folks.
Merci !
Des questions, remarques, tomates
?
=> Let’s go
=> Sinon tout à l’heure, autour
d’une bière :)
linkedin.com/in/jucrouzet

Contenu connexe

Tendances

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 

Tendances (20)

Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016Workshop mesos docker devoxx fr 2016
Workshop mesos docker devoxx fr 2016
 
Docker - YaJUG
Docker  - YaJUGDocker  - YaJUG
Docker - YaJUG
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
Git développez autrement
Git développez autrementGit développez autrement
Git développez autrement
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Intro to docker
Intro to dockerIntro to docker
Intro to docker
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Cedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure DevopsCedric leblond migrer jenkins AWS vers Azure Devops
Cedric leblond migrer jenkins AWS vers Azure Devops
 
Docker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatiqueDocker - un outil pour faciliter le développement et le déploiement informatique
Docker - un outil pour faciliter le développement et le déploiement informatique
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Drush make driven development
Drush make driven developmentDrush make driven development
Drush make driven development
 
Ansible et Jenkins
Ansible et JenkinsAnsible et Jenkins
Ansible et Jenkins
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 

Similaire à [Meetup] Optimiser ses builds Docker avec BuildKit.

formation_dockerhscv jh sjsjx jhxavcjhvdcjhvajhsdvc
formation_dockerhscv jh   sjsjx jhxavcjhvdcjhvajhsdvcformation_dockerhscv jh   sjsjx jhxavcjhvdcjhvajhsdvc
formation_dockerhscv jh sjsjx jhxavcjhvdcjhvajhsdvc
hichamelhirch
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
AbdellahELMAMOUN
 

Similaire à [Meetup] Optimiser ses builds Docker avec BuildKit. (20)

Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Geek Time Mars 2017 : Workshop Docker
Geek Time Mars 2017 : Workshop DockerGeek Time Mars 2017 : Workshop Docker
Geek Time Mars 2017 : Workshop Docker
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdf
 
docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyug
 
What is Docker
What is Docker What is Docker
What is Docker
 
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
709469716-Docker-Intro.pptx709469716-Docker-Intro.pptx
 
formation_dockerhscv jh sjsjx jhxavcjhvdcjhvajhsdvc
formation_dockerhscv jh   sjsjx jhxavcjhvdcjhvajhsdvcformation_dockerhscv jh   sjsjx jhxavcjhvdcjhvajhsdvc
formation_dockerhscv jh sjsjx jhxavcjhvdcjhvajhsdvc
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
DevCon 3 : Containérisation d’applications
DevCon 3 : Containérisation d’applicationsDevCon 3 : Containérisation d’applications
DevCon 3 : Containérisation d’applications
 
A la découverte de docker
A la découverte de dockerA la découverte de docker
A la découverte de docker
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Dev ops - Contiuous delivery
Dev ops - Contiuous deliveryDev ops - Contiuous delivery
Dev ops - Contiuous delivery
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'e...
 
Kit de Developpement Synolia
Kit de Developpement SynoliaKit de Developpement Synolia
Kit de Developpement Synolia
 
Gab2015 Jean-Marie Crommen Docker sur Azure
Gab2015 Jean-Marie Crommen Docker sur AzureGab2015 Jean-Marie Crommen Docker sur Azure
Gab2015 Jean-Marie Crommen Docker sur Azure
 
Universitélang scala tools
Universitélang scala toolsUniversitélang scala tools
Universitélang scala tools
 
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 

[Meetup] Optimiser ses builds Docker avec BuildKit.

  • 2. D’abord, t’es qui ? Julien CROUZET aka “Poulet” Señor Architech @ eTF1 Developer Golang, Node.js, C, python, etc. MAIS PAS JAVA Mais aussi hipster devops, tahu ?
  • 5. BuildKit ? • Brique issue de Moby Project (from Docker) https://mobyproject.org/ • Permet de construire des images en respectant le format Dockerfile • Inclus (opt-in) dans Docker 18.09 : {"features":{"buildkit": true}} export DOCKER_BUILDKIT=1
  • 6. BuildKit ? • Testable dès aujourd’hui dans docker :
  • 7. Concurrent builds • Le parsing et l’exécution des Dockerfile sont désormais inversés : AVAN T APRE S
  • 8. Concurrent builds • Ce qui permet de simplifier l’arbre de décision : FROM … RUN … RUN … FROM … RUN … FROM … RUN … CMD … FROM … RUN … RUN … FROM … RUN … CMD …
  • 9. Concurrent builds • Et/ou de l’exécuter de manière concurrente : FROM … RUN … RUN … FROM … RUN … FROM … RUN … CMD … FROM … RUN … RUN … FROM … RUN … FROM … RUN … CMD …
  • 11. Light weighted build context • Sans BuildKit, docker build génère un fichier .tar contenant l’ensemble du répertoire courant Ce fichier .tar est ensuite envoyé via HTTP POST au docker engine pour exécuter le build • Cette opération peut être longue dans le cas de projets volumineux Des fichiers inutiles peuvent être transférés
  • 12. Light weighted build context • Avec BuildKit, cette opération n’est plus nécéssaire, désormais les builds sont gérés dans le cadre de sessions et le contenu n’est envoyé que si nécessaire Client Engine HTTP/1.1 POST /build —data context.tar LEGACY WORKFLOW
  • 13. Light weighted build context Client Engine HTTP/1.1 POST /build NEW WORKFLOW HTTP/1.1 POST /session gRPC read(Dockerfile) gRPC diff(/go/github.com/project)
  • 15. LLB / Frontends • Le building d’images a été séparé en deux niveaux : •LLB: Low-Level Builder, un format binaire intermédiaire qui permet, entre autres, de créer de vrais graphes de dépendances. •Les Frontends, les composants qui prennent en entrée un format lisible comme un Dockerfile, pour le convertir en LLB.
  • 16. LLB / Frontends • LLB : • Permet une exécution efficiente • Permet une meilleure gestion du cache • Laisse le choix sur l’implémentation du builder (https://github.com/genuinetools/img)
  • 17. LLB / Frontends • Frontend : • Permet de créer des formats/syntaxes • Distribué sous forme d’image • Exécuté dans un conteneur (modèle Sandbox)
  • 18. New Docker frontends • Images fournies par Docker : https://hub.docker.com/r/docker/dockerfile/tags/ • Header sous la forme : #syntax=image:tag => #syntax=docker/dockerfile:1 • Nouvelles fonctionnalités livrées sous : docker/dockerfile:experimental
  • 19. Context mounts • Permet d’utiliser un montage de répertoire, directement lors du build • Moins de layers • Builds plus rapides
  • 20. Context mounts #syntax=docker/dockerfile:1 FROM alpine COPY ./archive.tgz /files/ RUN tar xfz /files/archive.tgz RUN rm -f /files/archive.tgz CMD /files/start.sh LEGACY #syntax=docker/dockerfile:experimental FROM alpine RUN —mount=target=./files tar xfz /files/archive.tgz CMD /files/start.sh NEW FRONTEND
  • 22. Cache mounts • Docker utilise un nouveau type de stockage, le Build cache • Les cache mounts permettent d’utiliser directement ce stockage pour des builds encore plus rapide • Permet de mutualiser le cache entre plusieurs instances d’un outil de CI/CD
  • 23. Cache mounts # syntax = docker/dockerfile:experimental FROM golang COPY ... RUN --mount=type=cache,target=/root/.cache/go-build go build ... FROM alpine RUN --mount=type=cache,target=/var/cache/apk apk add gcc g++ make FROM node:alpine COPY ... RUN --mount=type=cache,target=/root/.npm npm install
  • 25. Mais aussi … # syntax = docker/dockerfile:experimental FROM ... RUN --mount=type=ssh ssh -T git@github.com ## $> DOCKER_BUILDKIT=1 docker build —ssh default -t test . ## ... ## Hi jucrouzet! You've successfully authenticated, but GitHub does not provide shell access. SSH FORWARDING
  • 26. Mais aussi … # syntax = docker/dockerfile:experimental FROM mesosphere/aws-cli RUN —mount=type=secret,id=aws,target=/root/.aws/credentials aws s3 cp s3://bucket-files/data.tgz . ## $> DOCKER_BUILDKIT=1 docker build --secret id=aws,src=$HOME/.aws/credentials -t test . -t test . ## ... ## Hi jucrouzet! You've successfully authenticated, but GitHub does not provide shell access. SECRETS
  • 27. That’s all folks. Merci ! Des questions, remarques, tomates ? => Let’s go => Sinon tout à l’heure, autour d’une bière :) linkedin.com/in/jucrouzet