This repository has been archived on 2020-11-27. You can view files and clone it, but cannot push or open issues or pull requests.
readme/docker.md

128 lines
4.8 KiB
Markdown
Raw Normal View History

2019-05-15 18:10:09 +00:00
---
title: docker
---
2019-05-15 14:14:29 +00:00
# docker
2019-05-15 14:00:43 +00:00
## concept
- image: template en lecture seul pouvant créer un container
2019-05-15 15:56:49 +00:00
- conteneur: instance d'une image
2019-05-15 14:00:43 +00:00
## command
- telecharger une image: ` docker pull debian:$tag`
2019-05-15 14:51:12 +00:00
- crer et lancer un container en tty ` docker run -it bash `
- arreter container: `docker stop`
- démarrer containeur: `docker start`
2019-05-15 14:14:29 +00:00
- lister tous les conteneur `docker ps -a`
- delete conteneur: `docker rm 2cdc
2019-05-15 15:35:42 +00:00
- run a commad in container: `docker exec `
2019-05-15 16:42:24 +00:00
- voir stdout d'un container: `docker logs`
2019-05-15 14:51:12 +00:00
- 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`
2019-05-15 14:14:29 +00:00
- -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.
2019-05-15 15:35:42 +00:00
- node /app/server.js : la commande à exécuter dans le conteneur.
## dockerfile
```
#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 \
2019-05-15 15:56:49 +00:00
&& apt-get install -y curl xz-utils \
2019-05-15 15:35:42 +00:00
&& rm -rf /var/lib/apt/lists/*
2019-05-15 15:56:49 +00:00
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
2019-05-15 16:42:24 +00:00
#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/
2019-05-15 15:56:49 +00:00
2019-05-15 15:35:42 +00:00
#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
2019-05-15 16:42:24 +00:00
COPY . /app/
#ADD permet de rcupérer des source depuis un url ou d'extraire une archive
2019-05-15 15:35:42 +00:00
#EXPOSE et VOLUME permettent respectivement d'indiquer quel port et quel dossier nous souhaitons partager.
EXPOSE 3000
VOLUME /app/log
2019-05-15 16:42:24 +00:00
#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.
2019-05-15 15:35:42 +00:00
#instruction qui doit s'exécuter au lancement du conteneur
2019-05-15 15:56:49 +00:00
CMD node server.js
2019-05-15 15:35:42 +00:00
```
le .dockerignore permet comme un .gitignore de ne pas inclure certain fichiers dans l'image Docker,
2019-05-15 15:56:49 +00:00
- lancer la build du fichier: `docker build -t nomducontainer .`
2019-05-15 16:42:24 +00:00
- -t permet de nommer l'image docker
## docker compose
permet de gérer plusieur container ensemble (IaS)
exemple de fichier de confid en 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.