====== Docker et DockerCompose ====== ===== Installation et configuration de Docker ===== ==== Centos 7 ==== * Ajout d'une partition * Les images et containers pouvant être volumineux, on ajoute un volume logique à la machine de **10go** et on le monte dans **/local/docker/** * Ajout du volume : ( Voir [[systemes/linux/lvm|Documentation LVM]] ) mkdir /var/lib/docker vim /etc/fstab /dev/vg1/local /local/docker xfs defaults 1 2 mount -a * Installation de docker : yum install docker ==== Centos 8 ==== La version de containerd.io n'est pas la bonne pour docker sur Centos8. On va utiliser une version précédente de Docker au lieu de forcer l'installation et d'avoir des erreurs à chaque mise à jour système * Installation de docker : # on ajoute le repo officiel dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo dnf install docker-ce # le probleme de dépendance est corrigé en docker 19 ==== Configuration et activation du service ==== * Ajout d'une partition * Les images et containers pouvant être volumineux, on ajoute un volume logique à la machine de **10go** et on le monte dans **/local/docker** * Ajout du volume : ( Voir [[systemes/linux/lvm|Documentation LVM]] ) mkdir /var/lib/docker vim /etc/fstab /dev/vg1/local /local/docker xfs defaults 1 2 mount -a * Configuration de docker mkdir /etc/docker/ mkdir /local/docker/ vim /etc/docker/daemon.json { "bip": "10.254.0.1/16", "default-address-pools": [ {"base":"10.10.0.0/16","size":24} ], "data-root": "/local/docker", "log-driver": "json-file", "log-opts": { "max-size": "500m", "max-file": "3" } } * Activation du service : systemctl enable docker --now ===== Installation et utilisation de Docker Compose ===== * **DockerCompose** est un gestionnaire de container qui s'abstien de nombreuses couches de configuration de container ( doc https://docs.docker.com/compose/install/) * Installation : curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ==== Exemple de fichier docker-compose.yml ==== * Exemple avec un système sharelatex simplifier version: '2.2' services: sharelatex: restart: always image: sharelatex/sharelatex:2.4.1 container_name: sharelatex depends_on: redis: condition: service_started mongo: condition: service_healthy privileged: true ports: - 5000:80 links: - redis - mongo volumes: - /local/sharelatex:/var/lib/sharelatex - /local/sharelatex:/var/log/sharelatex:rw - /var/run/docker.sock:/var/run/docker.sock environment: SHARELATEX_APP_NAME: Overleaf (ex ShareLaTeX) SHARELATEX_MONGO_URL: mongodb://10.254.0.1/sharelatex mongo: restart: always image: mongo container_name: mongo expose: - 27017 volumes: - ~/mongo_data:/data/db healthcheck: test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet interval: 10s timeout: 10s retries: 5 redis: restart: always image: redis container_name: redis expose: - 6379 volumes: - ~/redis_data:/data ==== Execution de docker-compose.yml ==== * Démarrage/Arrêt/Redémarrage du conteneur cd /local/nomApplication-compose # On crée notre fichier vim docker-compose.yml # creer un container et démarre un container en mode logs docker-compose up # creer un container et démarre un container en mode daemon docker-compose up -d # stop docker-compose down # redemarre un container ( il ne relis pas le docker compose et donc ne modifie pas les variables dans le container si le programme ne lit pas un fichier sur la machine hote ) docker-compose start docker-compose stop docker-compose restart * Executer des commandes dans le container docker-compose exec nomduservice nomdelacommande docker-compose exec sharelatex ls /etc/ docker-compose exec sharelatex /bin/bash ===== Problèmes connu ===== ==== Utiliser docker-compose dans un cron ==== Il faut utiliser **"-T"** à la commande exec pour ne pas avoir l'erreur **"the input device is not a TTY"** .... /usr/local/bin/docker-compose exec -T cas ls /var/log/tomcat/