{{ ::docker.png?500 |}} ====== Définition ====== Docker permet d'embarquer une application dans un container virtuel qui pourra s'exécuter sur n'importe quel serveur. C'est une technologie qui a pour but de faciliter les déploiements d'application, et la gestion du dimensionnement de l'infrastructure sous-jacente. La virtualisation traditionnelle permet, via un hyperviseur, de simuler une ou plusieurs machines physiques, et les exécuter sous forme de machines virtuelles (VM) sur un serveur machine. Ces VM intègrent elles-mêmes un OS sur lequel les applications qu'elles contiennent sont exécutées. Ce n'est pas le cas du container. Le container fait en effet directement appel à l'OS de sa machine hôte pour réaliser ses appels système et exécuter ses applications. Historiquement, Docker repose sur le format de containers Linux, alias LXC. Il l'étend par le biais d'une API dans l'optique d'exécuter les applications dans des containers standards, qui sont donc portables d'un serveur Linux à l'autre. Comme le container n'embarque pas d'OS, à la différence de la machine virtuelle, il est par conséquent beaucoup plus léger que cette dernière. Il n'a pas besoin d'activer un second système pour exécuter ses applications. Cela se traduit par un lancement beaucoup plus rapide, mais aussi par la capacité à migrer plus facilement un container d'une machine physique à l'autre, du fait de son faible poids. [[http://www.journaldunet.com/solutions/cloud-computing/1146290-cloud-pourquoi-docker-peut-tout-changer/|Source]] ====== Docker sur debien jessie ====== ===== Installer docker ===== ajouter la ligne suivante dans le fichier /etc/apt/sources.list deb http://http.debian.net/debian jessie-backports main puis exécuté les instructions suivante passer en root sudo -s mettre à jour, récupérer l'image amd 64 et installer curl apt-get update apt-get -t jessie-backports install linux-image-amd64 apt-get install curl Attenton à bien sortir du root pour le curl exit curl -sSL https://get.docker.com/ | sh donner les droits à son utilisateurs d'utiliser docker et redémarrer sudo gpasswd -a ${USER} docker sudo service docker restart exit ===== Ajouter alpine (ou un autre os) à docker ===== Pour Télécharger une image alpine: Docker pull alpine pour changer l'os, changer le nom après pull, exemple: Docker pull ubuntu ===== Dockerfile ===== L’image du conteneur est générée à partir d’un Dockerfile. Les Dockerfiles sont des fichiers qui permettent de construire une image Docker adaptée à nos besoins, étape par étape, c’est une sorte de script qui permet d’installer les application, ses dépendances, et pré-configurer le futur conteneur. L’image générée pourra être instanciée très facilement sans tout réinstaller. Pour commencer, créez un nouveau fichier **Dockerfile** à la racine de votre projet. touch Dockerfile La première chose à faire dans un Dockerfile est de définir de quelle image vous héritez. Dans notre exemple plus nous utilisions alpine donc la première ligne du Dockerfile devra contenir la ligne suivante: FROM alpine **FROM** permet de définir notre image de base, vous pouvez l'utiliser seulement une fois dans un Dockerfile. **RUN** permet d'exécuter une commande à l'intérieur de votre image comme si vous étiez devant un shell unix. RUN apk update \ && apk upgrade \ && apk add -y apache2 \ [[http://putaindecode.io/fr/articles/docker/dockerfile/|Source]] ===== Manipulation ===== Voir les images docker images Voir les conteneurs docker ps -a Supprimer une image docker rmi "ID" ou docker rmi "nom de l'image" Supprimer un conteneur docker rm "nom" ou docker rm "ID" Supprimer tout les conteneurs docker rm $(docker ps -aq) wget sous alpine RUN apk update \ && apk add ca-certificates wget \ && update-ca-certificates changer d'IP curl -sS https://gist.githubusercontent.com/kamermans/94b1c41086de0204750b/raw/configure_docker0.sh | sudo bash -s - 192.168.254.1/24 ===== Docker Swarm ===== Pour rajouter un label swarm c'est "docker node update --label-add = Ca donne pour nous "docker node update --label-add Site=Paris vm2 Pour effacer c'est "docker node update --label-rm Pour voir les voir c'est "docker node inspect --pretty Uniquement sur le manager ===== Registry privé docker ===== Start your registry docker run -d -p 5000:5000 --name registry registry:2 Tag the image so that it points to your registry docker tag myapache ip:5000/myapache Push it docker push ip:5000/myapache Pull it back docker pull ip:5000/myapache Now stop your registry and remove all data docker stop registry && docker rm -v registry ===== Collecte de métriques, logs et monitorings ===== ==== Telegraf ==== wget https://dl.influxdata.com/telegraf/releases/telegraf_1.5.2-1_amd64.deb sudo dpkg -i telegraf_1.5.2-1_amd64.deb sudo systemctl start telegraf sudo mv /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.old sudo vim /etc/telegraf/telegraf.conf [tags] # Configuration for telegraf agent [agent] debug = false flush_buffer_when_full = true flush_interval = "15s" flush_jitter = "0s" hostname = "hostname_de_ma_machine" interval = "15s" round_interval = true sudo vim /etc/telegraf/telegraf.d/outputs.conf [[outputs.influxdb]] database = "telegraf" precision = "s" urls = [ "http://127.0.0.1:8086" ] username = "telegraf" password = "password" sudo vim /etc/telegraf/telegraf.d/inputs_system.conf # Read metrics about CPU usage [[inputs.cpu]] percpu = false totalcpu = true fieldpass = [ "usage*" ] # Read metrics about disk usagee [[inputs.disk]] fielddrop = [ "inodes*" ] mount_points=["/","/home"] # Read metrics about diskio usage [[inputs.diskio]] devices = ["sda2","sda3"] skip_serial_number = true # Read metrics about network usage [[inputs.net]] interfaces = [ "eth0" ] fielddrop = [ "icmp*", "ip*", "tcp*", "udp*" ] # Read metrics about memory usage [[inputs.mem]] # no configuration # Read metrics about swap memory usage [[inputs.swap]] # no configuration # Read metrics about system load & uptime [[inputs.system]] # no configuration ==== InfluxDB ==== wget https://dl.influxdata.com/influxdb/releases/influxdb_1.1.0_amd64.deb sudo dpkg -i influxdb_1.1.0_amd64.deb sudo systemctl start influxdb sudo influx >CREATE DATABASE telegraf >CREATE USER telegraf WITH PASSWORD 'password' >GRANT ALL ON telegraf TO telegraf >CREATE RETENTION POLICY thirty_days ON telegraf DURATION 30d REPLICATION 1 DEFAULT >exit ==== Kapacitor ==== wget https://dl.influxdata.com/kapacitor/releases/kapacitor_1.1.0_amd64.deb sudo dpkg -i kapacitor_1.1.0_amd64.deb sudo systemctl start kapacitor ==== Chronograf ==== wget https://dl.influxdata.com/chronograf/nightlies/chronograf_nightly_amd64.deb sudo dpkg -i chronograf_nightly_amd64.deb sudo systemctl start chronograf http://localhost:8888 ==== Grafana ==== $ wget https://grafanarel.s3.amazonaws.com/builds/grafana_4.0.0-1480439068_amd64.deb $ sudo apt-get install -y adduser libfontconfig $ sudo dpkg -i grafana_4.0.0-1480439068_amd64.deb ====== Erreur Docker ====== ===== Docker fail start (code=exited, status=1/FAILURE) ===== créer le dossier /etc/systemd/system/docker.service.d/ mkdir /etc/systemd/system/docker.service.d/ créer le ficher overlay.conf vim /etc/systemd/system/docker.service.d/overlay.conf et le remplir avec les lignes suivante [Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// -s overlay actualisé les changements en exécutant: sudo systemctl daemon-reload vérifier que la configuration a été chargée: systemctl show --property=ExecStart docker redémarrer docker: sudo systemctl restart docker ===== Changer d'IP après l'érreur ===== Rajouter l'IP dans /etc/systemd/system/docker.service.d/overlay.conf vim /etc/systemd/system/docker.service.d/overlay.conf [Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// -s overlay --bip=192.168.169.1/24 reload daemon systemctl daemon-reload stop docker systemctl stop docker installer les outils bridge sudo apt-get install bridge-utils down et del docker0 sudo ip link set docker0 down sudo brctl delbr docker0 start docker daemon systemctl start docker utilise le script ip curl -sS https://gist.githubusercontent.com/kamermans/94b1c41086de0204750b/raw/configure_docker0.sh | sudo bash -s - 192.168.254.1/24 ====== Lien à trié ====== http://blog.d2-si.fr/2016/06/29/start-up-docker-swarm/ https://www.guillaume-leduc.fr/docker-comme-solution-de-virtualisation-theorie.html http://putaindecode.io/fr/articles/docker/dockerfile/ https://hub.docker.com/_/swarm/ http://zoneadmin.fr/forum/threads/influxdb-grafana.490/ http://docs.grafana.org/installation/debian/