Utilisation de docker

Si toutefois, vous ne trouviez pas la réponse à vos questions sur cette page, vous pouvez venir poser vos questions à Jean-Mathieu en H105.

Problèmes récurrents

  • Je n'ai plus d'espace disque, mon dossier /var est imposant.

–> Soit vous ne supprimez pas assez souvent (voir pas du tout) vos conteneurs. Les conteneurs ne sont pas faits pour stocker des informations. Ils doivent être utilisés pour fournir un environnement (un serveur, une application). Les données importantes (si il y en a) doivent être localisées en dehors du conteneur. C'est le cas dans les alias que vous fournissent les enseignants (l'option -v). Tous vos conteneurs finissent par prendre de la place, beaucoup de place, il faut donc les supprimer :

docker stop `docker ps -aq` # back quote AltGr + 7
docker rm `docker ps -aq`
# Pour info: docker ps -a liste en mode verbeux tout les conteneurs (lancés ou à l'arrêt), -q permet de ne voir s'afficher que les identifiants des conteneurs
Astuce: Utiliser l'option –rm dans la commande de lancement d'un conteneur, exemple avec l'image android-dev:
docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v ${HOME}/AndroidProjects:/home/android/AndroidProjects -v /dev/bus/usb:/dev/bus/usb --device=/dev/bus/usb:/dev/bus/usb:rwm -ti android-dev:latest

Cela permet de supprimer le conteneur dès que celui-ci est arrêté.

–> Soit vous avez trop d'images et de trop grande taille, il faut faire le ménage:

docker images # liste les images
docker rmi mon_image # supprime l'image mon_image

–> Dans le cas ou vous auriez quand même des données importantes dans un conteneur. Voici une méthode pour les pérenniser :

docker commit nom_conteneur nom_nouvelle_image # Permet de créer l'image nom_nouvelle_image
docker rm -f nom_conteneur # Supprime le conteneur avec les données sensibles
docker run -it nom_nouvelle_image /bin/bash # Lance un conteneur avec les données sensibles qui désormais persistent dans l'image nom_nouvelle_image
Attention, en cas de suppression de l'image nom_nouvelle_image :
# docker rmi nom_nouvelle_image

Vous perdez les données sensibles liées à l'image nom_nouvelle_image.

Dans tous les cas

  • Pour utiliser docker, vous devez vous connecter à un réseau. Ensuite, vérifiez que le sous réseau d'interface docker0 est bien présent :
login@machine $ ifconfig
docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
          inet adr:172.17.42.1  Bcast:0.0.0.0  Masque:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          Packets reçus:0 erreurs:0 :0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          Octets reçus:0 (0.0 B) Octets transmis:0 (0.0 B)
...

Sur les portables M1 M2

Utilisation d'un serveur apache php mysql avec phpmyadmin

docker load -i php-dev.tar
rm php-dev.tar
alias @php-dev='docker run --rm -it --name phpDev -p 80:80 -p 3306:3306 -v $HOME/Mes_projets_web:/home/php_dev/Mes_projets_web php-dev'
@php-dev

Voir utilisation du conteneur php-dev

Sur les postes AIO L3

Docker n'est pas directement utilisable par les utilisateurs. Il faut utiliser à la place la commande wdocker
Tout les containers lancés sont automatiquement stoppés et supprimés chaque jour. Vous ne pouvez donc pas conserver vos configurations.
Votre répertoire personnel (home) étant stocké à distance, docker (qui appartient au groupe root) n'a pas tous les droits sur votre home. De fait, les droits de votre home devraient être à minima en 711 afin de permettre à vos container docker d'accéder en lecture à vos fichiers.

Alias

Tout les alias concernant docker sont préfixés par _. Pour lister toute les commandes possibles concernant docker, il vous suffit donc de taper:

$ _ 

et d'appuyer deux fois sur la touche tab (auto-complétion)

Commandes utiles

_showImages # Liste les images disponibles
_clean # Permet de supprimer tous les conteneurs, à utiliser en cas de problème

Images disponibles

Serveur php mysql

_php-dev 

Permet de lancer un serveur php mysql avec interface phpmyadmin, création d'un répertoire $HOME/Mes_projets_web si celui-ci n'existe pas, vos fichiers php, html, css, … doivent se trouver dans ce dossier. Une fois que vous obtenez le prompt:

@phpDev:~/Mes_projets_web$

Exécutez un navigateur web et allez à l'adresse http://localhost et http://localhost/phpmyadmin . Les mots de passe phpmyadmin pour le conteneur en cours sont disponibles à tout moment de cette manière:

 @phpDev:~/Mes_projets_web$ cat ../php_dev_passwd.txt
Les bases de données créées dans cet environnement sont systématiquement supprimées. Vous pouvez les sauvegarder via l'onglet exporter dans phpmyadmin
Mise à jour: La version 7 de php est disponible via _php7-dev

Serveur PostgreSQL

Il faudra travailler dans le répertoire /home/pgsql_dev/Mes_projets_pgsql

Version mono-utilisateur
_postgresqlDev_mono

