آنچه در این مقاله میخوانید
آموزش راهاندازی برنامه Node.js در Docker
۸ اسفند ۱۳۹۹
برنامههای Dockerize شده به دلیل اینکه قابلیتهایی مانند جداسازی محیط اجرا، سهولت در انتقال و استقرار و پشتیبانی از مقیاسپذیری را در اختیار دارد در بین توسعهدهندگان از محبوبیت بالایی برخوردار هستند. در این مقاله قصد داریم مراحل اجرای یک برنامهی سادهی Node.js را در محیط Docker بررسی کنیم.
همین حالا به سادگی پروژههای داکر خود را در هاست ابری لیارا دیپلوی کنید!
✅ دامنه رایگان ✅ ترافیک نامحدود ✅ هزینه ساعتی
خرید هاست ابری Docker
آنچه در ادامه خواهید خواند:
- پیش نیازها: اطمینان از نصب Docker
- ساخت برنامه Node.js
- فایل package.json
- ساخت فایل Dockerfile
- ساخت Docker Image
- اجرای Container
- سوالات متداول
- جمع بندی

پیش نیازها: اطمینان از نصب Docker
پیش از آغاز، لازم است اطمینان حاصل شود که Docker روی سیستمعامل مورد استفاده نصب و فعال است. برای بررسی این موضوع، کافی است دستور زیر در محیط ترمینال اجرا شود:
bashCopyEditdocker version
در صورت مشاهدهی اطلاعات مربوط به نسخهی Docker، میتوان به ادامهی مراحل پرداخت.
ساخت برنامه Node.js
در این آموزش، از یک وبسرور ساده توسعهیافته با Node.js استفاده خواهد شد که پیام «Hello World!» را در پاسخ به درخواستهای HTTP ارسال میکند.
نمونه اول: استفاده از Express
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('request made');
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('listening for request on port 3000');
});
در این کد از فریمورک Express استفاده شده است. برای نصب آن، باید دستور زیر را اجرا کنید:
bashCopyEditnpm install express
نمونه دوم: بدون استفاده از فریمورک
const http = require('http');
const server = http.createServer((req, res) => {
console.log('request made');
res.setHeader('Content-Type', 'text/plain');
res.write('Hello World!');
res.end();
});
server.listen(3000, '0.0.0.0', () => {
console.log('listening for requests on port 3000');
});
در این نسخه صرفاً از ماژول داخلی http
استفاده شده و نیازی به نصب کتابخانهی خارجی وجود ندارد.
فایل package.json
در صورتی که از فریمورک Express استفاده میشود، فایل package.json
پروژه ممکن است به صورت زیر باشد:
{
"name": "hello-docker-world",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "^4.17.1"
}
}
برای ایجاد این فایل میتوان از دستور npm init -y
استفاده نمود.
ساخت فایل Dockerfile
برای Dockerize کردن این پروژه، لازم است فایل متنیای با نام Dockerfile
در ریشهی پروژه ایجاد شود. محتوای این فایل به صورت زیر خواهد بود:
FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
توضیحات:
FROM node:10
: مشخص میکند که ایمیج پایه بر اساس Node.js نسخهی ۱۰ ساخته میشود.WORKDIR /usr/src/app
: مسیر کاری (Working Directory) داخل کانتینر را تعیین میکند.COPY package*.json ./
: فایلهایpackage.json
و در صورت وجود،package-lock.json
را کپی میکند.RUN npm install
: وابستگیها را نصب مینماید.COPY . .
: تمام فایلهای پروژه را به داخل کانتینر منتقل میکند.EXPOSE 3000
: اعلام میکند که برنامه از پورت ۳۰۰۰ استفاده میکند.CMD
: دستور نهایی برای اجرای فایلapp.js
است.
جلوگیری از کپی شدن پوشه node_modules
برای جلوگیری از انتقال پوشهی node_modules
به داخل کانتینر، فایل .dockerignore
را در ریشهی پروژه ایجاد و محتوای زیر را در آن قرار دهید:
echo "node_modules" > .dockerignore
ساخت Docker Image
برای ساخت ایمیج، از دستور زیر استفاده میشود:
docker build . -t hello-world
در اینجا:
.
به معنای استفاده از مسیر جاری به عنوان Context است.-t hello-world
تَگ یا نامی برای ایمیج ساختهشده در نظر میگیرد.
اجرای Container
پس از ساخت ایمیج، میتوان یک کانتینر جدید ایجاد و اجرا کرد:
docker run -p 8000:3000 --name c1 hello-world
در این دستور:
-p 8000:3000
پورت ۳۰۰۰ داخل کانتینر را به پورت ۸۰۰۰ روی سیستم میزبان متصل میکند.--name c1
نام کانتینر را مشخص مینماید.hello-world
نام ایمیج مورد استفاده است.
پس از اجرای موفق این دستور، با مراجعه به آدرس http://localhost:8000
در مرورگر، میتوان خروجی برنامه را مشاهده کرد.