notebook/IT/Docker/index.md
vincent a065caf8cc
All checks were successful
continuous-integration/drone/push Build is passing
correct uppercase
2022-10-09 17:11:12 +02:00

127 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# docker
## concept
- image: template en lecture seul pouvant créer un container
- conteneur: instance d'une image
## command
- telecharger une image: `docker pull debian:$tag`
- crer et lancer un container en tty `docker run -it bash`
- arreter container: `docker stop`
- démarrer containeur: `docker start`
- lister tous les conteneur `docker ps -a`
- delete conteneur: `docker rm 2cdc
- run a commad in container: `docker exec`
- voir stdout d'un container: `docker logs`
- créer et lancer un conteneur `docker run -d --name node-app -p 3000:3000 -v $(pwd):/app node:0.12.4 node /app/server.js`
- -d lance en tant que daemon
- --name permet de nommer le conteneur
- -p associe le port au port de l'hote (1er port pour l'hote et second pour le conteneur)
- -v $(pwd):/app : cette option permet de partager un dossier avec votre conteneur, ici, nous partageons le dossier courant (où se trouve notre fichier server.js) avec le dossier /app dans le conteneur (attention si vous êtes sur Mac ou Windows uniquement votre 'home' est partagé).
- node:0.12.4 : l'image Docker que vous voulez utiliser.
- node /app/server.js : la commande à exécuter dans le conteneur.
## dockerfile
```conf
#FROM permet de définir notre image de base, vous pouvez l'utiliser seulement une fois dans un Dockerfile.
FROM debian
#RUN permet d'exécuter une commande à l'intérieur de votre image comme si vous étiez devant un shell unix.
RUN apt-get update \
&& apt-get install -y curl xz-utils \
&& rm -rf /var/lib/apt/lists/*
RUN curl -LO "https://nodejs.org/dist/v12.2.0/node-v12.2.0-linux-x64.tar.xz" \
&& tar -xJf node-v12.2.0-linux-x64.tar.xz -C /usr/local --strip-components=1 \
&& rm node-v12.2.0-linux-x64.tar.xz
#copy permet d'ajouter des fichiers locaux ou distants à l'intérieur de votre image, il est le plus souvent utilisé pour importer les sources de votre projet ou des fichiers de configuration.
COPY package.json /app/
#WORKDIR permet de changer le répertoire courant de votre image, toutes les commandes qui suivront seront exécutées à partir de ce répertoire.
WORKDIR /app
RUN npm install
#ajoute le répertoire a projet a l'image
COPY . /app/
#ADD permet de rcupérer des source depuis un url ou d'extraire une archive
#EXPOSE et VOLUME permettent respectivement d'indiquer quel port et quel dossier nous souhaitons partager.
EXPOSE 3000
VOLUME /app/log
#USER permet de selectionner kl'utilisateur qui lancera le service
#ENTRYPOINT ["executable", "param1", "param2"] sets the command and parameters that will be executed first when a container is run.
#instruction qui doit s'exécuter au lancement du conteneur
CMD node server.js
```
le .dockerignore permet comme un .gitignore de ne pas inclure certain fichiers dans l'image Docker,
## créer image
- lancer la build du fichier: `docker build -t nomducontainer:tag .`
- -t permet de nommer l'image docker
pour ajouter un tag il faut utiliser
`docker tag`
## docker compose
permet de gérer plusieur container ensemble (IaS)
exemple de fichier de confid en yaml:
```yaml
version: 3
services:
#1 container postgress avec son image et ces variable d'environement
postgres:
image: postgres:10
environment:
POSTGRES_USER: rails_user
POSTGRES_PASSWORD: rails_password
POSTGRES_DB: rails_db
redis:
image: redis:3.2-alpine
rails:
#lance une build en fontion du dockerfile locale
build: .
#n'est construit que lorsque les dependance dont ok
#depends_on crée un pointage au sein du réseau créé par Docker entre conteneur
depends_on:
- postgres
- redis
environment:
DATABASE_URL: 'postgres://rails_user:rails_password@postgres:5432/rails_db'
REDIS_HOST: 'redis:6379'
#monte le répertoire local sur /app
volumes:
- .:/app
nginx:
image: nginx:latest
links:
- rails
ports:
- 3000:80
#on ne monte ici que un fichier de configuration
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
```
- `docker-compose up` démarre les services décrits dans docker-compose.yml et ne rend pas la main.
- `docker-compose up -d` fait la même chose mais rend la main une fois que les services sont démarrés.
- `docker-compose up build` reconstruit les services avant de les lancer.
- `docker-compose down` stoppe les services.
- `docker-compose restart` redémarre lensemble des services.
- `docker-compose restart nginx` redémarre un des service (ici nginx).
- `docker-compose exec rails bash` fournit une console bash au sein du conteneur rails.
- `docker-compose logs` retourne lensemble des logs des services depuis le dernier démarrage et rend la main.
- `docker-compose logs -f` affiche les logs des services et continue à les « écouter » sansrendre la main.
- `docker-compose logs -f rails` fait la même chose pour le conteneur rails uniquement.