Permet de lancer un serveur postgreSql en mode utilisateur unique. Vous disposez de tout les droits sur la base. Une base postgres a été créée par défaut. D'autres bases sont créées au lancement du conteneur.

@pgsqlDev:~/Mes_projets_pgsql$ psql nom_base
#nom_base
Version multi-utilisateurs
_postgresqlDev_multi

Permet de lancer un serveur postgreSql en mode utilisateur multiple (i.e.: les bases sont accessibles via les autres postes du réseaux local). Vous disposez de tout les droits sur la base. Une base “postgres” a été créée par défaut. D'autres bases sont créées au lancement du conteneur.

@pgsqlDev:~/Mes_projets_pgsql$ psql nom_base
#nom_base

Après création d'une base et attribution des droits, un autre utilisateur peut accéder à la base créée depuis un autre poste avec le client psql directement sur la machine (sans avoir à lancer de conteneur), On admet qu'un conteneur a été lancé sur le poste g105-1 et que l'on souhaite se connecter à la base nom_base depuis le poste g105-2:

@g105-2:~$ psql -h g105-1 -U postgres -d nom_base
#nom_base
Documentation

Une documentation (en français) très complète pour l'utilisation de PostgreSQL est disponible à l'adresse http://docs.postgresql.fr

Environnement de développement android (SDK)

_androidDev

Permet de lancer un environnement de développement android (SDK), création d'un répertoire $HOME/AndroidProjects si celui-ci n'existe pas. Vos fichiers de développement doivent se trouver dans ce dossier. Une fois que vous obtenez le prompt:

@androidDev:~/AndroidProjects$

Vous pouvez lancez l'interface graphique de Android Studio de cette manière:

_androidDev:~/AndroidProjects$ studio

Environnement de développement c++/Qt SDK

_cppDev

Permet de lancer un environnement de développement c++/Qt SDK, création d'un répertoire $HOME/Mes_projets_cpp si celui-ci n'existe pas. Vos fichiers de développement doivent se trouver dans ce dossier. Une fois que vous obtenez le prompt:

@cppDev:~/Mes_projets_cpp$

Vous pouvez lancez les alias décrit au dessus du prompt (kdevelop, qtcreator, …)

Nos images docker chez vous

Nous mettons à votre disposition des images docker que vous utiliserez pour certains enseignements. Vous pouvez tout a fait récupérer ces images pour les utiliser chez vous. Toutes les images sont disponible sous forme d'archive sur http://docker.info-ua/ en local ou sur http://docker.info.univ-angers.fr/ depuis internet.

Prérequis:

  • Être dans le groupe docker:
usermod -aG docker my_user_name

* Si vous êtes sur une debian pure, ne lisez pas le point suivant
  • Sur d'autres distribution (par exemple ubuntu), le backend storage par défaut peut-être en aufs. Afin d'avoir une réactivité accrue des conteneurs, nous vous conseillons de passer le backend storage en devicemapper. Attention, effectuez cette manipulation uniquement si vous n'avez pas de container en cours, dans le cas contraire, commencez par commiter les conteneurs qui vous sont chers et sauvegardez vos images.
docker ps -a
docker stop `docker ps -aq`
# Pour tout vos containers important
docker commit monPrecieuxConteneur nomDeMaPrecieuseImagePouvantRestituerMonPrecieuxConteneur

# Pour toute vos images importante
docker save maPrecieuseImagePouvantRestituerMonPrecieuxConteneur maPrecieuseImagePouvantRestituerMonPrecieuxConteneur.tar.gz
docker save uneImagePrecieuse uneImagePrecieuse.tar.gz 
# Passer de aufs à devicemapper en backend storage
echo "DOCKER_OPTS=\"--storage-driver=devicemapper\"" > /etc/default/docker
service docker restart

Lancement des conteneurs

Pour les conteneurs nécéssitant l'interface graphique, il peut être nécéssaire d'appliquer la commande suivante:
vous@votre_pc$ xhost +local:docker
  • Pour android-dev.tar:
vous@votre_pc$ docker load -i android-dev.tar
vous@votre_pc$ docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v ${HOME}/AndroidProjects:/home/android/AndroidProjects -ti android-dev:latest
  • Pour php-dev.tar:
vous@votre_pc$ docker load -i php-dev.tar
vous@votre_pc$ docker run --rm -it --name phpDev -p 80:80 -p 3306:3306 -v $HOME/Mes_projets_web:/home/php_dev/Mes_projets_web php-dev
  • Pour cpp-dev.tar:
vous@votre_pc$ docker load -i cpp-dev.tar
vous@votre_pc$ docker run --rm -it --name cppDev -v $HOME/Mes_projets_cpp:/home/cpp_dev/Mes_projets_cpp -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY cpp-dev
  • Pour postgresql-dev.tar:
vous@votre_pc$ docker load -i postgresql-dev.tar
vous@votre_pc$ docker run run -it --name postgresqlDev -v $HOME/Mes_projets_pgsql:/home/postgres/Mes_projets_pgsql -p 5432:5432 --rm postgresql-dev
aide/docker_etudiants.txt · Dernière modification: 21/09/2017 16:03 par Garcia Laurent
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0