init
This commit is contained in:
1
docker/.envrc
Normal file
1
docker/.envrc
Normal file
@@ -0,0 +1 @@
|
||||
use flake
|
||||
182
docker/docker.md
Normal file
182
docker/docker.md
Normal file
@@ -0,0 +1,182 @@
|
||||
---
|
||||
title: le cours de docker avec des schémas et des commandes interactives pour
|
||||
les gens largués qui ont besoin d'explications détailées et qui mangent du
|
||||
terminal
|
||||
sub_title: et les titres à rallonge aussi
|
||||
author: lelu awen
|
||||
options:
|
||||
command_prefix: "pr:"
|
||||
theme:
|
||||
override:
|
||||
code:
|
||||
alignment: center
|
||||
---
|
||||
<!-- LTeX: language=fr -->
|
||||
Sommaire
|
||||
===
|
||||
<!-- pr:font_size: 2 -->
|
||||
- Avant-propos
|
||||
- Les conteneurs en bref
|
||||
- À quoi que ça sert
|
||||
- Open Container Initiative (OCI)
|
||||
- Docker
|
||||
- Présentation générale
|
||||
- Fonctionnement
|
||||
- Conteneurs
|
||||
- Images
|
||||
- Volumes
|
||||
- Ports
|
||||
- Networks
|
||||
- Glossaire
|
||||
<!-- end_slide -->
|
||||
Avant-propos
|
||||
===
|
||||
Le but de ce document est de fournir une base synthétique sur le sujet de
|
||||
l'utilisation de docker dans le cadre de la manipulation de conteneur de façon
|
||||
impérative. Ainsi, les sujets suivants ne serons pas aborder:
|
||||
- Docker compose
|
||||
- un outil de permettant de définir un ensemble de conteneur (projet) de façon
|
||||
déclarative.
|
||||
- Dockerfile
|
||||
- Mécanisme de docker permettant de créer des **Images**[^1]
|
||||
|
||||
Ce Guide par du principe que vous avez **docker**[^2] d'installer sur votre ordinateur
|
||||
afin d'exécuter les différentes commandes que ce dernier comprend.
|
||||
De plus, nous n'allons pas revenir en détail sur le fonctionnement d'un terminal,
|
||||
des diverses commandes non liées à docker et nous survolerons les services utilisés
|
||||
comme exemple.
|
||||
De plus, ce guide vise à voir les fondamentaux de docker, de ce fait, il ne sera
|
||||
pas fait mention de **docker desktop** et de **lazydocker**, car bien que pratique,
|
||||
je juge qu'il est fondamental de bien connaître le fonctionnement interne de docker
|
||||
avant de se faire assister par des outils externes.
|
||||
|
||||
Pour toute question, merci de me contacter au mail suivant: `lelu.awen@proton.me`
|
||||
<!-- end_slide -->
|
||||
Les conteneurs en bref
|
||||
===
|
||||
# À quoi ça sert
|
||||
<!-- pr:column_layout: [2,1] -->
|
||||
<!-- pr:column: 0 -->
|
||||
Avez vous déjà eu le problème suivant:
|
||||
Imaginez que vous êtes étudiant, vous avez un cours sur de l'intégration continue,
|
||||
à tout hasard, *jenkins*[^3], Le Professeur vous demande donc d'installer Jenkins
|
||||
sur votre ordinateur et là, le drame, l'horreur, vous devez installer *java*[^4].
|
||||
Bien sur, vous allez voir sur la documentation d'installation de *Jenkins* et vous
|
||||
voyez que ce dernier demande la version 21 de Java, hors, vous avez la version 25
|
||||
d'installer pour vos projets ! Que faire ? Passer vos projets sur java 21 ?
|
||||
Désinstaller java 25 et le réinstaller après le cours ? Dans tous les cas, c'est
|
||||
pas vraiment pratique. Maintenant, imaginez en plus que vous êtes sur Windows
|
||||
et que vos partenaires de groupe sont sur *Linux* et *MacOS*, ils ont chaqu'un des
|
||||
modalités d'installation différente.
|
||||
Si seulement on pouvait avoir un système qui permet de faire en sorte que tout
|
||||
notre projet et ses dépendances soit toutes regrouper dans un paquet, et que vous
|
||||
ayez juste à télécharger ce paquet pour le lancer... Oh l'idée de génie vite faut
|
||||
que je lance ma startup avant qu'on me pique l'idée et on pourra même utiliser
|
||||
une IA pour.. Oh, c'est le sujet de la diapo, c'est ça ?
|
||||
|
||||
Et oui, un des buts des conteneurs c'est ça, pouvoir mettre ensemble tout les
|
||||
composants d'une application dans une boite, et pouvoir lancer cette boite de
|
||||
façon isolée du reste du système, un peu comme son propre petit ordinateur.
|
||||
de cette manière on gagne plusieurs avantages:
|
||||
- ne pas avoir à gérer plusieurs versions des dépendences
|
||||
- comme par exempleflake_schema avoir 2 version de node d'installer, ou deux version de
|
||||
java
|
||||
- ne pas risquer d'oublier des trucs qu'on à installer juste pour un projet
|
||||
- Car il est installer que au seins de notre conteneur, et si on supprime celui-ci,
|
||||
on supprime aussi les programmes associé.
|
||||
- Pouvoir lancer des trucs "juste pour tester"
|
||||
- Chaque conteneur est isolé de notre système, donc il risque pas de casser
|
||||
des trucs, et vu qu'on peut le supprimer après, on risque pas d'oublier de
|
||||
le désinstaller
|
||||
- Partager un environnement
|
||||
- quel que sois le système d'exploitation, maintenant tout le monde peut faire
|
||||
les même commande pour avoir strictement le même environnement de travail
|
||||
que le voisin, finis les "Ah mais ton truc il marche pas parce que j'ai
|
||||
java 11 d'installer"
|
||||
<!-- pr:column: 1 -->
|
||||

