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.

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 \

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 <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é


QR Code
QR Code docker (generated for current page)