IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Explication sur script Docker


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 65
    Par défaut Explication sur script Docker
    Bonjour à tous,

    Voici quelques jours, je m'intéresse à Linux et Docker. J'ai réussi à mettre en oeuvre une stack pour le développement d'applis. Mais j'aimerai rendre les choses plus pratique.
    Je suis tomber sur ce bout de script dans la doc Docker pour installer composer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    composer () {
        tty=
        tty -s && tty=--tty
        docker run \
            $tty \
            --interactive \
            --rm \
            --user $(id -u):$(id -g) \
            --volume /etc/passwd:/etc/passwd:ro \
            --volume /etc/group:/etc/group:ro \
            --volume $(pwd):/app \
            composer "$@"
    }
    La page où j'ai trouvé le code : https://hub.docker.com/_/composer/

    Concrètement et si j'ai bien compris, cela permet, depuis la machine hôte (physique) d'exécuter composer sans devoir entrer dans le container Docker via docker exec -it XXXXX bash.
    Mais il y a de nombreux signes cabalistiques dont je ne comprends pas le sens.

    ex: tty= tty -s && tty=--tty

    J'ai bien compris que c'est relatif au terminal mais je ne comprends pas ce que cela veut dire. Et la recherche Google n'a rien donné de probant. Pourquoi tty= tty=--tty???

    Idem pour : user $(id -u):$(id -g) comme ça, je dirai que c'est pour récupérer le nom d'utilisateur et le groupe de l'utilsateur actif dans le container.

    --volume $(pwd):/app \ Alors là? Accéder à une ressources en utilsant un password style monpassword/MaRessource ?

    Pour composer "$@", j'imagine que $@ récupère les paramètres fournis lorsque je tape la commande dans la ligne de commande de l'hôte.

    Dernière question, je peux modifier ce code pour autre chose? Par exemple lancer un redis-cli ou un terminal python dockerisé directement depuis l'hôte? Je ne vois pas de contre indication mais des fois que...


    Merci d'avance pour vos éclaircissement
    Cordialement,

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour,

    ce n'est pas tty= tty -s && tty=--tty, mais tty=""; tty -s && tty="--tty", où && est un ET logique.

    quant aux id, il sont exécutés dans le contexte courant, pas dans docker.

    après, je ne connais pas docker.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 65
    Par défaut
    Merci N_BaH pour ces premiers éléments de réponse.
    Je pense comprendre un peu mieux.

    tty="" On crée une variable vide
    tty -s Commande qui lance un terminal en mode silencieux
    && A la suite de quoi
    tty="--tty" On attribut la valeur --tty à tty Cette valeur est réutilisé dans le script avec $tty

    Mais je me demande pourquoi je ne peux pas simplement écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    composer () {
        tty -s  #Je lance mon terminal en mode silencieux?
        docker run \
            --tty \
            --interactive \
            --rm \
            --user $(id -u):$(id -g) \
            --volume /etc/passwd:/etc/passwd:ro \
            --volume /etc/group:/etc/group:ro \
            --volume $(pwd):/app \
            composer "$@"
    }
    J'ai testé en ajoutant ça dans mon ~/.bashrc. Cela fonctionne mais est-ce vraiment identique?
    Un autre truc me perturbe, c'est que je ne vois pas à quel moment je renseigne le nom du container à utiliser?

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ man -s1 -k '^tty$'
    tty (1)              - print the file name of the terminal connected to standard input
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 65
    Par défaut
    Euh...j'avoue que je n'ai pas bien compris où tu veux en venir.

    Si c'est pour me dire que la commande tty me renvoie un truc style /dev/pts/1, ça c'est bon.

    Je pense que je vais passer le post en résolu. Et me documenter.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    c'est ça. tty ne lance pas un terminal en mode silencieux.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 65
    Par défaut
    En fait, je ne comprends pas à quoi ça sert d'afficher le nom du fichier du terminal connecté.

    Et je ne comprends pas pourquoi je dois mettre tty=""; tty -s && tty="--tty" ça me semble complètement inutile.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    justement, l'option -s fait que ça ne s'affiche pas.
    mais ça permet de vérifier que le script est effectivement exécuté dans un terminal, et non en arrière-plan, via cron par exemple.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par austin57 Voir le message
    En fait, je ne comprends pas à quoi ça sert d'afficher le nom du fichier du terminal connecté.
    On ne l'affiche pas, on le teste (cf. option "-s" dans man tty).

    Et je ne comprends pas pourquoi je dois mettre tty=""; tty -s && tty="--tty" ça me semble complètement inutile.
    Ben si, c'est utile!

    Cette écriture est un raccourci (que je n'aime pas) pour l'expression suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if tty -s
    then tty="--tty"
    else tty=''
    fi
    que je trouve bôôôcoup plus lisible (au moins pour un débutant).

    Je suppose que tu as bien lu les remarques de N_BaH et le man tty qui indique clairement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         -s      Do not write the terminal name; only the exit status is affected when this option is specified.
          The -s option is deprecated in favor of the ``test -t 0'' command.
     
    EXIT STATUS
         The tty utility exits 0 if the standard input is a terminal, 1 if the standard input is not a terminal, and >1 if an error occurs.
    Donc, pour une clarification au ras des pâquerettes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si le script courant a été lancé depuis un terminal
    alors tty="-tty"
    sinon tty=""
    fin
    Si bien que la commande qui suit, docker run $tty, sera interprétée en conséquence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si le script courant a été lancé depuis un terminal
    alors lancer "docker run -tty --interactive ...", i.e. lancer docker en mode tty
    sinon lancer "docker run --interactive ...", i.e. lancer docker en mode pas tty (quoi que cela signifie (je ne connais pas docker))
    fin

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 65
    Par défaut
    Merci pour la réponse détaillée jack-ft

    J'avais fini par émettre l'hypothèse que ce n'était en définitive qu'une condition grâce à la présence du &&
    Mais bon, quand on débarque, c'est juste incompréhensible.

    Maintenant, tout est clair comme de l'eau de roche.

    Post résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'explication sur un script
    Par DjiLow dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/01/2010, 10h45
  2. Explication sur tout petit script
    Par Fluxy dans le forum Langage
    Réponses: 8
    Dernier message: 23/07/2007, 08h29
  3. Quelques explications sur un script shell
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 03/07/2007, 19h54
  4. Explication sur un script
    Par donny dans le forum Linux
    Réponses: 6
    Dernier message: 29/06/2006, 11h33
  5. Explication sur un script
    Par Krispy dans le forum Linux
    Réponses: 1
    Dernier message: 22/03/2006, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo