34
TechNote #3 Pierre-Olivier Mercier Docker hands-on

TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer [email protected] COPY --from=0

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

TechNote #3

Pierre-Olivier Mercier

Docker hands-on

Page 2: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Docker ?

Page 3: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Démos

Docker, c'est quoi ?

Page 4: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les différents composants de Docker

Client Dockerligne de commande, ...

Docker engine/containerd

libcontainer/runcAPI

Page 5: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Images vs. containers

Debian

Ubuntu

Images Conteneurs

Red Hat

Page 6: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Dissection du sucre sur l’URL de l’image

$ docker run hello-world

Page 7: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

==

Dissection du sucre sur l’URL de l’image

$ docker run hello-world

$ docker run registry-1.docker.io/library/hello-world

Page 8: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

==

Dissection du sucre sur l’URL de l’image

$ docker run hello-world

$ docker run registry-1.docker.io/library/hello-world

https://registry-1.docker.io/v2/$REPO/manifests/latest

Page 9: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

==

Dissection du sucre sur l’URL de l’image

$ docker run hello-world

$ docker run registry.qarnot.net/qrad-v3

$ docker run registry-1.docker.io/library/hello-world

https://registry-1.docker.io/v2/$REPO/manifests/latest

Page 10: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Démos

Un manifest ?

Page 11: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les différents composants de Docker

Client Dockerligne de commande, ...

Docker engine/containerd

libcontainer/runcAPI

Page 12: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Démos

Construire un conteneur

Page 13: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

host% docker run -it ubuntu /bin/bashmyubuntu$ apt-get updatemyubuntu$ apt-get install nanomyubuntu$ host% docker commit myubuntu nanobuntu…host% docker run -it nanobuntu

Construire un conteneur

Page 14: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les Dockerfile

FROM scratchLABEL maintainer [email protected]

COPY hello /hello

CMD /hello

Page 15: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les Dockerfile

FROM scratchLABEL maintainer [email protected] com.qarnot.profile=”batch”

COPY hello /hello

CMD /hello

Page 16: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les Dockerfile

FROM scratchLABEL maintainer [email protected] com.qarnot.profile=”batch”

COPY hello /hello

CMD [“/hello”]

Page 17: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les Dockerfile

FROM debian:latestLABEL maintainer [email protected]

RUN apt-get update && apt-get install -y \ nginx-light \ && apt-get clean && rm -rf /var/lib/apt/lists/*

COPY index.html /var/www/html/index.htmlCMD [“nginx”, “-g”, “daemon off;”]

Page 18: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Les Dockerfile

FROM golang:1.9-alpine

COPY hello.go /go/src/hello/hello.goRUN go build /go/src/hello/hello.go

FROM scratchLABEL maintainer [email protected]

COPY --from=0 /go/hello /helloCMD [“/hello”]

Page 19: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges

Page 20: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore

Page 21: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards

Page 22: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards- Ne rien installer de superflux

Page 23: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards- Ne rien installer de superflux- Minimiser le nombre de couches

Page 24: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards- Ne rien installer de superflux- Minimiser le nombre de couches- Trier les commandes multilignes

Page 25: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards- Ne rien installer de superflux- Minimiser le nombre de couches- Trier les commandes multilignes- Faire des conteneurs éphémères

Page 26: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards- Ne rien installer de superflux- Minimiser le nombre de couches- Trier les commandes multilignes- Faire des conteneurs éphémères- Exécuter un seul processus par conteneur

Page 27: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Quelques bonnes pratiques

- Réduire les privilèges- Utiliser .dockerignore- Exposer les ports standards- Ne rien installer de superflux- Minimiser le nombre de couches- Trier les commandes multilignes- Faire des conteneurs éphémères- Exécuter un seul processus par conteneur- Profiter du système de cache d’instruction

Page 28: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Démos

Volumes et liaisons

Page 29: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Comment bien isoler ?

Page 30: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Comment bien isoler ?

- Namespaces

Page 31: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Comment bien isoler ?

- Namespaces- Cgroups

Page 32: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Comment bien isoler ?

- Namespaces- Cgroups- Capabilities

Page 33: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Comment bien isoler ?

- Namespaces- Cgroups- Capabilities- seccomp

Page 34: TechNote #3 Docker.pdf · FROM golang:1.9-alpine COPY hello.go /go/src/hello/hello.go RUN go build /go/src/hello/hello.go FROM scratch LABEL maintainer nemunaire@nemunai.re COPY --from=0

Questions ?