Skip to content

Commit

Permalink
Add Storage ateliers
Browse files Browse the repository at this point in the history
  • Loading branch information
Romain Soufflet committed Apr 24, 2019
1 parent d20b6d7 commit 6cc2ed3
Show file tree
Hide file tree
Showing 12 changed files with 210 additions and 32 deletions.
26 changes: 26 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Préparation des atelier docker

Docker doit être installé sur votre poste.

L'utilisateur courant doit appartenir au group `docker` pour éviter d'avoir à exécuter toutes les commandes en `sudo`.

```sh
sudo usermod -aG docker $USER
```

Un proxy http doit être configuré pour Docker.

```sh
sudo -s

mkdir /etc/systemd/system/docker.service.d

echo "[Service]" > /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"HTTP_PROXY=http://orion_user:********@orion.dsic.minint.fr:3128\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"HTTPS_PROXY=http://otion_user:********@orion.dsic.minint.fr:3128\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"NO_PROXY=minint.fr,localhost,127.0.0.1\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf

systemctl daemon-reload && systemctl restart docker

exit
```
36 changes: 7 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,18 @@

## Prérequis

Docker doit être installé sur votre poste.

L'utilisateur courant doit appartenir au group `docker` pour éviter d'avoir à exécuter toutes les commandes en `sudo`.

```sh
sudo usermod -aG docker $USER
```

Un proxy http doit être configuré pour Docker.

```sh
sudo -s

mkdir /etc/systemd/system/docker.service.d

echo "[Service]" > /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"HTTP_PROXY=http://cg_pssmaj:********@orion.dsic.minint.fr:3128\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"HTTPS_PROXY=http://cg_pssmaj:********@orion.dsic.minint.fr:3128\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf
echo "Environment=\"NO_PROXY=minint.fr,localhost,127.0.0.1\"" >> /etc/systemd/system/docker.service.d/http-proxy.conf

systemctl daemon-reload && systemctl restart docker

exit
```
Voir le fichier `INSTALL.md`

## Programme

Les ateliers sont numéroté pour être suivi dans l'ordre.
Chaque atlier considère les notions des ateliers précedent comme acquise

Les atelier de 1 à 5 correspondent au cursus « Découverte »
Les atelier avancé sont les ateliers suivants.
Les atelier avancés sont les ateliers suivants.

2 atelier annexe parlent de systemd car c'est notre méthode de déploiement sur
les tenants de production aujourd'hui
En parallèle, nous avons 2 ateliers sur docker avec SystemD ainsi que 2
ateliers sur docker-compose.

## Cursus découverte

Expand Down Expand Up @@ -69,8 +46,9 @@ Les users system vs les users container

### Atelier #7

Isolation réseau
Isolation réseau. Création de nouveaux réseau et connexion des containers aux
travers des réseaux

### Atelier #8

Persistence des données
Persistence des données et fonctionnement du point de montage
7 changes: 7 additions & 0 deletions atelier-3/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM python:3.7.3

ENV http_proxy $http_proxy
ENV https_proxy $http_proxy
ENV no_proxy $no_proxy

RUN pip install flask
20 changes: 20 additions & 0 deletions atelier-8/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
FROM python:3.7.3

ENV http_proxy $http_proxy
ENV https_proxy $http_proxy
ENV no_proxy $no_proxy

RUN pip install flask

RUN mkdir /src
VOLUME /src
WORKDIR /src

RUN groupadd -g 2200 appuser && \
useradd -r -u 2200 -g appuser appuser

USER appuser

ENV FLASK_APP=server.py
ENV FLASK_DEBUG=1
CMD flask run --host=0.0.0.0
64 changes: 64 additions & 0 deletions atelier-8/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
## Atelier 8 : Persistence des données

On a pas mal utiliser les volumes pour rafraîchir le code dans le conteneur.
Nous allons aller un peu plus loin cette fois-ci pour l'aspect backup.

## Fonctionnement du volume

