[Docker] Utiliser comme outil de ligne de commande en spécifiant des arguments (script wrapper)

introduction

Cette fois, pour fournir et utiliser le programme que j'ai créé

--Utilisez docker à chaque fois --Spécifier les arguments sur la ligne de commande de l'exécution du docker

Le programme a été préparé sous la forme de. Écrivez cette note. Cela suit la tendance actuelle et semble être l'usage général utilisé dans l'open source fourni de cette manière.

Avec mon propre programme

$ prog <arg1> <args2>

Je l'ai préparé tel quel dans une image de docker

$ docker run -t prog_image <arg1> <arg2>

Sera disponible en tant que.

J'ai pu faire référence à ce qui suit.

Je pense que les informations ci-dessus sont suffisantes, mais si j'ose donner un point addictif, ...

--Dans ENTRYPOINT au lieu de CMD: j'avais l'habitude de spécifier le contenu de l'exécution dans CMD dans Dockerfile, mais il semble qu'il n'accepte plus les arguments. Cela a fonctionné lorsque je l'ai réglé sur ETNRYPOINT. --Exécuter l'autorisation: image Lorsque l'autorisation interne semblait poser un problème, j'ai écrit RUN chmod + x dans le Dockerfile et cela a fonctionné. (Est-ce que ça va ^^;)

Contrôle de fonctionnement

Constitution

La méthode de mise en œuvre est la construction de docker

--Installez le programme exécutable prog``` --Préparer un script pour exécuter prog (il semble appeler le script wrapper) --Définissez le script wrapper sur ENTRYPOINT dans le fichier dockerfile

est. (Je pense que c'est correct de spécifier le programme d'exécution directement, mais y a-t-il quelque chose de mieux pour passer par le shell? Je ne sais pas à ce sujet.)

Exemple d'opération

Je l'ai fait pour le test.

--Programme exécutif. hello.c Un programme qui affiche des arguments de ligne de commande.

hello.c



#include <stdio.h>
#include <stdlib.h>

int main(const int argc, const char**argv)
{
    for(int i=0; i< argc; i++){
        printf("argv[%d]=%s\n", i, argv[i]);
    }
    return EXIT_SUCCESS;
}

--wrapper script: il suffit de passer l'argument

docker_entrypoint.sh


#!/bin/bash
echo "I am a wrapper script."
hello $@
FROM ubuntu:18.04

RUN apt-get update -y && \
  apt-get install -y -qq --no-install-recommends \
  build-essential \
  gcc

COPY hello.c /tmp/
RUN  cd /tmp && gcc /tmp/hello.c -o hello && mv hello /usr/local/bin/
COPY docker_entrypoint.sh /usr/local/bin

ENTRYPOINT ["docker_entrypoint.sh"]
> docker build -t test .
...
Successfully tagged test:latest

> docker run --rm -t test Dear my friends.
I am wrapper script.
argv[0]=hello
argv[1]=Dear
argv[2]=my
argv[3]=friends.

ENTRYPOINT [ "hello" ]

――Cela fonctionne sans script pour l'essayer.Dans ce cas, cela a fonctionné même si le programme d'exécution a été spécifié directement dans ENTRYPOINT du Dockerfile. Résumé - Pour le moment, j'ai découvert comment transformer un environnement fonctionnant sous Linux en un programme fonctionnant sous docker tel quel.

J'ai pu survivre aujourd'hui (pour être exact, hier). (2020/10/17)

Recommended Posts

[Docker] Utiliser comme outil de ligne de commande en spécifiant des arguments (script wrapper)
Un outil de ligne de commande de type Git qui complète Tab
Qu'est-ce qu'un argument de ligne de commande?