1

Zum Komponieren von Diensten, die über das Netzwerk über Ports verfügbar gemacht werden (-p 5000:5000) bietet Docker alle Arten von Hilfe (z. B. docker-compose).
Was ich suche ist eine Möglichkeit, bestimmte binäre Anwendungen als Service in einem Docker-Container bereitzustellen. Beispiele wären:Was ist der beste Weg, um Kommandozeilen-Anwendungen in einer Docker-Umgebung zu verwenden?

  • Compiler (zB gcc)
  • Generatoren (zB für Protokollpuffer)
  • ...

einen einzigen Befehl ausführen zu

meine aktuelle Ansatz ist habe ein kleines Shell-Skript, das Parameter übergibt und kümmert sich um das Mapping des aktuellen Verzeichnisses:

runbox(){ 
    current_dir=${PWD##*/} 
    docker run --rm -it \ 
    -v ${PWD}:/home/dev/${current_dir} \ 
    -w /home/dev/${current_dir} \ 
    box:latest \ 
    /bin/bash -c "[email protected]" 
} 

mit es sieht wie folgt aus:

runbox "g++ --version" 

im Vergleich zu lokal ausgeführt:

g++ --version 

mehrere Befehle Komponieren

Lassen Sie uns jetzt sagen, ich habe n einen solchen Dienst, wie kann ich komponieren sie in einer Weise, dass alle von ihnen in einem anderen Container (z. B. verwendet werden können) läuft auf einem Ci)?

       Services running 
          in Docker containers 
+---------------------+ 
|      |  +---------+ 
| CI Docker Container +-----> | gcc | 
|      |  +---------+ 
|      | 
|  make   +-----> +---------+ 
|      |  | protoc | 
|      |  +---------+ 
+----------------+----+ 
       |   +---------+ 
       +----------> | clang | 
           +---------+ 

was den Overhead von sehr oft einen Befehl aufrufen?

Antwort

0

Solange das CI Ihnen Zugriff auf eine Docker-Engine gibt (über Socket oder Port), sollte es egal sein, ob es in einem Container läuft oder nicht.

Wenn Sie make und Ausführen von Projektaufgaben aus einem Container verwenden, interessiert Sie möglicherweise dobi. Es ist ein Werkzeug, das zu etwas entwickelt wurde, das du beschreibst. Sie definieren die Bilder, Container, Mounts usw., die Sie zum Erstellen Ihres Projekts verwenden.

Sie können jede Aufgabe so ausführen, als würden Sie ein make-Ziel ausführen (dobi <taskname>). Sie könnten eine Aufgabe für gcc, protoc, clang usw. haben.