====== Docker - notes ====== **Toutes les commandes sont a exécuter en root.** apt-get install docker docker.io * image : paquet léger d'un exécutable (code, librairies, variables d'environnement, fichiers de config) * container : instance d'une image * services : defines how containers behave in production * Pour une appli distribuée, chaque morceau d'appli est un service * Les services sont des conteneurs en production * Un service lance une et une seule image * Un service définit le nombre de réplicas, les ports réseaux * Scaler un service revient à changer le nombre de conteneurs * stack : interactions of all the services * docker-compose : offre la possibilité de “composer” un ensemble de container sur une seule et même machine, mais également de “scaler” les containers toujours sur un même serveur. * swarm : docker utilise le composant swarm pour gérer la gestion de clusters Docker, le routage, la scalabilité, … (solution concurrente de Apache Mesos, Google Kubernetes, CoreOS, RancherOS), permet d'orchestrer les conteneurs sur plusieurs serveurs = solution de clusterisation de machines en mode "dockerisé" Définititon des images portables = Dockerfile = définition des appli + dépendances + config vi Dockerfile docker build -t . docker images docker images ==> aufs /dev/sda7 on / type xfs (rw,noatime,attr2,inode64,noquota) /dev/sda7 on /var/lib/docker/aufs type xfs (rw,noatime,attr2,inode64,noquota) Run the app, mapping your machine’s port 4000 to the container’s EXPOSEd port 80 using -p:\\ Met en évidence la différence entre Publish et Expose docker run -p 4000:80 friendlyhello docker ps * registery = ensemble de repositories * repository = ensemble d'images * Il y a un docker public registery (la CLI docker l'utilisa par defaut) docker login docker tag IMAGE[:TAG] IMAGE[:TAG] docker tag friendlyhello liberasys/get-started:part1 docker push liberasys/get-started:part1 Installation sur debian stretch : https://linuxconfig.org/how-to-install-docker-engine-on-debian-9-stretch-linux Déployer : docker login docker run liberasys/get-started:part1 ==== docker compose ==== Gère les services, fichier docker-compose.yml vi docker-compose-test.yml docker swarm init docker swarm join --token SWMTKN-1-0hruyzw7aj659s82d4rzw2ypxh0ycxbj3lk2gpei7kkgjjwycc-ebkxd2ol5r8xospv7b0z9v3sm 163.172.126.100:2377 docker stack deploy -c docker-compose.yml docker stack deploy -c docker-compose.yml getstartedlab docker ps docker stack ps getstartedlab vi docker-compose-test.yml # changer le nombre d'instances docker stack deploy -c docker-compose.yml getstartedlab docker stack ps getstartedlab Le nombre de containers est mis à jour, sans tout redémarrer ! ==== Fin du service ==== docker stack rm getstartedlab ==== Lister les noeuds swarm ==== docker node ls ==== terminer un swarm ==== docker swarm leave --force ==== jouer avec swarms ==== Il faut installer la machine binaire docker apt-get install curl curl -L https://github.com/docker/machine/releases/download/v0.12.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \ chmod +x /tmp/docker-machine && \ sudo cp /tmp/docker-machine /usr/local/bin/docker-machine docker-machine version ==== Installons des scripts sympatiques ==== cd /root mkdir docker-machine-scripts cd docker-machine-scripts wget "https://github.com/docker/machine/raw/master/contrib/completion/bash/docker-machine-prompt.bash" wget "https://github.com/docker/machine/raw/master/contrib/completion/bash/docker-machine-wrapper.bash" wget "https://github.com/docker/machine/raw/master/contrib/completion/bash/docker-machine.bash" cd /root echo "source /root/docker-machine-scripts/docker-machine.bash" >> .bashrc echo "source /root/docker-machine-scripts/docker-machine-wrapper.bash" >> .bashrc echo "source /root/docker-machine-scripts/docker-machine-prompt.bash" >> .bashrc echo "PS1='\${debian_chroot:+(\$debian_chroot)}\\h:\\w_\$(__docker_machine_ps1)\\$ '" >> .bashrc source .bashrc ==== Supprimer les machines docker ==== docker-machine rm docker-machine rm -f $(docker-machine ls -q) * Les managers swarm seulement peuvent exécuter les commandes * Les corkers sont des noeuds "exécutants" soumis aux swarm managers docker swarm init # sur le premier noeud docker swarm joinn # sur les autres noeuds ==== créer des VMs docker machine ==== docker-machine create --driver virtualbox myvm1 docker-machine create --driver virtualbox myvm2 https://docs.docker.com/get-started/part4/#create-a-cluster