{{ ::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/