## Simplifiez vos déploiement avec la conteneurisation Nathan Tien You --- ## Sommaire - Introduction à la conteneurisation - Docker - Principes clés - Conteneurs - Images - Orchestration - Exemples d'applications --- ## Nathan Tien You - Ingénieur spécialité informatique - Développeur fullstack - Home Server : - Proxmox - Docker - Gitea actions - Amateur de jeux de deckbuilding --- ## Problématiques liées à la virtualisation - Gourmand (Mémoire, processeur, disque dur) - Installation lourde - Mises à jour et maintenance - Système d'exploitation - Outils de supervision - Dépendances / prérequis --- ## Infrastructure as code - Automatisation - Fiabilité - Efficacité - Contrôle des versions - Autodocumenté - Immutabilité --- ## Virtualisation du service ![Comparison between containers, bare metal, and virtual machines](https://about.gitlab.com/images/blogimages/containers-vm-bare-metal.png "Containers vs VMs")\ source : [Gitlab](https://gitlab.com) --- ## Différents types de conteneurisation - Conteneurs Processus - Docker - Podman - Conteneurs Machine - LXC - LXD --- ## Conteneurs Contexte d'éxecution isolé : chroot --- ## Base du conteneur : image - Point d'entrée (exécutable) - Variables d'environnement - Ports --- ## Registres d'images ![Docker image registry](https://despliegue.codeandcoke.com/_media/apuntes:arquitectura_docker.png) --- ## Lancement d'un conteneur ```bash docker run \ -it --rm \ -v /tmp:/usr/local/apache2/htdocs/ \ -p 8000:80 \ httpd:latest ``` ---- --- ## Bonnes pratiques Docker - Conteneurs éphémères - Processus stateless - Architecture Shared-nothing - Images minimales - Installer uniquement le nécessaire - Séparer compilation et mise en production --- ## Construction d'une image ```Docker dockercompose FROM node:lts-alpine3.20 WORKDIR /app COPY package.json ./ COPY package-lock.json ./ COPY index.js ./ RUN npm ci CMD ["node", "index.js"] ``` ![Container Insides](./assets/Image.drawio.svg) ```bash docker buildx build . -t demo:latest ``` ---- --- ## Orchestration - Automatisation du déploiement - Horizontal Scaling - Nombreuses platformes - Kubernetes - Docker Compose - OpenShift ---

Docker compose

---- ```yaml [|1-4,11-13,21-23|5-6,14-15,36-37|8-9,18-19,28-30,32-34|7,16-17,24-25,26-27] dockercompose services: database: image: redis:alpine3.20 volumes: - database-data:/data command: "redis-server --save 60 1" networks: - back frontend: image: docker-demo/front build: ./front volumes: - ./test.txt:/usr/local/apache2/htdocs/test.txt ports: - "80:80" networks: - front backend: image: docker-demo/backend build: ./back environment: - REDIS_URL=redis://database depends_on: - database networks: - back - front networks: front: back: volumes: database-data: ``` --- ## Orchestration : Kubernetes - Clusters - Stockage distribué - Haute Disponibilité - Redondance - Stratégie de déploiement --- ## Où utiliser la conteneurisation ? - Services internes ou publics - DevOps (Déploiement et intégration continue) - Technologies Cloud (AWS, Azure...) ou on-prem - Complémentaire aux machines virtuelles