Create Dockerfile
Proyektni docker uchun sozlashni boshlaymiz.
Proyektning ichida Dockerfile nomli fayl yaratamiz va kod yozishni boshlaymiz. Birinchi bo'lib quyidagi kodni yozamiz:
FROM nodeProyektimiz 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 /appTIP
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 . /appCOPY 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_manzilNodejsda 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 installProyektimiz 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 3000Ana 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 RUNbuyrug'idan foydalanmaymiz?
Sababi, RUN buyrug'i imageni qurishda ishga tushsa, CMD buyrug'i container ishga tushganda ishlaydi.