====== 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/