1. Conteneur
Évolution de la virtualisation
Matériaux
Un peu histoire. Au début, quand on a besoin des services informatique, on achète des matériaux comme pour CPU, Mémoire RAM etc.
Vue que les grandes Entreprise comme Amazon, il doit fonctionner parfaitement même pendant la période forte charge(Noël).
Virtualisation
VM
L’isolation avec le système hôte est donc totale.
Avantage:installer OS différentes, isolé du système hôte.
Inconvénients:prends du temps à démarrer, réserve des resources RAM/CPU
Conteneur
Un processus ou l’ensemble du processus isolés du reste du système.
Caractère: ne virtualise pas les resources, il ne crée qu’un isolation des processus. Donc il partage des resources avec son hôte.
Avantages:
- Ne réserve pas les resources-> louer les resources surplus en moyen cloud.
- Démarrez rapidement
- Plus d’autonomie à dev: réduire la diff entre production, dev, intégration.
- Les conteneurs permettent de réduire les coûts, d'augmenter la densité de l'infrastructure,
- CI, le cycle de déploiement.BlaBlaCar utilise des conteneurs pour créer et isoler rapidement des tests/builds d'application.
- MicroService: ils sont souvent utilisés en production pour ajouter des ressources disponibles et ainsi répondre à des besoins de mise à l'échelle, ou de scalabilité.
2. Docker
2.1 Création, année, fondateur
Fondateur, Solomon Hykes, né à New-york, d'un père américain et d'une mère franco-canadienne. Sa famille s’est installer en France, alors qu'il avait quatre ans.
En 2008, il crée dotCloud à Montrouge pour PaaS.
dotCloud s’est implante dans la Silicon Valley en 2011, début 2013, open source.
caractère:Docker, un conteneur ne doit faire tourner qu'un seul processus.
dans le cas d'une stack LAMP (Linux, Apache, MySQL, PHP), nous devons créer 3 conteneurs différents.
2.2 应用场景
1.Déployer le projet,
2.une équipe de 10 personnes peuvent avoir le OS différents.
3.CI
Cela permet à la CI/CD de créer rapidement des espaces isolés pour faire tourner vos tests.
goal:vous n'aurez plus de problème de différence d'environnement, et votre code marchera partout.
Comment faire pour avoir un environnement unifié et fonctionnel chez l'ensemble des développeurs
2.3 怎么储存?
Docker Hub:la registry officielle de Docker
Une registry est un logiciel qui permet de partager des images à d'autres personnes. C’est un composant majeur dans l’écosystème Docker, car il permet :
- à des développeurs de distribuer des images prêtes à l’emploi et de les versionner avec un système de tags ;
- à des outils d’intégration en continu de jouer une suite de tests, sans avoir besoin d’autre chose que de Docker ;
- à des systèmes automatisés de déployer ces applications sur vos environnement de développement et de production.
需要什么matériel?
2.4. CMD
docker run image
Daemon docker va chercher cette image en local, dans le cas contraire, il va le récupérer sur la registry Docker officielle.
Docker run hello-world
-d: Sans -d, docker démarre le conteneur, exécute, et puis, il a fini par s’arrêter.
Avec -d, le conteneur reste allumé jusqu’à l’arrêt du service qu’il contient.
-p: 8080:80, trafic du port 8080 et puis le port 80 du conteneur.
docker exec -ti id-conteneur bash
Entre dans le conteneur, pour pourvoir y effectuer des actions.
docker stop id_conteneur
Arrêter le conteneur lancé avec l’option -d
docker rm id_conteneur
Celle-ci va détruire le conteneur et son contenu.
docker pull image
Récupérer l’image, et le stocker en local sans lancer le conteneur.
docker ps
Info l’états du conteneurs actifs.
docker images -a
voir l'ensemble des images présentes en local
docker system prune
faire le ménage
docker build
Docker va créer un conteneur pour chaque instruction, et le résultat sera sauvegardé dans une layer. Le résultat final étant un ensemble de layers qui construisent une image Docker complète.
Si une layer ne bouge pas entre deux builds, Docker ne la reconstruira pas. Seules les layers situées après une layer qui se reconstruit seront elles aussi reconstruites.
Exemple:
docker build -t ocr-docker-build .
-t
: donner un nom à image.
Le .
est le répertoire où se trouve le Dockerfile ; dans ce cas, à la racine de notre projet.
2.5 Lancement d'un docker
docker build -t nom-docker-build .
docker run -d -p 2368:2368 nom-docker-build
2.6 ignore fichier with .dockerignore
Il permet de ne pas copier certains fichiers ou dossiers dans le conteneur lors de l'exécution de l'instruction ADD
.
********Sous Chaptire Dockerfile, Créer votre propre image***************
Nom du fichier: Dockerfile
Sans extension
Layer:
Chaque instruction que nous allons donner dans notre Dockerfile va créer une nouvelle layer correspondant à chaque étape de la construction de l'image.
Un exemple:
FROM debian:9
Définir une image que vous voulez travailler au-dessus comme base.
FROM
n'est utilisable qu'une seule fois dans Dockerfile.
RUN apt-get update -yq \ && apt-get install curl gnupg -yq \ && curl -sL https://deb.nodesource.com/setup_10.x | bash \ && apt-get install nodejs -yq \ && apt-get clean -y
RUN
exécuter une commande dans le conteneur.
ADD . /app/
ADD
copier ou télécharger des fichiers dans l'image.Dans ce cas, il copie les sources de de l'app locale dans le dossier /app/ de l'image.
. signifie le repertoire courant.
les code sources sont prêts.
WORKDIR /app
WORKDIR
permet de modifier le répertoire courant. elle est équivalente à une comme cd en ligne de commande.
RUN npm install
RUN
permet d'installer le package du projet Node.js
les dépendances sont prêts
EXPOSE 2368
EXPOSE
indique le port sur lequel votre application écoute.
VOLUME /app/logs
VOLUME
indique quel répertoire vous voulez partager avec votre host.
CMD npm run start
CDM
doit toujours être présent, placer en dernière ligne, permet au conteneur de savoir quelle commande il doit exécuter lors de son démarrage.
********Sous Chaptire Docker-compose, Unifier conteneur*********
Rérérence:
Répo GitHub ghost-cms