ajout dev docker
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# TP3 : Docker Networks
|
||||
|
||||
1. Création des réseaux
|
||||
```shell
|
||||
docker network create --driver bridge bridge-tp3 # Création d'un réseau de type bridge.
|
||||
# c82958e2f11e582accf806f4fe24c35dd652f834e35ce9c975c8ab41057f9eb2
|
||||
|
||||
docker network create --driver host host-tp3
|
||||
docker network create --drive none none-tp3
|
||||
# Error response from daemon: only one instance of "host" network is allowed : CAR il y a déjà un network host ainsi que none, alors que les dockers network peuvent être crée à volonté.
|
||||
|
||||
# En vérifiant avec la commande ci-dessous, on peut vérifier les réseaux dockers déjà instanciés
|
||||
docker network ls
|
||||
[srivasta@salle234-09 exo1-networks]$ dar network ls
|
||||
NETWORK ID NAME DRIVER SCOPE
|
||||
ad5c5a581e67 bridge bridge local
|
||||
c82958e2f11e bridge-tp3 bridge local
|
||||
55ace904f2d5 host host local
|
||||
59c5b3091f5b none null local
|
||||
```
|
||||
|
||||
2. Création des conteneurs
|
||||
```shell
|
||||
# De notre côté on crée des dossiers web1,2,3 et met un index.html dans chacun d'entre eux.
|
||||
# Ensuite on lances les conteneurs web1 et web2 en montant le fichier index.html à l'emplacement demandé.
|
||||
docker run -d --name web1 --network bridge-tp3 -v "$PWD"/web1/index.html:/usr/share/nginx/html/index.html nginx:alpine
|
||||
# docker run -d --name web1 --network bridge-tp3 -v "$PWD"/web1/index.html:/usr/share/nginx/html/index.html nginx:alpine web1 sur bridge-tp3
|
||||
|
||||
docker run -d --name web2 --network bridge-tp3 -v "$PWD"/web2/index.html:/usr/share/nginx/html/index.html nginx:alpine
|
||||
# 9dd106f74be931c67d7a29efc25eb4cbcc64da8826773a9100cd244220d94d83 web2 sur bridge-tp3
|
||||
|
||||
docker run -d --name web3 --network host -v "$PWD"/web3/index.html:/usr/share/nginx/html/index.html nginx:alpine
|
||||
# 4fd0e8ba56605f04722e99ffe34d70329dbd69bcf455b80bf00f087e6ee8f523
|
||||
|
||||
docker run -d --name web4 --network none -v "$PWD"/web4/index.html:/usr/share/nginx/html/index.html nginx:alpine
|
||||
# 5bc61fee7ca46a1bba6a3738611d2f53ae3e19cfe8af0b386ce2dff8efab13a4
|
||||
```
|
||||
|
||||
3. Tests de communication
|
||||
```shell
|
||||
# Test ping entre web1 et web2
|
||||
[srivasta@salle234-09 exo1-networks]$ docker exec web1 ping web2
|
||||
PING web2 (172.18.0.3): 56 data bytes
|
||||
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.052 ms
|
||||
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.038 ms
|
||||
^C
|
||||
|
||||
# Test ping entre web1 et web3
|
||||
[srivasta@salle234-09 exo1-networks]$ dar exec web1 ping 172.17.0.1
|
||||
PING 172.17.0.1 (172.17.0.1): 56 data bytes
|
||||
64 bytes from 172.17.0.1: seq=0 ttl=64 time=0.053 ms
|
||||
64 bytes from 172.17.0.1: seq=1 ttl=64 time=0.179 ms
|
||||
^C
|
||||
|
||||
#Test ping entre web1 et web4 Ping impossible car inatteignable
|
||||
[srivasta@salle234-09 exo1-networks]$ dar exec web1 ping web4
|
||||
ping: bad address 'web4'
|
||||
```
|
||||
* L'adresse du conteneur web1 : http://172.18.0.2/ En allant sur firefox, la fenêtre s'affiche bien
|
||||
* web2 : http://172.18.0.3/
|
||||
* web3 : http://172.17.0.1/
|
||||
* web4 n'a pas d'adresse ip qui lui est propre car c'est un none.
|
||||
@@ -0,0 +1,24 @@
|
||||
## 1. Création des réseaux
|
||||
* bridge-tp3 : La création a réussi. Docker permet de créer plusieurs réseaux de type "bridge" personnalisés pour isoler des groupes de conteneurs.
|
||||
* host-tp3 & none-tp3 : La création a échoué car Docker n'autorise qu'une seule instance des drivers "host" et "none". Ces réseaux existent déjà par défaut lors de l'installation de Docker.
|
||||
|
||||
## 2. Tests de communication
|
||||
* web1 vers web2 : Réussi.
|
||||
* Sur un réseau bridge personnalisé, Docker active un service DNS interne. Il permet aux conteneurs de communiquer entre eux en utilisant leurs noms au lieu de leurs adresses IP ce qui nous facilite la tâche.
|
||||
* web1 vers web3 : Réussi (via l'IP 172.17.0.1).
|
||||
* Le conteneur web3 utilise le réseau host. On peut donc le joindre avec l'adresse IP de la passerelle (gateway) qui relie le bridge de l'hôte au système.
|
||||
* web1 vers web4 : Échec ("bad address").
|
||||
* Le conteneur web4 est configuré avec le driver "none". Il ne possède aucune interface réseau externe ni adresse IP, ce qui le rend totalement isolé et inatteignable par le réseau comme dit dans le cours.
|
||||
|
||||
## 3. Accès HTTP et vérification du contenu
|
||||
* web1 (172.18.0.2) & web2 (172.18.0.3) : Les pages sont accessibles avec le navigateur. Le montage de volume (`-v`) a correctement remplacé le fichier par défaut de Nginx par notre `index.html`.
|
||||
* web3 (172.17.0.1) : La page s'affiche correctement. En mode host, le serveur Nginx écoute directement sur les interfaces réseau de la machine hôte.
|
||||
* web4 : Aucun accès possible. Comme il n'a pas d'adresse IP, aucun flux HTTP ne peut aller vers ce conteneur.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Container Info</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
background-color: #f0f2f5;
|
||||
}
|
||||
.container {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background-color: white;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
h1 {
|
||||
color: #2496ed;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
h2 {
|
||||
color: #384c54;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Container: web1</h1>
|
||||
<h2>Date et heure: <span id="datetime"></span></h2>
|
||||
</div>
|
||||
<script>
|
||||
function updateDateTime() {
|
||||
const now = new Date();
|
||||
const options = {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: false
|
||||
};
|
||||
document.getElementById('datetime').textContent =
|
||||
now.toLocaleDateString('fr-FR', options);
|
||||
}
|
||||
// Mise à jour initiale
|
||||
updateDateTime();
|
||||
// Mise à jour toutes les secondes
|
||||
setInterval(updateDateTime, 1000);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Container Info</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
background-color: #f0f2f5;
|
||||
}
|
||||
.container {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background-color: white;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
h1 {
|
||||
color: #2496ed;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
h2 {
|
||||
color: #384c54;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Container: web2</h1>
|
||||
<h2>Date et heure: <span id="datetime"></span></h2>
|
||||
</div>
|
||||
<script>
|
||||
function updateDateTime() {
|
||||
const now = new Date();
|
||||
const options = {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: false
|
||||
};
|
||||
document.getElementById('datetime').textContent =
|
||||
now.toLocaleDateString('fr-FR', options);
|
||||
}
|
||||
// Mise à jour initiale
|
||||
updateDateTime();
|
||||
// Mise à jour toutes les secondes
|
||||
setInterval(updateDateTime, 1000);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Container Info</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
background-color: #f0f2f5;
|
||||
}
|
||||
.container {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background-color: white;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
h1 {
|
||||
color: #2496ed;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
h2 {
|
||||
color: #384c54;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Container: web3</h1>
|
||||
<h2>Date et heure: <span id="datetime"></span></h2>
|
||||
</div>
|
||||
<script>
|
||||
function updateDateTime() {
|
||||
const now = new Date();
|
||||
const options = {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: false
|
||||
};
|
||||
document.getElementById('datetime').textContent =
|
||||
now.toLocaleDateString('fr-FR', options);
|
||||
}
|
||||
// Mise à jour initiale
|
||||
updateDateTime();
|
||||
// Mise à jour toutes les secondes
|
||||
setInterval(updateDateTime, 1000);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Container Info</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
margin: 0;
|
||||
background-color: #f0f2f5;
|
||||
}
|
||||
.container {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
background-color: white;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
h1 {
|
||||
color: #2496ed;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
h2 {
|
||||
color: #384c54;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Container: web4</h1>
|
||||
<h2>Date et heure: <span id="datetime"></span></h2>
|
||||
</div>
|
||||
<script>
|
||||
function updateDateTime() {
|
||||
const now = new Date();
|
||||
const options = {
|
||||
weekday: 'long',
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: false
|
||||
};
|
||||
document.getElementById('datetime').textContent =
|
||||
now.toLocaleDateString('fr-FR', options);
|
||||
}
|
||||
// Mise à jour initiale
|
||||
updateDateTime();
|
||||
// Mise à jour toutes les secondes
|
||||
setInterval(updateDateTime, 1000);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user