Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh mengurangkan masa binaan imej Docker dengan ketara dengan pra-membina dan menyimpan modul Go?
Apabila membuat imej Docker, adalah penting untuk mengoptimumkan proses binaan untuk meminimumkan masa yang dibelanjakan untuk membina kebergantungan. Walaupun Docker membenarkan lapisan kebergantungan caching, binaan kebergantungan awal kekal sebagai tugas yang memakan masa. Untuk mengelakkan perkara ini, kami menyelidiki pra-pembinaan dan caching semua modul yang diperlukan yang disenaraikan dalam go.mod.
Pra-Membina Semua Modul Go
Arahan go menyediakan mekanisme khusus untuk pra-membina modul Go. Mari terokai cara ia berfungsi:
go build -i github.com/mattn/go-sqlite3
Arahan ini mengarahkan Go untuk membina modul go-sqlite3, termasuk kebergantungan transitifnya. Ia menyimpan artifak terbina dalam cache modul, yang terletak di $GOPATH/pkg/mod/cache/download.
Menggunakan pendekatan ini, anda boleh pra-membina semua modul yang disenaraikan dalam go.mod dengan mengulanginya dan mengeluarkan arahan go build -i untuk setiap satu.
Caching Modul Pra-Built in Docker
Untuk menggunakan modul pra-bina dalam binaan imej Docker anda, kami mengeksploitasi Mekanisme pelekap Docker untuk berkongsi cache modul antara persekitaran binaan dan masa jalan bekas.
Pertimbangkan struktur Dockerfile berikut:
FROM docker.io/golang:1.16.7-alpine AS build WORKDIR /src COPY go.* . RUN go mod download # Mount the module cache from the host to the container RUN --mount=type=bind,source=$GOPATH/pkg/mod/cache/download,target=/root/.cache/go-build \ go build -o /out/example . FROM scratch COPY --from=build /out/example /
Argumen --mount memasang cache modul hos ke dalam persekitaran bekas di /root/.cache/go-build. Ini memastikan modul pra-bina tersedia semasa pembinaan imej.
Bina Pengoptimuman dengan DOCKER_BUILDKIT
Untuk memanfaatkan fungsi cache, pastikan anda menggunakan DOCKER_BUILDKIT=1 semasa binaan imej:
DOCKER_BUILDKIT=1 docker build -t myimage .
Sebagai alternatif, anda boleh menggunakan docker buildx:
docker buildx build -t myimage .
Kesimpulan
Pra-pembinaan dan caching modul Go dalam Docker memanfaatkan pengoptimuman yang mengurangkan masa binaan imej dengan ketara. Dengan memahami arahan go build -i dan memanfaatkan mekanisme lekapan cache Docker, pembangun boleh meningkatkan aliran kerja pembinaan imej kontena mereka.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengurangkan masa binaan imej Docker dengan ketara dengan pra-membina dan menyimpan modul Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!