|
||||
<!-- pr:end_slide -->
|
||||
Les conteneurs en bref
|
||||
===
|
||||
# Open Container Initiative (OCI)
|
||||
Populariser par Docker, l'utilisation de conteneur n'est pourtant pas une
|
||||
exclusivité de ce dernier. Ainsi il existe d'autres outils permettant d'utiliser
|
||||
des conteneurs, comme par exemple Podman. Afin de standardiser la définition de
|
||||
ce qu'est unn conteneur, Docker ainsi que d'autres acteurs ont mis en place
|
||||
**l'Open Containuer Initiative** ou OCI, une structure ouverte servant d'autorité
|
||||
pour définir les standards régissant les conteneurs dits "**OCI**[^5]", un peu à
|
||||
la manière du *Système de mesure International* (SI) définissant par exemple le
|
||||
mètre, le gramme, ect...
|
||||
Ces standards étant ouverts, n'importe qui peut les implémenter afin de construire
|
||||
son propre engine et pouvoir tout de même utiliser les systèmes existants.
|
||||
Ainsi, bien que **Docker** et **Podman** sois deux implémentation différentes de
|
||||
ce standard, une image construite avec **Docker** peut parfaitement être utiliser
|
||||
avec **Podman** et vis-versa.
|
||||
On parlera ainsi de **Conteneur OCI** pour parler d'un conteneur construit celons
|
||||
ce standard.
|
||||

|
||||
<!-- pr:end_slide -->
|
||||
Docker
|
||||
===
|
||||
# Présentation générale
|
||||
<!-- pr:column_layout: [1, 1] -->
|
||||
<!-- pr:column: 0 -->
|
||||
Maintenant qu'on a passé la partie ennuyante, rentrons dans le vif du sujet:
|
||||
Docker c'est quoi ?
|
||||
Fondamentalement, Docker est un programme permettant de créer, lancer et gérer des
|
||||
**conteneurs**, des **volumes**, des **network** et des **images** respectant
|
||||
le standard OCI.
|
||||
Il est formé de principalement deux composants :
|
||||
- Docker daemon
|
||||
- Son rôle est de fonctionner en arrière plan de votre ordinateur et de chapeauté
|
||||
l'exécution des conteneurs, le routage des requêtes entre ces derniers via
|
||||
les *networks*[^6] ainsi que l'accès aux fichiers de l'ordinateur via les
|
||||
*volumes*[^7]
|
||||
- Docker CLI
|
||||
- Ce composant fournis les commandes qui vont être utilisées pour manipuler le
|
||||
daemon, en pratique, lui demander de lancer un conteneur, créer une **image**,
|
||||
un **volume** ou un **network**.
|
||||
|
||||
En effet, pour rentrer vaguement dans les détails plus techniques, docker fonctionne
|
||||
avec une architecture client / serveur. Le daemon fonctionne en arrière-plan et
|
||||
est le "cœur" de Docker, tendis que les commandes servent juste à envoyer des
|
||||
requêtes à ce dernier.
|
||||
<!-- pr:column: 1 -->
|
||||

|
||||
<!-- pr:end_slide -->
|
||||
Docker -- fonctionnement
|
||||
===
|
||||
# Images
|
||||
<!-- pr:column_layout: [1, 1] -->
|
||||
<!-- pr:column: 0 -->
|
||||
```bash +exec
|
||||
# lance moi avec ctrl+e
|
||||
# reset avec ctrl+r
|
||||
docker image pull grycap/cowsay:latest
|
||||
```
|
||||
<!-- pr:column: 1 -->
|
||||

|
||||
<!-- pr:end_slide -->
|
||||
Docker -- fonctionnement
|
||||
===
|
||||
# Conteneurs
|
||||
```bash +exec
|
||||
docker run --rm rancher/cowsay:latest "test"
|
||||
```
|
||||
<!-- pr:end_slide -->
|
||||
Docker -- fonctionnement
|
||||
===
|
||||
# Volumes
|
||||
<!-- pr:end_slide -->
|
||||
Docker -- fonctionnement
|
||||
===
|
||||
# Networks
|
||||
<!-- pr:end_slide -->
|
||||
# Glossaire
|
||||
[^1]: image docker:
|
||||
[^2]: docker engine:
|
||||
[^3]: jenkins:
|
||||
[^4]: java:
|
||||
[^5]: Conteneur OCI:
|
||||
[^6]: docker networks:
|
||||
[^7]: docker volumes:
|
||||
61
docker/flake.lock
generated
Normal file
61
docker/flake.lock
generated
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1766201043,
|
||||
"narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b3aad468604d3e488d627c0b43984eb60e75e782",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
18
docker/flake.nix
Normal file
18
docker/flake.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
inputs = {
|
||||
utils.url = "github:numtide/flake-utils";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||
};
|
||||
outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
devShell = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
presenterm
|
||||
];
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
BIN
docker/pictures/cli-daemon-commmunication.png
Normal file
BIN
docker/pictures/cli-daemon-commmunication.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 455 KiB |
BIN
docker/pictures/gateau.png
Normal file
BIN
docker/pictures/gateau.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docker/pictures/oci_definition.png
Normal file
BIN
docker/pictures/oci_definition.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 565 KiB |
BIN
docker/pictures/why_docker.jpeg
Normal file
BIN
docker/pictures/why_docker.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 315 KiB |
Reference in New Issue
Block a user