scratch ile statik Docker uygulaması
Düzenlendi · Kapsam: Linux konteynerinde GCC ile statik derlenen bir C++ konsol uygulaması.
scratch, dosya sistemi boş başlayan bir imaj oluşturur. Kabuk, paket yöneticisi
ve paylaşımlı kütüphaneler içermez. Basit bir C++ uygulamasını statik derleyerek
bu tabanda çalıştırabiliriz.
Uygulama
Boş bir dizinde hello.cc oluşturun:
#include <iostream>
int main() {
std::cout << "Merhaba, dünya!\n";
return 0;
}
Dockerfile
Derleme araçları ilk aşamada kalır; son imaja yalnızca uygulama kopyalanır. Böylece macOS veya Windows üzerinde yanlışlıkla Linux dışı bir ikili derlemekten kaçınırız.
FROM gcc:14 AS build
WORKDIR /src
COPY hello.cc .
RUN g++ -O2 -static -o hello hello.cc
FROM scratch
COPY --from=build /src/hello /hello
USER 65532:65532
ENTRYPOINT ["/hello"]
Derleme ve çalıştırma
Docker’ın Linux konteynerleri çalıştırdığı bir ortamda:
docker build --tag hello-scratch .
docker run --rm hello-scratch
Beklenen çıktı:
Merhaba, dünya!
Sınırlar ve doğrulama
Statik derleme her uygulamanın tüm çalışma zamanı ihtiyaçlarını ortadan kaldırmaz. Sertifikalar, saat dilimi verileri ve uygulamanın okuyacağı dosyalar ayrıca gerekebilir. Bu örnek yalnızca konsola yazan bir program içindir.
scratch davranışı Docker taban imaj belgesi
ile karşılaştırıldı. Örnek, Docker Engine 29.6.2 üzerinde Linux/ARM64 hedefinde
derlendi ve çalıştırıldı; Merhaba, dünya! çıktısı alındı.