September, 10 2020

Memento Docker
Voici une liste des principales notions et commandes utilisées par Docker.
Ce fichier est un canevas qui s'étoffera au fur et à mesure de mes expérimentations sur cet outil et son éco système .
Références/Sources:
Base
Installation & setup
- télécharger et installer docker:
sudo pacman -S docker
(Arch linux) - créer un compte sur le Docker Hub
- ajouter l'utilisateur linux au groupe docker:
sudo usermod -aG docker $USER
- se loguer:
docker login
- tester l'installation:
docker run hello-world
Remarques
- si une image n'est pas présente dans le système, elle sera automatiquement téléchargée depuis le docker Hub
- les définitions de conteneurs sont stockés dans
/var/lib/docker/containers
- les images des conteneurs sont stockés dans
/var/lib/docker/image/overlay2/imagedb/content/sha256/
(par défaut, mais dépend du type de stockage utilisé)
Utilisation
- Récupérer une image sur le Docker Hub sans lancer de conteneur:
docker pull hello-world
- Lancer une instance de conteneur (exemple nginx):
docker run -d -p 8080:80 nginx
- -d: détacher le conteneur du processus principal, permet de continuer à utiliser la console pendant que votre conteneur tourne sur un autre processus
- -p: définir l'utilisation de ports. Ici, transférer le trafic du port 8080 vers le port 80 du conteneur.
- Rentrer dans le conteneur pour y effectuer des actions:
docker exec -ti ID_RETOURNÉ_LORS_DU_DOCKER_RUN bash
- Lister les conteneurs en cours de fonctionnement:
docker ps
- Lister tous les conteneurs existants:
docker ps -a -s
- -s : affiche la taille de chaque conteneur
- Supprimer les conteneurs qui ne sont pas en cours de fonctionnement:
bash -c "docker rm `docker ps -aq -f status=exited`"
- Supprimer l'ensemble des ressources:
docker system prune
Créer un conteneur (ie une image)
Le fichier dockerfile
- le fichier Dockerfile est la recette décrivant le conteneur et permettant de le construire
- instructions de base du fichier Dockerfile:
FROM: définir l'image source
RUN: exécuter des commandes dans votre conteneur
ADD: ajouter des fichiers dans votre conteneur (depuis le host)
WORKDIR: définir votre répertoire de travail
EXPOSE: définir les ports d'écoute
VOLUME: définir les volumes utilisables (depuis le host)
CMD: définir la commande par défaut lors de l’exécution du conteneur - Docker va créer un conteneur pour chaque instruction, et le résultat sera sauvegardé dans un layer. Le résultat final étant un ensemble de layers qui construisent une image Docker complète.
- Si un layer ne bouge pas entre deux builds, Docker ne la reconstruira pas.
- exemple d'un fichier Dockerfile
FROM debian:9## execute des commandes dans le conteneur (télécharge node et ses dépendances)
RUN apt-get update -yq \
&& apt-get install curl gnupg -yq \
&& curl -sL https://deb.nodesource.com/setup_10.x | bash \
&& apt-get install nodejs -yq \
&& apt-get clean -y## copier des fichiers du host vers le conteneur
ADD . ./app/## change dir (dans le conteneur)
WORKDIR /app## installation de node
RUN npm install## port d écoute du conteneur
EXPOSE 2368## répertoire partagés avec le host
VOLUME /app/logs## commande par défaut:lancement de node
CMD npm run start
Le fichier .dockerignore
-
le fichier .dockerignore permet d'ignorer certains fichiers et/ou dossiers dans notre conteneur lors de l’exécution de l'instruction ADD
-
exemple d'un fichier .dockerignore
node_modules .git
Créer une image Docker
- lancer le build:
docker build -t ocr-docker-build
- -t : donner un nom au conteneur
- . :répertoire où se trouve le Dockerfile
Utiliser Docker Hub
Publier une image
- créer un dépot pour ce conteneur sur docker Hub (ex: repoTest)
- taguer le conteneur à envoyer:
docker tag <nom_du_conteneur:latest|ID_du_conteneur> <login_docker_hub>/<nom_du_conteneur>:latest
- exemple:
docker tag ocr-docker-build:latest laurento/ocr-docker-build:latest
- exemple:
- envoyer l'image sur le docker hub:
docker push <login_docker_hub>/<nom_du_conteneur>:latest
- exemple:
docker push laurento/ocr-docker-build:latest
- exemple:
Recherche des images (conteneur) existants
- sur le web: aller sur
https://hub.docker.com/search/?type=image
- en ligne de commande: `docker search
Utiliser Docker Compose
- Docker Compose permet de regrouper des conteneurs au sein d'un même conteneur et donc faciliter le déploiement de stacks completes
- commande de base:
docker-compose up -d: démarrer l'ensemble des conteneurs en arrière-plan
docker-compose ps: voir le status de l'ensemble de votre stack
docker-compose logs -f --tail 5: afficher les logs de votre stack
docker-compose stop: arrêter l'ensemble des services d'une stack
docker-compose down: détruire l'ensemble des ressources d'une stack
docker-compose config: valider la syntaxe de votre fichier docker-compose.yml
Le fichier docker-compose.yml
- le fichier docker-compose.yml est la recette décrivant le conteneur composite et permettant de le construire
- instructions de base du fichier docker-compose.yml :
image: spécifier l'image source pour le conteneur
build: spécifier le Dockerfile source pour créer l'image du conteneur
volume: spécifier les points de montage entre le système hôte et les conteneurs
restart: définir le comportement du conteneur en cas d'arrêt du processus
environment: définir les variables d’environnement
depends_on: dire que le conteneur dépend d'un autre conteneur
ports: définir les ports disponibles entre la machine host et le conteneur. - exemple d'un fichier docker-compose.yml pour une stack mysql 5.7 + wordpress
version: "3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
Créer et lancer une image composite
- se placer dans le dossier du fichier docker-compose.yml et lancer
docker-compose up -d