Create Dockerfile
Proyektni docker uchun sozlashni boshlaymiz.
Proyektning ichida Dockerfile
nomli fayl yaratamiz va kod yozishni boshlaymiz. Birinchi bo'lib quyidagi kodni yozamiz:
FROM node
Proyektimiz nodejsda bo'lgani uchun dockerning node
image asosida proyektni qurishimizni anglatadi.
TIP
Barcha imagelarning ro'yxati bilan Docker Hub saytida tanishib chiqishingiz mumkin.
Ana endi containerdagi ish muhitimizning manzilini ko'rsatamiz:
FROM node
WORKDIR /app
TIP
Bu yerda app
papkasi container fayl tizimidagi papka bo'lib, uning o'rniga boshqa papkani ham tanlashingiz mumkin. Lekin odatda ish muhiti uchun app
papkasini tanlanadi.
Ana endi proyektimizni containerga nusxalab o'tkazish kodini yozamiz:
FROM node
WORKDIR /app
COPY . /app
COPY
buyrug'idan keyingi birinchi manzil kompyuterimizdagi proyekt manzili. Ikkinchi manzil esa containerdagi proyekt joylashadigan manzil.
COPY
buyrug'ida yozilgan .
(nuqta) Dockerfile
turgan manzilni anglatadi, ya'ni Dockerfile
bilan yonma-yon turgan barcha papka va fayllarni o'z ichiga oladi (bular public/
, server.js
, package.json
).
Sintaksis quyidagicha:
COPY proyekt_manzili containerdagi_manzil
Nodejsda yozilgan proyektda kerakli paketlarni yuklab olish uchun npm install
buyrug'idan foydalaniladi. Dockerda buyruqlarni ishga tushirish uchun RUN
buyrug'idan foydalanamiz.
FROM node
WORKDIR /app
COPY . /app
RUN npm install
Proyektimiz ishga tushganda browserda 3000
portda ishlaydi. Buni server.js
faylida ko'rishimiz mumkin.
// ...
app.listen(3000);
Shuning uchun containerda 3000
portni tinglash uchun EXPOSE
buyrug'idan foydalanamiz.
FROM node
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 3000
Ana endi oxirgisi proyektni ishga tushirish buyrug'i qoldi. node server.js
buyrug'i orqali proyektni ishga tushirimiz mumkin. Buni ishga tushirish uchun dockerda CMD
buyrug'idan foydalanamiz.
FROM node
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 3000
CMD ["node", "server.js"]
TIP
CMD
buyrug'idan Dockerfile faylida faqat bir marta ishlatish kerak. Bir nechta CMD
buyruqlaridan foydalanilgan taqdir ham faqat eng oxirgi CMD
buyrug'i ishlaydi.
Shu yerda savol tug'ilishi mumkin. RUN
ham buyruqlarni ishga tushirish uchun foydalanilsa, nega CMD
o'rniga ham RUN
buyrug'idan foydalanmaymiz?
Sababi, RUN
buyrug'i image
ni qurishda ishga tushsa, CMD
buyrug'i container ishga tushganda ishlaydi.