[Docker] Verwendung als Befehlszeilenprogramm durch Angabe von Argumenten (Wrapper-Skript)

Einführung

Dieses Mal, um das von mir erstellte Programm bereitzustellen und zu verwenden

Das Programm wurde in Form von vorbereitet. Schreiben Sie diese Notiz. Dies folgt dem aktuellen Trend und scheint die allgemeine Verwendung zu sein, die in der auf diese Weise bereitgestellten Open Source verwendet wird.

Mit meinem eigenen Programm

$ prog <arg1> <args2>

Ich habe es so vorbereitet, wie es in einem Docker-Bild ist

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

Wird verfügbar sein als.

Ich konnte mich auf Folgendes beziehen.

Ich denke, die obigen Informationen sind genug, aber wenn ich es wage, einen süchtig machenden Punkt zu nennen, ...

--In ENTRYPOINT anstelle von CMD: Ich habe den Ausführungsinhalt in CMD in Dockerfile angegeben, aber es scheint, dass es keine Argumente mehr akzeptiert. Es hat funktioniert, als ich es auf ETNRYPOINT gesetzt habe.

Funktionsprüfung

Verfassung

Die Implementierungsmethode ist Docker Build

ist. (Ich denke, es ist in Ordnung, das Ausführungsprogramm direkt anzugeben, aber gibt es etwas Besseres, um die Shell zu durchlaufen? Das weiß ich nicht.)

Betriebsbeispiel

Ich habe es zum Testen gemacht.

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: Übergebe einfach das Argument

docker_entrypoint.sh


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

--Dockerfile: Erstellen und installieren, Wrapper-Skript als Einstiegspunkt angeben

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"]

--Lass es uns bewegen

> 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.

Funktioniert ohne Skript

In diesem Fall hat es funktioniert, auch wenn ich das Ausführungsprogramm direkt in ENTRYPOINT der Docker-Datei angegeben habe.

ENTRYPOINT [ "hello" ]

Zusammenfassung

――Zur Zeit habe ich herausgefunden, wie man eine Umgebung, die unter Linux läuft, in ein Programm verwandelt, das auf Docker läuft, so wie es ist.

Zukünftige Aufgaben.

Ich konnte heute überleben (um genau zu sein gestern). (2020/10/17)

Recommended Posts

[Docker] Verwendung als Befehlszeilenprogramm durch Angabe von Argumenten (Wrapper-Skript)
Ein Git-ähnliches selbst erstelltes Befehlszeilentool, das Tab ergänzt
Was ist ein Befehlszeilenargument?