Memento Docker

 0
 0
Estimated reading time:4 minutes 58 seconds

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

```docker## image docker à utiliser utiliser comme base
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

  ```docker
  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
  • envoyer l'image sur le docker hub: docker push <login_docker_hub>/<nom_du_conteneur>:latest
    • exemple: docker push laurento/ocr-docker-build:latest

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

Previous Post Next Post