VM
Docker
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
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"
Un Processus isolé donc sans visions sur les autres applications ou fichiers
Simple à installer
Élimine les problèmes d'environnement
Migration plus faciles
Pourquoi?
Docker | Git | |
---|---|---|
Image | état sauvegardé | Commit |
Container | execution locale | Checkout |
Repository | collection de commits | Repository |
Docker Hub | server populaire | GitHub |
1.0 deployée en Juin 2014
sudo groupadd docker
sudo usermod -aG docker $USER
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???
FROM {base}:{version}
Permet de choisir une base pour l'image
FROM dungpb/dira_ros:ros
Docker hub
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
COPY {origine} {destination}
Permet de copier des dossiers de la machine hote vers l'image
COPY ./catkin_ws /catkin_ws
ADD {origine} {destination}
Permet de copier un fichier de la machine hote vers l'image
ADD ./startup.sh /catkin_ws/startup.sh
VOLUME {dossier}
Permet de partager un dossier entre l'hote et l'image
VOLUME /myvol
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
WORKDIR {dossier}
Permet de changer le répertoire courant de l'image
WORKDIR /catkin_ws/
CMD {commande}
Permet de lancer une commande au démarrage de l'image
CMD ./startup.sh
EXPOSE {port}
Permet de lier un port du conteneur avec la machine hote
EXPOSE 3000
Créer un Dockerfile pour ROS
Trouver une base
FROM dungpb/dira_ros:latest
Copier notre dossier catkin_ws
COPY ./catkin_ws /catkin_ws
Installer ros-${ROS_DISTRO}-image-transport-plugins
RUN apt-get update && apt-get -y install ros-${ROS_DISTRO}-image-transport-plugins
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
Make le projet
WORKDIR /catkin_ws/
RUN /bin/bash -c '. /opt/ros/melodic/setup.bash; catkin_make'
Lancer ROS
ADD ./startup.sh /catkin_ws/startup.sh
CMD ./startup.sh
BUILD {dossier}
Permet de contruire une image
docker build .
BUILD {dossier} -t {nom}
EXEC {container} {commande}
Lance une commande dans un container actif
docker exec -it ros bash
RUN {image} {commande}
Lance une commande dans un container
docker run -it ros bash
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 |
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
Affiche les containers en cours d'execution
docker ps
RM {hash|image}
Permet de supprimer une image
docker rm 4efaabe7379a
docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
LOGS {container}
Permet de voir les logs d'un container
docker logs ros
STOP {container}
Stop un container
docker stop ros
Merci pour votre attention