forked from deepika55/k8s-training-doc
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
103 additions
and
135 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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"] | ||
--- | ||
|
||
|
@@ -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%}} |