Skip to content

Commit

Permalink
Update current feature
Browse files Browse the repository at this point in the history
  • Loading branch information
fjammes committed Jul 7, 2024
1 parent 5e41226 commit 5656b48
Showing 1 changed file with 103 additions and 135 deletions.
238 changes: 103 additions & 135 deletions content/1_Labs/docker.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: "Docker : l'essentiel"
date: 2024-07-07T14:15:26+10:00
draft: false
weight: 0
weight: 1
tags: ["docker", "container", "devops"]
---

Expand Down Expand Up @@ -46,211 +46,179 @@ docker run -it -p 8080:80 ubuntu netcat -l -p 80

Créer un conteneur ubuntu qui exécute `netcat -l -p 80` et expose le port `808<ID>` sur l'hôte.

1. Remplacez `<ID>` par un numéro unique de votre choix (par exemple, 1) et exécutez la commande suivante pour lancer un conteneur Ubuntu avec Netcat :
1. Remplacez `<ID>` par un numéro unique (par exemple 1 si vous êtes `k8s1`) et lancer un conteneur Ubuntu avec Netcat :


{{%expand "Solution" %}}
```bash
docker run --name "netcat<ID>" -d -p 808<ID>:80 -- \
ubuntu sh -c "apt-get update && apt-get -y install netcat && echo 'Run netcat' && netcat -l -p 80"
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
docker run --name "netcat<ID>" -d -p 808<ID>:80 -- \
ubuntu sh -c "apt-get update && apt-get -y install netcat && echo 'Run netcat' && netcat -l -p 80"
```
{{% /expand%}}

2. Vérifiez que le conteneur est en cours d'exécution :

{{%expand "Solution" %}}
```bash
docker ps
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
docker ps
```
{{% /expand%}}

3. Testez la connexion depuis l'hôte en utilisant Netcat :

{{%expand "Solution" %}}
```bash
netcat localhost 808<ID>
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
netcat localhost 808<ID>
```
{{% /expand%}}

4. Si la connexion est établie, tapez quelque chose dans le terminal et vous devriez voir la même chose dans le conteneur (vous pouvez vérifier les logs avec `docker logs netcat`).

## Démarrer un conteneur nommé “mariadbtest” et exécuter une instance mariadb
{{% notice note %}}
Utilisez `CtrlẐ` puis `bg` pour mettre la commande `netcat` précédente en tâche de fond.
{{% \notice %}}

{{%expand "Solution" %}}
```bash
# Démarrer un conteneur nommé “mariadbtest” et exécuter une instance mariadb

# mariadbtest est le nom que nous voulons attribuer au conteneur. Si nous ne spécifions pas de nom, un identifiant sera généré automatiquement.
docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb

# Facultativement, après le nom de l'image, nous pouvons spécifier des options pour mysqld. Par exemple :
docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED

# lister les conteneurs en cours d'exécution
docker ps
```
{{% /expand%}}
## Cas pratique

### Exercice
### Partie 1: Exécuter un conteneur

1. Démarrez un conteneur nommé `mariadbtest` avec le mot de passe root pour MySQL défini sur `mypass` :

{{%expand "Solution" %}}
```bash
docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=mypass -d mariadb
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
docker run --name mariadbtest<ID> -e MYSQL_ROOT_PASSWORD=mypass -d mariadb
```
{{% /expand%}}

2. Vérifiez que le conteneur est en cours d'exécution :

{{%expand "Solution" %}}
```bash
docker ps
```
{{% /expand%}}

3. Optionnellement, vous pouvez ajouter des options pour `mysqld` comme indiqué dans l'exemple ci-dessus.

## Installer vim dans le conteneur mariadbtest
{{%expand "Solution" %}}
```bash
docker ps
```
{{% /expand%}}

{{%expand "Solution" %}}
```bash
# Accéder au conteneur via bash, avec accès root
docker exec -it mariadbtest bash
3. Optionnellement, vous pouvez ajouter des options pour `mysqld` comme indiqué dans l'exemple ci-dessous.

# Installer des logiciels à l'intérieur du conteneur
apt-get update && apt-get install vim
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
docker run --name mariadbtest<ID> -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED
```
{{% /expand%}}

### Exercice
### Partie 2: Accéder interactivement à un conteneur

1. Accédez au conteneur `mariadbtest` via bash :

{{%expand "Solution" %}}
```bash
docker exec -it mariadbtest bash
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
docker exec -it mariadbtest bash
```
{{% /expand%}}

2. Mettez à jour les paquets et installez vim :

{{%expand "Solution" %}}
```bash
apt-get update && apt-get install vim
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
apt-get update && apt-get install vim
```
{{% /expand%}}

3. Vérifiez que vim est installé en tapant `vim` dans le terminal du conteneur.

## Créer un Dockerfile pour exécuter un serveur web python
### Partie 3: Créer une image de conteneur pour exécuter un serveur web python

#### Création de l'image

Allez dans le répertoire de l'exercice :

```bash
cd k8s-school/labs/0_docker/webserver
```

### Exercice

Trouvez la commande pour construire le conteneur et le taguer avec le label `webserver<ID>`.

1. Construisez le conteneur et taguez-le avec le label `webserver<ID>` (remplacez `<ID>` par un numéro unique) :

