Dasturchilarning eng mashhur bahonasi: "Mening kompyuterimda ishlayotgandi-ku!" Serverda esa Node versiyasi boshqa, Linux kutubxonasi yetishmaydi, muhit buzilgan. Bugun siz dasturiy ta'minotni butun muhiti (kutubxonalar, sozlamalar, fayllar) bilan bitta ixcham qutiga o'rab, har qanday serverda bir soniyada ishga tushirishni — Dockerni o'rganasiz.
Matnli ko'rsatmalar to'plami. Tizim qanday yig'ilishi kerakligini qadamma-qadam ta'riflaydi.
Muzlatilgan, o'zgarmas (immutable) fayllar to'plami. Dastur kodi va barcha kutubxonalar arxivi.
Imagedan tug'ilgan faol, ishlayotgan virtual muhit. Uni to'xtatish, o'chirish va ko'paytirish mumkin.
Metafora: Dockerfile — bu tort retsepti. Image — bu pishirib muzlatilgan tayyor tort. Container — bu mehmonlarga tortilgan tirik porsiya!
# 1. Baza qatlami (Rasmiy yengil Node) FROM node:20-alpine # 2. Konteyner ichidagi ishchi papka WORKDIR /app # 3. Avval faqat bog'liqliklar faylini olamiz (Kesh uchun!) COPY package*.json ./ RUN npm install --omit=dev # 4. Asosiy dastur kodini nusxalaymiz COPY . . # 5. Konteyner qaysi portda tinglashini bildiramiz EXPOSE 3000 # 6. Konteyner yoqilganda nima ishga tushsin? CMD ["node", "server.js"]
# .dockerignore fayli node_modules npm-debug.log .git .gitignore .env Dockerfile README.md tests
Vaqt: 12 daqiqa. Ishchi varaqangizga `docker ps` buyrug'ining chiqish natijasini va Container ID raqamini yozing.
# 1-bosqich: Yig'uvchi (Builder) FROM node:20 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # TypeScript / React yig'ish # 2-bosqich: Toza Production (Runner) FROM node:20-alpine AS runner WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/package*.json ./ RUN npm install --omit=dev USER node CMD ["node", "dist/main.js"]