Poppy(robot) en apprentissage
1) poppy est un robot dédié à l’apprentissage(perso,écoles,universités,recherche etc)
2) poppy est open source(libre) et il utilise des composants ouverts en logiciels, mécanique, électronique…
3) poppy est le papa de poppy humanoid, poppy torso….
4) poppy a une communauté très active mondialement connu
5) poppy est cool, il est facile à installer et il peut apprendre tout seul son environnement(voir l’intégration des composants IA, machine learning…)
6) poppy peut servir d’une base pour les projets industriels ou personnels
7) ses éléments peuvent être créer depuis une imprimante 3D
8) il peut utiliser le langage python(snap comme scratch de MIT…), c++ , javascript etc
et les infos sont sur poppy-project.org
Container Docker sous linux et qq commandes de base
docker(service/daemon) utilise le référentiel des « images » conteneur sur son hub officiel accessible avec un compte. On peut utiliser(installer) ou partager un image(conteneur).
L’application(service) conteneur Docker s’installe généralement bien sous linux mais il existe une version sous Ms Windows ou Mac OSX.
Docker permet de virtualiser ou de « contenairiser » « une » application sur votre système. Docker vous permet de créer sa « machine virtuelle » avec sa carte réseau virtuelle, son disque ou volume, sa carte graphique etc.
Docker bénéficie directement aux ressources physiques de votre serveur qui n’est pas le cas avec les applications de virtualisations comme vmware,virtualbox ou hyperv.
Attention, à chaque redémarrage de container(qui est lié à une image applicative), les données sont toujours ré-initialisées. L’utilisation de volume de données lors du lancement du container ou la sauvegarde de la nouvelle image vous permet de garder vos données lors d’un ré-démarrage de votre serveur.
Par défaut, docker utilise le dossier /var/lib/docker. A chaque exécution d’un container, on a toujours un nouveau nom de dossier(nom très aléatoire et unique) dans le répertoire /var/lib/docker/overlay2(ici overlayfs est le système de fichiers utilisé).
Ce nom de dossier ne doit pas être supprimé manuellement, il contient les dossiers importants(diff,link,lower,merged et work )au bon fonctionnement de docker.
Ne pas oublier de faire une sauvegarde(vos données, votre volume, votre nouvelle image…) avant de quitter votre conteneur.
La mutualisation de volume entre un ou plusieurs dockers pourrait provoquer de la corruption de vos données. Il est donc important de faire une réflexion sur l’architecture et la sécurité de vos données mutualisées.
Il est bien entendu possible de spécifier le droit d’accès(ro:read only,rw:read-write…) à ce volume monté
1) Installation sous gnu linux debian(ver 9) sous le compte root
#apt-get install apt-transport-https dirmngr
#echo ‘deb https://apt.dockerproject.org/repo debian-stretch main’ >> /etc/apt/sources.list
#apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys
#apt-get update
#apt-get install docker-engine
/*installation temporaire et démarrage de l’image debian depuis le hub officiel de docker*/
#docker run -it debian /bin/bash
Et! voilà, conteneur docker « debian » est installé sur votre serveur local.
2) Installation d’un image « debian » sur votre machine debian
//version basique
#docker run -it debian /bin/bash
//version un peu perso…
#docker run -it –name=mondebian -p 8080:80 -v /var/www/html/prod/monsite:/var/www/html/preprod/monsite:ro debian /bin/bash
Ici, /var/www/html/preprod est lié en lecture seulement(ro) au dossier local /var/www/html/prod/monsite
et on forward le port 8080 vers 80 du conteneur.
3) Sortir du conteneur sans arrêter le conteneur:
-appuyez sur les touches « ctrl-p puis ctrl-q »
4) Sortir définitivement du conteneur:
-saisir la commande « exit »
5) Lister les conteneurs crées(installés) sur votre machine:
#docker container ls
6) Entrer dans le conteneur(déjà lancé ou en mode running)
#docker exec -it monConteneurID /bin/bash
7) Inspecter(disques, ip etc) le contenu du conteneur:
#docker inspect monConteneurID
8) Arrêter et supprimer le conteneurVM sur votre machine:
#docker stop monConteneurID
#docker rm monConteneurID
et supprimer l’image si besoin
#docker images
#docker rmi
9) Créer un volume nfs et copier un dossier du conteneur vers un dossier local :
#docker volume create –opt type=nfs –opt device=:/foo –opt o=addr=x.x.x.x,rsize=1024,wsize=1024
Copier le dossier depuis le conteneur(mon_src_path) vers le local(dest_path)
#docker cp containerName:mon_src_path dest_path
10) Partager un volume(ex: /var/www/html) entre deux conteneurs:
#docker run -it —name mon_nom_container1 -h mon_nom_host_container1 -v /var/www/html appconteneurs/container1
#docker run -it —name samba -h samba —volumes-from mon_nom_container1 —p 138:138/udp -p 139:139 -p 445:445/udp appconteneurs/samba
11) Sauvegarder et restaurer votre image:
#docker save busybox > busybox.tar
et la restaurer par:
#docker load < busybox.tar
12) Créer votre conteneur applicatif(image appli) docker:
Principe:
La création de votre conteneur sera implémenté par une image de conteneur de docker de base d’un système d’exploitation de base(ex: debian/wheezy).
12-1) identifier l’application à conteneuriser existant sur votre base de conteneur
12-2) créer votre dossier qui sera le nom de votre image
12-3) créer votre fichier DockerFile dans ce nouveau dossier
12-4) insérer les commandes de création de votre conteneur dans le fichier DockerFile
Exemple:
FROM debian:wheezy
MAINTAINER <votre nom> <votre email>
ENV DEBIAN_FRONTEND noninteractive
RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -y -q && apt-get install -y curl && apt-get -y -q autoclean && apt-get -y -q autoremove)
RUN apt-get install -y -q <votre-application-à-conteneuriser>
# possibilité d’installer votre application depuis internet
#RUN curl -LO « https:…./votre-appli.tar.gz && tar -xzf votre-appli.tar.gz -C /usr/local –strip-components=1 && rm votre-appli.tar.gz
#ajout de conf specifique à votre conteneur
#ADD votre-appli.conf /etc/appli/votre-appli.conf
#aller dans le dossier courant lors du process de production de votre conteneur
#WORKDIR /applis
#RUN install
#ADD . /applis/
#port de votre conteneur
EXPOSE <votre-port-du-coteneur>
#partage de votre dossier sur le hote
VOLUME /var/log/votre-appli
12-5) création de votre conteneur:
aller dans votre dossier contenant votre fichier DockerFile, puis lancer la commande suivante:
#docker build -t .
…
12-6) vérification de votre image crée:
#docker images
#docker images inspect monImageId
12-7) exécution votre conteneur:
#docker run -d -p :
13) Ajouter/supprimer plusieurs interfaces réseaux à son container docker:
13-1) Ajout interface
#docker network create options myNETWORK=….
puis créer le service etc
///exemple de création de réseau lan(bridge) en 172.19.0.0
#docker network create –subnet=172.19.0.0/16 mynet19
///association en adresse ip statique(172.19.0.20) du container lié à l’image myIMAGEid et on l’exécute dans un bash
#docker run –net mynet19 –ip 172.19.0.20 -it myIMAGEid /bin/bash
13-2) Suppression interface(bridge):
ici, on supprime l’interface bridge br-6b6a3af14474 sous linux si on n’a pas fait la suppression depuis la commande de docker(#docker network rm NETWORK [NETWORK…])
#ip link del br-6b6a3af14474
…(à suivre)
14) Ajouter un volume à chaud à son container docker:
…(à suivre)
15) Redémarrer un conteneur:
#docker restart conteneurID
L’architecture de docker se repose sur 4 composants:
-docker-engine(step 1)
-containerd(step 2) (un container contient au moins un ou plusieurs container-shim)
-containerd-shim(step 3)(un containerd-shim est associé à un et un seul runC)
-runC(toute création de container passe par le service runC)
16) Rechercher le runtime utilisé:
#docker info|grep -i runtime
17) Format du process container docker :
#docker-containerd-shim /var/run/docker/libcontainerd/ docker-runc
18) Debogage de docker :
#service docker stop
//lancer le programme « dockerd » (sans passer par service….)
#dockerd
19) Information liée au système docker, container,df etc
#docker system info
20) Sauvegarde de votre conteneur avant de quitter:
#docker commit mon_conteneur ma_nouvelle_image
#docker rm -f mon_conteneur
=> mes données sont donc écrites dans ma nouvelle image(ma_nouvelle_image)
Remarque:
-On ne peut pas faire un montage de nfs sous un conteneur docker
-l’outil « sysdig » permet de tracer les appels systeme au sein de chaque conteneur(container).
-Pour de raison de sécurité de votre système hôte,il est vivement conseillé d’executer votre container avec un utilisateur(non root) appartenant au groupe docker(sudo usermod -a -G docker votre_user)