Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh mengurangkan masa binaan imej Docker dengan ketara dengan pra-membina dan menyimpan modul Go?

Bagaimanakah saya boleh mengurangkan masa binaan imej Docker dengan ketara dengan pra-membina dan menyimpan modul Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 06:38:02803semak imbas

How can I significantly reduce Docker image build times by pre-building and caching Go modules?

Modul Pra-Pembinaan dan Caching untuk Bangunan Imej Swift Docker

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn