Docker
Sommaire
- Docker, c'est quoi?
- Créer un container (disons pour ROS)
- Utiliser un container
Docker, c'est quoi?
Une machine virtuelle?
VM
Docker
En pratique
VirtualBox | Docker | |
---|---|---|
Démarrage | ~ 1 min | ~ 0.3 sec |
Mémoire | ~ 256 Mo | ~ 1 Mo |
Espace disque | ~ 1 Go | ~ 100 Ko |
Docker:
VM:
Léger
Rapide
Possibilité de faire du réseau
Sécurité
Environment atypique
Un processus qui ment?
Non, c'est un container
set -eux
wget bit.ly/fish-container -O fish.tar
mkdir container-root
cd container-root
tar -xf ../fish.tar
uuid="cgroup_$(shuf -i 1000-2000 -n 1)"
cgcreate -g "cpu,cpuacct,memory:$uuid"
cgset -r cpu.shares=512 "$uuid"
cgset -r memory.limit_in_bytes=1000000000 "$uuid"
cgexec -g "cpu,cpuacct,memory:$uuid" \
unshare -fmuipn --mount-proc \
chroot "$PWD" \
/bin/sh -c "/bin/mount -t proc proc /proc && hostname container-fun-times && /usr/bin/fish"
Container
Un Processus isolé donc sans visions sur les autres applications ou fichiers
Simple à installer
Élimine les problèmes d'environnement
Migration plus faciles
Pourquoi?
Un moyen facile d'utiliser des containers
Docker | Git | |
---|---|---|
Image | état sauvegardé | Commit |
Container | execution locale | Checkout |
Repository | collection de commits | Repository |
Docker Hub | server populaire | GitHub |
L'histoire de Docker
- dotCloud projet révélé à la PyCon 2013
- Depuis:
- 100 million Docker Engine téléchargées
- 45,000 applications "Dockerizés" dans Docker Hub
- 720+ contributeurs
- 18,000+ étoiles sur GitHub
- dotCloud change de nom pour Docker
1.0 deployée en Juin 2014
Installer Docker
- Installer le package:
- sudo apt install docker.io
- Ajouter son utilisateur au groupe docker:
-
sudo groupadd docker
-
sudo usermod -aG docker $USER
-
- Redémarrer sa session
Créer une image (disons pour ROS)
Dockerfile
Comment créer un dockerfile?
Créer un fichier nommé Dockerfile
Le fichier qui contient les instructions de création d'une image
Le quoi???
Dockerfile
FROM:
FROM {base}:{version}
Permet de choisir une base pour l'image
FROM dungpb/dira_ros:ros
Dockerfile
Où trouver les bases?
Docker hub
Dockerfile
RUN:
RUN {commande}
Permet de lancer une commande dans l'image lors de sa création
RUN apt-get update && apt-get -y install ros-melodic-husky-simulator
Dockerfile
COPY:
COPY {origine} {destination}
Permet de copier des dossiers de la machine hote vers l'image
COPY ./catkin_ws /catkin_ws
Dockerfile
ADD:
ADD {origine} {destination}
Permet de copier un fichier de la machine hote vers l'image
ADD ./startup.sh /catkin_ws/startup.sh
Dockerfile
VOLUME:
VOLUME {dossier}
Permet de partager un dossier entre l'hote et l'image
VOLUME /myvol
Dockerfile
ADD, COPY, VOLUME, quelle difference?
ADD
COPY
VOLUME
Ajoute la copie d'un fichier
Ajoute la copie d'un dossier
Partage le dossier
Une modification du fichier ne modifiera pas le fichier d'image
Une modification du fichier change le fichier de l'image
Dockerfile
WORKDIR:
WORKDIR {dossier}
Permet de changer le répertoire courant de l'image
WORKDIR /catkin_ws/
Dockerfile
CMD:
CMD {commande}
Permet de lancer une commande au démarrage de l'image
CMD ./startup.sh
Dockerfile
EXPOSE:
EXPOSE {port}
Permet de lier un port du conteneur avec la machine hote
EXPOSE 3000
Dockerfile
Créer un Dockerfile pour ROS
- Trouver une base
- Copier notre dossier catkin_ws
- Installer ros-${ROS_DISTRO}-image-transport-plugins
- Ajouter les configuratons dans le fichier ~/.bashrc
- Make le projet
- Lancer ROS
Dockerfile
Trouver une base
FROM dungpb/dira_ros:latest
Dockerfile
Copier notre dossier catkin_ws
COPY ./catkin_ws /catkin_ws
Dockerfile
Installer ros-${ROS_DISTRO}-image-transport-plugins
RUN apt-get update && apt-get -y install ros-${ROS_DISTRO}-image-transport-plugins
Dockerfile
Ajouter les configuratons dans le fichier ~/.bashrc
RUN echo "export ROS_HOSTNAME=localhost" >> $HOME/.bashrc
RUN echo "export ROS_MASTER_URI=http://localhost:11311" >> $HOME/.bashrc
Dockerfile
Make le projet
WORKDIR /catkin_ws/
RUN /bin/bash -c '. /opt/ros/melodic/setup.bash; catkin_make'
Dockerfile
Lancer ROS
ADD ./startup.sh /catkin_ws/startup.sh
CMD ./startup.sh
Utiliser une image
BUILD:
BUILD {dossier}
Permet de contruire une image
docker build .
Donner un nom à une image
BUILD {dossier} -t {nom}
EXEC:
EXEC {container} {commande}
Lance une commande dans un container actif
docker exec -it ros bash
RUN:
RUN {image} {commande}
Lance une commande dans un container
docker run -it ros bash
Autres manières d'utiliser la commande docker run
Commande | Description |
---|---|
docker run -it | affiche des informations sur les processus (Full) |
docker run -v hote:container | partage un volume avec le container |
docker run -network=host | partage tous les ports entre le container et l'hote |
docker --rm | stop le container a la fin de la commande |
Autres manières d'utiliser la commande docker run
Commande | Description |
---|---|
docker run -d | lance le container en mode détaché |
docker run -p port_hote:port_container | partage un port avec le container |
docker run {container} | Lance le container avec la commande par défault |
PS:
PS
Affiche les containers en cours d'execution
docker ps
RM:
RM {hash|image}
Permet de supprimer une image
docker rm 4efaabe7379a
Supprimer tous ses containers
-
docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
LOGS:
LOGS {container}
Permet de voir les logs d'un container
docker logs ros
STOP:
STOP {container}
Stop un container
docker stop ros
Merci pour votre attention
Docker
By Cyrille Coquard
Docker
- 196