```
docker stop mon-api
docker rm mon-api
# Aucun point de montage
mount | grep overlay
docker run -p 5000:5000 -v $PWD:/src -d --name mon-api atelier/first-container
# Point de montage type `overlay`
mount | grep overlay
```

Étant donnée qu'il s'agit d'un point de montage, la communication du volume et
bidirectionnel

On peut créer un fichier sur la machine host et le voir dans le container

```
touch unfichierHost
docker exec -it mon-api ls /src/
rm unfichierHost
```

On peut créer un fichier dans le container et le voir sur le host

```
docker exec -it mon-api ls /src/unfichierContainer
ls
rm unfichierContainer
```

## Montage en read-only

Nous pouvons aussi protéger notre configuration en écriture

```
docker stop mon-api
docker rm mon-api
docker run -d -p 5000:5000 -v $PWD:/src:ro --name mon-api atelier/first-container
docker inspect mon-api | jq .[0].Mounts
docker exec -it mon-api touch /src/toto
```

## Les logs

Si on se réfere au [12 factor apps](https://12factor.net/fr/). Les logs doivent
sortir sur la sortie standard.

De cette maniére, les logs sont capturé via `docker logs <container>`.

Et de cette manière, lorsque notre container est gérer par `systemd`, les logs
seront adressé à syslog où dans des fichiers spécifié qui pouront ensuite être
envoyé dans les outils de supervision.
10 changes: 10 additions & 0 deletions atelier-8/server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env python

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
return 'Hello, World!\n'
2 changes: 1 addition & 1 deletion atelier-compose-1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ On peut aussi spécifier explicitement le fichier a utiliser et utiliser
l'option `daemon` pour faire tourner tout ça en arrière plan

```
docker-compose -f docker-compose.yml -d up
docker-compose -f docker-compose.yml up -d
```

Et ensuite vérifier le résultat:
Expand Down
4 changes: 2 additions & 2 deletions atelier-compose-2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
Ici, on va juste observer ce qu'il se passe.

```
docker-compose -f docker-compose.yml -d up
docker-compose up -d
docker network list
```

On va donc modifier le fichier `docker-compose.yml`

```
docker-compose -f docker-compose.yml -d up
docker-compose up -d
docker network list
docker network inspect ateliercompose2_mon-api-compose-network
docker ps
Expand Down
20 changes: 20 additions & 0 deletions atelier-compose-3/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
FROM python:3.7.3

ENV http_proxy $http_proxy
ENV https_proxy $http_proxy
ENV no_proxy $no_proxy

RUN pip install flask

RUN mkdir /src
VOLUME /src
WORKDIR /src

RUN groupadd -g 2200 appuser && \
useradd -r -u 2200 -g appuser appuser

USER appuser

ENV FLASK_APP=server.py
ENV FLASK_DEBUG=1
CMD flask run --host=0.0.0.0
17 changes: 17 additions & 0 deletions atelier-compose-3/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## Atelier Compose 3: stockage partagé

Nous pouvons partagé des données entre container.
Regardons la sections `storages` du fichier `docker-compose.yml`

```
docker-compose up -d
docker ps
```

Nous allons maintenant ajouter un fichier dans le volume depuis le container
`mon-api` et voir ce fichier dans le container `redis`

```
docker exec --user root -it ateliercompose3_mon-api_1 touch /src/partage/fichierPartage
docker exec --user root -it ateliercompose3_redis_1 ls -l /opt
```
26 changes: 26 additions & 0 deletions atelier-compose-3/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
version: '2'

volumes:
data-volume:

services:
mon-api:
image: atelier/first-container
volumes:
- /home/stagiaire/formationDocker/atelier-compose-1:/src
- data-volume:/src/partage:rw
ports:
- "5000:5000"
networks:
- mon-api-compose-network

redis:
image: "redis:alpine"
volumes:
- data-volume:/opt:ro
networks:
- mon-api-compose-network

networks:
mon-api-compose-network:
driver: bridge
10 changes: 10 additions & 0 deletions atelier-compose-3/server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env python

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
return 'Hello, World!\n'

0 comments on commit 6cc2ed3

Please sign in to comment.