Skip to content

Create Dockerfile

Proyektni docker uchun sozlashni boshlaymiz.

Proyektning ichida Dockerfile nomli fayl yaratamiz va kod yozishni boshlaymiz. Birinchi bo'lib quyidagi kodni yozamiz:

dockerfile
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:

dockerfile
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:

dockerfile
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:

dockerfile
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.

dockerfile
FROM node

WORKDIR /app

COPY . /app

RUN npm install

Proyektimiz ishga tushganda browserda 3000 portda ishlaydi. Buni server.js faylida ko'rishimiz mumkin.

js
// ...

app.listen(3000);

Shuning uchun containerda 3000 portni tinglash uchun EXPOSE buyrug'idan foydalanamiz.

dockerfile
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.

dockerfile
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.