{{%expand "Solution" %}}
```bash
docker build --tag=webserver<ID> .
```
{{% /expand%}}

Utilisez l'exemple de `Dockerfile` dans le répertoire actuel et mettez-le à jour.

{{%expand "Solution" %}}
```bash
# Utiliser ubuntu comme image de base, elle sera téléchargée automatiquement
FROM ubuntu:latest
LABEL org.opencontainers.image.authors "[email protected]"

# Mettre à jour et installer les dépendances système
RUN apt-get update && apt-get install -y python3
RUN mkdir -p /home/www
WORKDIR /home/www
# Les commandes ci-dessous seront toutes exécutées dans WORKDIR

# Lancer la commande ci-dessous au démarrage du conteneur
# Elle servira les fichiers situés là où elle a été lancée
# donc /home/www
CMD python3 /home/src/hello.py

# Ajouter un fichier local à l'intérieur du conteneur
# le code peut également être récupéré à partir d'un dépôt git
COPY index.html /home/www/index.html

# Cette commande est la dernière, donc si hello.py est modifié
# seule cette couche du conteneur sera modifiée.
COPY hello.py /home/src/hello.py
```
{{% /expand%}}

### Exercice

1. Créez un `Dockerfile` basé sur l'exemple ci-dessus.
2. Construisez l'image Docker et taguez-la :
{{%expand "Solution" %}}
```bash
docker build --tag=webserver<ID> .
```
{{% /expand%}}

{{%expand "Solution" %}}
```bash
docker build --tag=webserver<ID> .
```
{{% /expand%}}
2. Utilisez l'exemple de `Dockerfile` dans le répertoire actuel et mettez-le à jour petit à petit en démarrant par le haut du fichier.

## Lancer le conteneur en tant que daemon et publier le port 8000 sur l'hôte
{{%expand "Solution" %}}
```bash
# Utiliser ubuntu comme image de base, elle sera téléchargée automatiquement
FROM ubuntu:latest
LABEL org.opencontainers.image.authors "[email protected]"

# Mettre à jour et installer les dépendances système
RUN apt-get update && apt-get install -y python3
RUN mkdir -p /home/www
WORKDIR /home/www
# Les commandes ci-dessous seront toutes exécutées dans WORKDIR

# Lancer la commande ci-dessous au démarrage du conteneur
# Elle servira les fichiers situés là où elle a été lancée
# donc /home/www
CMD python3 /home/src/hello.py

# Ajouter un fichier local à l'intérieur du conteneur
# le code peut également être récupéré à partir d'un dépôt git
COPY index.html /home/www/index.html

# Cette commande est la dernière, donc si hello.py est modifié
# seule cette couche du conteneur sera modifiée.
COPY hello.py /home/src/hello.py
```
{{% /expand%}}

Vérifiez le fichier python à l'intérieur du conteneur pour trouver le port à exporter.
#### Exécution du conteneur

### Exercice
Analyser le programme python `hello.py` à l'intérieur du conteneur pour trouver le port à exporter.

1. Lancer le conteneur en tant que daemon et publier le port 8000 sur l'hôte :
1. Lancer le conteneur en tant que daemon et publier le port 800<ID> sur l'hôte :

{{%expand "Solution" %}}
```bash
docker run -d --name mywww -t -p 8000:8000 webserver<ID>
```
{{% /expand%}}
{{%expand "Solution" %}}
```bash
docker run -d --name k8s<ID>_www -t -p 800<ID>:8000 webserver<ID>
```
{{% /expand%}}

2. Vérifiez que le conteneur est en cours d'exécution et accédez au site web

{{%expand "Solution" %}}
{{%expand "Solution" %}}
```bash
docker ps
curl http://localhost:8080
```
{{% /expand%}}
{{% /expand%}}

3. Supprimez le conteneur :

{{%expand "Solution" %}}
{{%expand "Solution" %}}
```bash
docker rm -f mywww
docker rm -f k8s<ID>_www
```
{{% /expand%}}

## Lancer le conteneur en tant que daemon et publier le port 8000 sur l'hôte, et utiliser le fichier html stocké sur la machine hôte
{{% /expand%}}

### Exercice

1. Lancez le conteneur en tant que daemon, publiez le port 8000 sur l'hôte, et utilisez le fichier html stocké sur la machine hôte :
4. Lancez le conteneur en tant que daemon, publiez le port 800<ID> sur l'hôte, et utilisez le fichier html stocké sur la machine hôte :

{{%expand "Solution" %}}
```bash
docker run --name my_webserver -d -p 8000:8000 -v $PWD/www:/home/www webserver<ID>
docker run --name k8s<ID>_www_data -d -p 800<ID>:8000 -v $PWD/www:/home/www webserver<ID>
```
{{% /expand%}}

2. Vérifiez que le conteneur est en cours d'exécution et que le fichier HTML est servi correctement.
5. Vérifiez que le conteneur est en cours d'exécution et que le fichier HTML est servi correctement.

{{%expand "Solution" %}}
```bash
# Editer le fichier $PWD/www/index.html
docker ps
curl http://localhost:8080
curl http://localhost:808<ID>
```
{{% /expand%}}

0 comments on commit 5656b48

Please sign in to comment.