Build Your First Dockerfile
Birinchi Dockerfile'ingizni yozing
Endi shu paytgacha o'rgangan hammasini — FROM, WORKDIR, COPY, RUN, CMD va qatlam keshlashni to'g'ri tartibda — birlashtirib, kichik Go HTTP serveri uchun to'liq, to'g'ri tuzilgan Dockerfile yozamiz.
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Salom, konteynerdan!")
})
http.ListenAndServe(":8080", nil)
}FROM golang:1.22
WORKDIR /app
# Bog'liqliklar (kamdan-kam o'zgaradi) — avval, alohida nusxalanadi
COPY go.mod ./
RUN go mod download
# Kodning o'zi (tez-tez o'zgaradi) — oxirida
COPY . .
RUN go build -o server .
# Konteyner ichida 8080-port tinglanishini "hujjatlashtirish"
EXPOSE 8080
CMD ["./server"]EXPOSE 8080 — bu qator konteynerni haqiqatan tashqi dunyoga ochmaydi (bu shunchaki "hujjat", boshqa dasturchilarga va vositalarga "bu konteyner 8080-portda ishlaydi" deb aytadi). Haqiqiy "ochish" docker run chaqirilganda -p bayrog'i bilan bajariladi: docker run -p 8080:8080 mening-serverim — bu "kompyuterimning 8080-portini konteynerning 8080-portiga ulang" degani.
E'tibor bering: bu yerda go.mod alohida nusxalanmoqda, lekin go.sum yo'q — chunki bu misolda dastur tashqi bog'liqliklarga ega emas (faqat standart kutubxona). Agar loyihangizda tashqi paketlar bo'lsa, COPY go.mod go.sum ./ deb ikkalasini ham nusxalash kerak bo'ladi — bu "Packages & Organization" kursida ko'rgan Go modullari tizimining Docker'dagi davomi.
Key Takeaway
Key Takeaway:
To'g'ri Dockerfile — bog'liqliklarni avval, kodni oxirida nusxalab keshlashdan foydalanadi, va EXPOSE bilan qaysi port ishlatilishini hujjatlashtiradi (haqiqiy ochish esa docker run -p orqali bo'ladi).
NEXT UP
Multi-Stage Builds