Verwenden Sie Symbolic Link für den mehrstufigen Build von Docker

Um die Größe von Docker zu verringern, werden häufig mehrstufige Builds verwendet, bei denen der Builder und das tatsächlich verwendete Image separat geschrieben werden. Wenn Sie diesen mehrstufigen Build verwenden, möchten Sie möglicherweise die Bibliothek mit dem Builder installieren und die Bibliothek mit ADD oder COPY zum eigentlichen Image hinzufügen.

Die Bibliothek enthält häufig Symbolic Link, aber die Befehle ADD und COPY von Docker können keine Symbolic Link hinzufügen.

Dieses Problem kann überraschend einfach gelöst werden, indem der erforderliche symbolische Link im Builder tariert und die TAR-Datei in der nächsten Stufe erweitert wird.

Schauen wir uns das aktuelle Dockerfile-Beispiel genauer an.

Dockerfile Beispiel und Beschreibung


FROM debian:latest as builder
RUN tar czf testlib.tar.gz /usr/local/lib/test.so.* \  
            /usr/local/lib/test1.so.* \
            /usr/local/lib/test2.so.* #Tarieren Sie den erforderlichen symbolischen Link

FROM debian:latest
COPY --from=builder /testlib.tar.gz /testlib.tar.gz  #Kopieren Sie die gehärtete Teerdatei
RUN cd / && tar xzf testlib.tar.gz #Stellen Sie den verfestigten symbolischen Link bereit

Es scheint ein Traum zu sein, dass es mir schwer gefallen ist, einen symbolischen Link mit ADD oder COPY hinzuzufügen, bis ich wusste, wie das geht.

Referenz

Recommended Posts

Verwenden Sie Symbolic Link für den mehrstufigen Build von Docker
Verwenden Sie Puphpeteer mit Docker
Verwenden Sie GDAL mit Python mit Docker
[Docker] Wird immer mit Docker + Rails verwendet
Verwenden von cuda11.0 mit pytorch mit Docker
Verwenden Sie Amazon ECR Credential Helper mit Docker Desktop
Verwenden Sie ProGuard mit Gradle
Starten Sie MariaDB mit Docker
Explodiere Docker mit WSL2
Verwenden Sie XVim2 mit Xcode 12.0.1
Verwenden von CentOS mit LXD
Bedienen Sie Emby mit Docker
Führen Sie Payara mit Docker aus
Verwenden Sie Webmock mit Rspec
Verwenden Sie WebJars mit Gradle
Verwenden Sie jlink mit gradle
Einweg-PHP mit Docker
[PHP8] Installieren und verwenden Sie die YAML-Funktion (YAML-Parser) von PECL mit Docker
Verwenden Sie die In-Container-Shell des Dockers mit cygwin [docker exec -it bash]
Sie müssen winpty mit Docker Exec [Windows] verwenden.