Asosiy kontentga o‘tish
Innovialabs

Docker image va konteyner: qatlamlar, teglar va hayotiy sikl

Asoslar4 daq

Qisqacha

Docker image — read-only qatlamlardan iborat o‘zgarmas shablon, konteyner esa shu image ning o‘z yozish qatlamiga ega ishga tushirilgan nusxasi; konteynerlar image dan mustaqil ravishda yaratiladi, ishga tushiriladi, to‘xtatiladi va o‘chiriladi.

Image va konteyner bir jumlada

Image — bu shablon: qadoqlangan fayl tizimi va metama’lumotlar (standart buyruq, muhit o‘zgaruvchilari, portlar). Konteyner — shu shablondan ishga tushirilgan, o‘z holatiga ega jarayon. Munosabat klass va obyektlarga o‘xshaydi: bitta image — ko‘plab konteynerlar.

  • Yig‘ilgan image o‘zgarmaydi.
  • Har bir konteyner image ustida yozish qatlami (writable layer) oladi, fayllardagi barcha o‘zgarishlar shu yerga tushadi.
  • Konteynerni o‘chirish shu qatlamni o‘chiradi, image ni emas.

Qatlamlar: image nimadan iborat

Dockerfile dagi fayl tizimini o‘zgartiruvchi har bir buyruq (RUN, COPY, ADD) yangi read-only qatlam yaratadi. Qatlamlar bir-birining ustiga qo‘yiladi va image lar o‘rtasida qayta ishlatiladi.

FROM node:20-alpine        # bazaviy image qatlamlari
WORKDIR /app
COPY package*.json ./      # qatlam: bog‘liqliklar manifesti
RUN npm ci                 # qatlam: node_modules
COPY . .                   # qatlam: ilova kodi
CMD ["node", "server.js"]  # faqat metama’lumot, yangi qatlam yo‘q

Amalda nega bu muhim:

  • Build keshi: faqat kod o‘zgargan bo‘lsa, Docker oxirgi COPY qatlamini qayta yig‘adi. Shuning uchun bog‘liqlik fayllari koddan oldin nusxalanadi.
  • Joyni tejash: bitta bazadan FROM qilingan o‘nta image uni bir marta saqlaydi.
  • O‘chirilgan fayllar ham joy egallaydi: keyingi qatlamda faylni o‘chirish uni faqat yashiradi, oldingi qatlamlarni kichraytirmaydi. Fayllar paydo bo‘lgan RUN ichida tozalang yoki multi-stage build dan foydalaning.

Image qatlamlarini ko‘rish:

docker history myapp:1.4
docker image inspect myapp:1.4 --format '{{json .RootFS.Layers}}'

Yozish qatlami

Konteyner ishga tushganda Docker image ning read-only qatlamlari ustiga yupqa writable qatlam qo‘shadi (copy-on-write). Konteyner o‘zgartirgan har bir fayl shu qatlamga nusxalanadi.

Bundan kelib chiqadi:

  • Konteyner ichida yozilgan ma’lumotlar konteyner o‘chirilganda yo‘qoladi. Ma’lumotlar bazasi, yuklangan fayllar va saqlanishi kerak bo‘lgan hamma narsa uchun volume yoki bind mount ishlating.
  • Bitta image dan yaratilgan ikki konteyner bir-birining o‘zgarishlarini ko‘rmaydi.
  • docker diff <container> image ga nisbatan nima o‘zgarganini ko‘rsatadi.

Teglar va digest

Teg — inson uchun qulay va o‘zgaruvchan nom: nginx:1.27, myapp:latest. Ertaga xuddi shu teg boshqa image ga ishora qilishi mumkin.

Digest — image mazmunining xeshi: nginx@sha256:.... U o‘zgarmas: bir xil digest har doim aynan bir xil baytlarni bildiradi.

TegDigest
Misolmyapp:1.4myapp@sha256:3f1a...
O‘zgarishi mumkinmiHa, qayta push qilish mumkinYo‘q
Nima uchunOdamlar uchun, reliz nomlariTakrorlanadigan deploy, audit

Amaliy qoidalar:

  • Prodakshnda latest dan foydalanmang — aslida nima ishlayotgani noma’lum bo‘ladi.
  • Image larni CI dan versiya yoki commit SHA bilan teglang.
  • Takrorlanuvchanlik muhim bo‘lsa, digest ni mahkamlang, masalan muhim servislar uchun Kubernetes manifestlarida.
docker images --digests
docker inspect --format '{{index .RepoDigests 0}}' myapp:1.4

Konteynerning hayotiy sikli

Konteyner aniq holatlardan o‘tadi: created → running → (paused) → exited → removed.

docker create --name web myapp:1.4   # yaratildi, ishlamayapti
docker start web                     # ishlayapti
docker stop web                      # SIGTERM, keyin taymaut bo‘yicha SIGKILL: exited
docker start web                     # yana ishlayapti, o‘sha writable qatlam
docker rm web                        # o‘chirildi, writable qatlam yo‘qoldi

docker run — bu bitta buyruqda create + start. --rm bayrog‘i konteyner tugagach uni avtomatik o‘chiradi.

Har bir bosqichni tekshirish:

docker ps            # ishlayotgan konteynerlar
docker ps -a         # barchasi, to‘xtatilganlari bilan
docker inspect web   # holat, mount lar, tarmoq, chiqish kodi
docker logs web      # asosiy jarayonning stdout/stderr
docker image ls      # lokal image lar

Ko‘p uchraydigan xatolar

  • Konteynerga server kabi qarash: ishlayotgan konteyner ichiga paket o‘rnatish. Qayta yaratilganda o‘zgarishlar yo‘qoladi. Dockerfile ni o‘zgartirib, qayta yig‘ing.
  • Ma’lumotlarni volume siz saqlash va docker rm yoki yangi deploy dan keyin ularni yo‘qotish.
  • latest ga tayanish va boshqa mashinada boshqa image olish.
  • To‘xtatilgan konteynerlar va «osilib qolgan» image larni yig‘ib qo‘yish. Nima o‘chirilishini oldindan tekshirib, docker container prune va docker image prune bilan muntazam tozalang.

Ko‘p beriladigan savollar

Yo‘q. To‘xtatilgan konteyner o‘z writable qatlamini saqlaydi va docker start uni o‘sha fayllar bilan qaytaradi. Ma’lumotlar faqat konteyner o‘chirilganda yo‘qoladi, agar ular volume da bo‘lmasa.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.