docker multi stage builds -...

25
Docker Multi Stage Builds Human Talks Grenoble octobre 2017 | @_crev_

Upload: others

Post on 04-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Docker Multi Stage Builds

Human Talks Grenoble octobre 2017 | @_crev_

Page 2: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Human Talks Grenoble octobre 2017 | @_crev_

Page 3: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

- Images plus légères

- Unique fichier de build

Human Talks Grenoble octobre 2017 | @_crev_

Page 4: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Pourquoi plus légères

Human Talks Grenoble octobre 2017 | @_crev_

Page 5: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

push, pull, run

Human Talks Grenoble octobre 2017 | @_crev_

Page 6: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

container != virtualisation légère

Human Talks Grenoble octobre 2017 | @_crev_

Page 7: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Étapes de fabrication :

Compilation des dépendances

Traitements intermédiaires

Image cible

Human Talks Grenoble octobre 2017 | @_crev_

Page 8: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Examples

Human Talks Grenoble octobre 2017 | @_crev_

Page 9: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json
Page 10: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Simple Docker

FROM golang

WORKDIR /go/src/appCOPY . .

RUN go-wrapper downloadRUN go-wrapper install

CMD ["go-wrapper", "run"]

737MB

Human Talks Grenoble octobre 2017 | @_crev_

Page 11: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Pattern Builder

FROM golang

WORKDIR /go/src/ht_docker_multi_stageCOPY . .

RUN go-wrapper download

CMD ["go", "build", "-v"]

FROM gcr.io/distroless/base

COPY ht_docker_multi_stage /CMD ["/ht_docker_multi_stage"]

Human Talks Grenoble octobre 2017 | @_crev_

Page 12: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Pattern Builder (2)

build: docker build -t ht_build_and_package-builder -f Dockerfile.build . docker run --rm -v $$PWD:/go/src/ht_docker_multi_stage \ ht_build_and_package-builder

17.5MB

Human Talks Grenoble octobre 2017 | @_crev_

Page 13: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Multi Stage

FROM golang as builder

WORKDIR /go/src/ht_docker_multi_stageCOPY . .

RUN go-wrapper downloadRUN go-wrapper install

FROM gcr.io/distroless/base

COPY --from=builder /go/bin/ht_docker_multi_stage /CMD ["/ht_docker_multi_stage"]

17.5MB

Human Talks Grenoble octobre 2017 | @_crev_

Page 14: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json
Page 15: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

NGinx

FROM nginx:1.13-alpineEXPOSE 80COPY conf/default.conf /etc/nginx/conf.d/default.confCOPY build/ /usr/share/nginx/html

Human Talks Grenoble octobre 2017 | @_crev_

Page 16: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

React build

FROM node:8-alpine as dependenciesWORKDIR /usr/src/appCOPY package.json yarn.lock /usr/src/app/RUN yarn install

FROM node:8-alpine as builderWORKDIR /usr/src/appCOPY . .COPY --from=dependencies /usr/src/app/node_modules /usr/src/app/node_modulesRUN yarn build

FROM nginx:1.13-alpineEXPOSE 80COPY conf/default.conf /etc/nginx/conf.d/default.confCOPY --from=builder /usr/src/app/build/ /usr/share/nginx/html

Human Talks Grenoble octobre 2017 | @_crev_

Page 17: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Sass build

FROM ruby:2-alpine3.6 as sassRUN apk add --no-cache --virtual build-dep build-base \ && gem install sass --no-doc \ && apk del build-dep && rm -rf /var/cache/apk/*COPY scss /usr/src/appWORKDIR /usr/src/appRUN sass bootstrap.scss > App.css

#...

FROM node:8-alpine as builderWORKDIR /usr/src/appCOPY . .COPY --from=dependencies /usr/src/app/node_modules /usr/src/app/node_modulesCOPY --from=sass /usr/src/app/App.css /usr/src/app/src/App.cssRUN yarn build

Human Talks Grenoble octobre 2017 | @_crev_

Page 18: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Limites

Human Talks Grenoble octobre 2017 | @_crev_

Page 19: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Limites

Pas de partage de stag�

Linter pas à jour

Docker >= 17.05

Human Talks Grenoble octobre 2017 | @_crev_

Page 20: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Limites

Pas de partage de stag�

Comment partager dependencie� entre container de dev et containerintermédiaire de prod ?

Partage de step au travers du cache docker ?

Génération des Dockerfile ?

Human Talks Grenoble octobre 2017 | @_crev_

Page 21: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Limites

Linter pas à jour$ docker run --rm -it --privileged -v $PWD:/root/ \ projectatomic/dockerfile-lint dockerfile_lint lint--------ERRORS---------

Line 1: -> FROM ruby:2-alpine3.6 as sassERROR: Invalid parameters for command..Reference -> https://docs.docker.com/engine/reference/builder/

Line 12: -> FROM node:8-alpine as dependenciesERROR: Invalid parameters for command..Reference -> https://docs.docker.com/engine/reference/builder/

Human Talks Grenoble octobre 2017 | @_crev_

Page 22: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Limites

Docker >= 17.05

Kubernetes < 1.8 docker <= 1.12

Human Talks Grenoble octobre 2017 | @_crev_

Page 23: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Avantages

Human Talks Grenoble octobre 2017 | @_crev_

Page 24: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

AvantagesToute la construction présente dans un unique �chier

Suppression d'outils de build externes (type Makefile )

docker build + docker run , that's all folks

Human Talks Grenoble octobre 2017 | @_crev_

Page 25: Docker Multi Stage Builds - log.winsos.netlog.winsos.net/2017/12/11/docker_multi_stage_build.pdfReact build FROM node:8-alpine as dependencies WORKDIR /usr/src/app COPY package.json

Thanks

Human Talks Grenoble octobre 2017 | @_crev_ | docker run --rm -it squarescale/ybrissaud