# Devops

# Ansible

# Docker

# Commandes d'informations Docker

## Information de Docker

Vérification de la bonne installation de docker

```bash
docker version
```

Idem pour docker compose

```bash
docker-compose version
```

Obtenir des infos de Docker

```bash
docker info
```

# Utilisation container

## Création de container

### Création

  
Lancer un conteneur basique

```bash
docker container run --publish 80:80 nginx
ou
docker container run -p 80:80 nginx
```

Lancer un conteneur mais en arrière plan dans cette configuration il aura un nom aléatoire

```bash
docker container run --detach --publish 80:80 nginx
ou
docker container run -d -p 80:80 nginx
```

### Afficher existant

Voir tous les container même stoppés

```bash
docker container ls -a
```

Commande identique

```bash
docker ps
```

Pour choisir le nom du container

```bash
docker container run --detach --name nginx_web --publish 80:80 nginx
ou
docker container run -d --name nginx_web -p 80:80 nginx
```

## Arrêter un container

### Stopper

  
Pour stopper un container il faut son nom ou son ID

```bash
docker container stop 'NOM/ID'
```

Idem avec

```bash
docker stop 'NOM/ID'
```

### Supprimer

Pour supprimer le ou les container qui sont arrêtés mais toujours présent en fonds  
Il est possible d'en supprimer plusieurs en ajoutant tous les noms a la suite les un des autres.

```bash
docker container rm 'NOM/ID'
```

Idem avec

```bash
docker rm 'NOM/ID'
```

Il n'est normalement pas possible de supprimer un container en cours d'exécution sauf en le forçant avec l'ajout suivant

```bash
docker rm -f 'NOM/ID'
```

## Utilisation des container

### Regarder les logs

  
Pour regarder les logs

```bash
docker container logs 'NOM/ID'
```

Idem avec

```bash
docker logs 'NOM/ID'
```

### Processus

Voir les processus en cours dans un container docker

```bash
docker container top 'NOM/ID'
```

Idem avec

```bash
docker top 'NOM/ID'
```

### Informations image 

```bash
docker container inspect 'NOM/ID'
```

  
Idem avec

```bash
docker inspect 'NOM/ID'
```

Il est possible de formater le résultats pour n'avoir que certains résultats.  
En modifiant la valeur entre crochet pour correspondre a la recherche souhaitée.

```bash
docker container inspect --format '{{.NetworkSettings.IPAddress}}' 'NOM/ID'
```

Il faudra faire attention a suivre le cheminement que l'on peut retrouver dans la commande inspect. Autre par exemple State.Status

[![image.png](https://wikinul.com/uploads/images/gallery/2024-07/scaled-1680-/Q4Y6kTTDOSvJu4U5-image.png)](https://wikinul.com/uploads/images/gallery/2024-07/Q4Y6kTTDOSvJu4U5-image.png)

### Utilisation des ressources par les containers

```bash
docker container stats 'NOM/ID'
```

Idem avec

```bash
docker stats 'NOM/ID'
```

## Intervenir dans le container

### Lancer un container et intervenir dedans

  
Pour lancer un container la commande sera identique mais il y aura quelques options en plus pour accéder a un terminal

```bash
docker container run -it --name webserver -p 80:80 nginx bash
```

-t permet de simuler un terminal  
-i permet de de garder le terminal ouvert et recevoir l'output des commandes  
bash correspond a la commande qui est lancée au lancement du terminal, il permet de créer un terminal  
On entre directement dans la console du container   
pour quitter le container il faut entrer `exit` mais cette commande éteint aussi le container

La raison pour laquelle le container s'éteint c'est que la commande pour faire fonctionner le container a été définit avec bash donc si l'on met fin au bash on met fin au container par contre s'il on execute une autre commande puis avec la syntaxe ci-dessous que l'on execute une commande bash supplémentaire le container restera allumé.

### Lancer une commande dans un container

```bash
docker container exec -it 'NOM/ID' 'commande'
```

ou

```bash
docker exec -it 'NOM/ID' 'commande'
```

la commande pour accéder a un terminal reste bash :

```bash
docker exec -it 'NOM/ID' bash
```

# Création d'un container

## Etapes de création d'un container

  
Dans un premier temps docker regarde sur son cache local si l'image est déja présente si elle ne l'est pas il la télécharge depuis DockerHub ou un autre repo s'il est configuré.  
Il téléchargera forcément la dernière version de l'image si rien ne lui est précisé.  
Il crée ensuite un container basé sur l'image souhaitée.  
Il attribue ensuite une IP virtuelle au container sur le réseau privé interne au serveur docker.  
Avec l'option --publish il va ouvrir le port définit et le rediriger vers le port définit du container.  
Il va ensuite démarrer le container avec la commande (CMD), qui est définit dans le Dockerfile lors de la création de l'image (normalement a la fin).

# Exercices

## Exercice 1

  
Création d'un container mysql avec un mot de passe root aléatoire

```bash
docker container run -d --name sqlserv --env MYSQL_RANDOM_ROOT_PASSWORD=yes -p 3306:3306  mysql
```

Pour trouver le mot de passe il faut se rendre dans les logs de la machine il y est indiqué

```bash
[Note] [Entrypoint]: GENERATED ROOT PASSWORD: 7Lh6eUrE7cRKJDQVPjEEodtEeSNNF3Hh
```

## Exercice 2

# Kubernetes

# Solution Kubernetes

- [K8s](https://kubernetes.io/fr/)<span style="white-space: pre-wrap;"> (l'original)</span>
- [K0s](https://k0sproject.io/)
- [Minikube](https://minikube.sigs.k8s.io/docs/start/)

# Terraform