Konteyner image-ləri praktikası
İki image yarat, tətbiqi yoxla, konfiqurasiyasına bax və resursları təmizlə. Təxminən 25 dəqiqə ayır.
Konteyner image-ləri dərsinə qayıtİş qovluğunu hazırla
Linux konteynerləri işlədən Docker mühərriki, internet, curl və boş lokal 8083 portu lazımdır. Kubernetes klasteri və registry hesabı tələb olunmur. Əmrlər bu səhifədə deyil, sənin terminalında işləyir. Aşağıdakı beş faylı yeni qovluğa yaz və əmrləri orada icra et. Məşq adlarını yalnız bu iş üçün istifadə et; artıq mövcuddursa, bütün əmrlərdə uyğun yeni adlar seç.
Başlanğıc faylları (5)
module example.com/academy-web
go 1.26.0package main
import (
"fmt"
"log"
"net/http"
"time"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello from Proxy Academy")
})
server := &http.Server{
Addr: ":8080",
Handler: mux,
ReadHeaderTimeout: 5 * time.Second,
}
log.Fatal(server.ListenAndServe())
}FROM golang:1.26-alpine
WORKDIR /src
COPY go.mod main.go ./
RUN CGO_ENABLED=0 go build -trimpath -o /server .
USER 65532:65532
EXPOSE 8080
ENTRYPOINT ["/server"].git
.env
.env.*
*.pem
*.key
bin/
coverage/FROM golang:1.26-alpine AS build
WORKDIR /src
COPY go.mod main.go ./
RUN CGO_ENABLED=0 go build -trimpath -o /server .
FROM scratch AS runtime
COPY --from=build /server /server
USER 65532:65532
EXPOSE 8080
ENTRYPOINT ["/server"]docker build -t academy-container-lab:single .
docker build -f Dockerfile.multistage -t academy-container-lab:multi .
docker image ls academy-container-labHər iki tag görünməlidir. SIZE dəyərlərini müqayisə et; çoxmərhələli image daha kiçik olmalıdır. Dəqiq ölçülər dəyişir.docker run -d --name academy-container-lab -p 127.0.0.1:8083:8080 academy-container-lab:multi
curl --fail http://127.0.0.1:8083Hello from Proxy Academydocker image inspect academy-container-lab:multi --format '{{.Config.User}}'65532:65532docker tag academy-container-lab:multi academy-container-lab:release
docker image inspect academy-container-lab:multi academy-container-lab:release --format '{{.Id}}'İki eyni image ID-si. Dəqiq dəyər build-dən asılıdır.docker stop academy-container-lab
docker rm academy-container-lab
docker image rm academy-container-lab:single academy-container-lab:multi academy-container-lab:releaseMəşq konteyneri və image istinadları silinir. Build cache qala bilər.Nəticəni izah et
Niyə ölçüləri fərqli olsa da, hər iki image eyni cavabı verə bilir? Niyə ikinci tag eyni image ID-sini saxlayır? Bu image-in başqa maşında əlçatan olması üçün nə lazımdır?
İzahını müqayisə et
Hər ikisində server icra faylı var; bir mərhələli image-də build alətləri də qalır. Tag yenidən build etmədən istinad əlavə edir. Digər maşın image-ə çıxış əldə etməlidir, adətən push-dan sonra registry vasitəsilə. Özəl image üçün giriş məlumatları və uyğun platforma da lazımdır.