Table des matières
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.
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 \
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 <key>=<value> <node> Ca donne pour nous “docker node update –label-add Site=Paris vm2
Pour effacer c'est “docker node update –label-rm <ckey> <node>
Pour voir les voir c'est “docker node inspect <node> –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/
