هدف اصلی در این آموزش، نشان دادن نحوه وارد کردن یک اپلیکیشن Node.js به یک کانتینر داکر است. رویکرد کار متمرکز بر توسعه و نه تولید، خواهد بود. همچنین فرض میشود که شما یک نسخه آماده از داکر در اختیار دارید و همینطور با ساختار اپلیکیشنهای Node.js آشنا هستید. در اولین بخش از این آموزش، یک...
1399/08/282157 بازدید
هدف اصلی در این آموزش، نشان دادن نحوه وارد کردن یک اپلیکیشن Node.js به یک کانتینر داکر است. رویکرد کار متمرکز بر توسعه و نه تولید، خواهد بود. همچنین فرض میشود که شما یک نسخه آماده از داکر در اختیار دارید و همینطور با ساختار اپلیکیشنهای Node.js آشنا هستید.
در اولین بخش از این آموزش، یک اپلیکیشن وب ساده در Node.js ایجاد میکنیم. سپس یک «داکر ایمیج» برای این اپلیکیشن میسازیم و نهایتاً یک کانتینر از این ایمیج بارگذاری میکنیم.
داکر این امکان را فراهم میکند که یک اپلیکیشن و متعلقاتش را درون یک چارچوب با عنوان «کانتینر» بستهبندی کنیم. معمولاً یک کانتینر متشکل از یک اپلیکیشن در سادهترین فرم اجرای آن در یک سیستمعامل لینوکس است. یک ایمیج «اثر انگشتی» از یک کانتینر محسوب میشود و یک کانتینر، نسخه اجرایی یک ایمیج است.
ساخت اپلیکیشن Node.js
ابتدا یک دایرکتوری جدید برای حضور تمام فایلها میسازیم. در این دایرکتوری، یک فایل package.json ایجاد میکنیم که توصیفکنندده اپلیکیشن و متعلقات آن خواهد بود.
php
1{23"name": "docker_web_app",45"version": "1.0.0",67"description": "Node.js on Docker",89"author": "First Last <first.last@example.com>",1011"main": "server.js",1213"scripts": {1415"start": "node server.js"1617},1819"dependencies": {2021"express": "^4.16.1"2223}2425}
با داشتن این فایل جدید package.json، فرمان npm install را اجرا کنید. اگر از نسخه ۵ یا جدیدتر npm استفاده میکنید، نتیجه یک فایل package-lock.json خواهد بود که در داکر ایمیج ذخیره خواهد شد.
حالا با استفاده از فریمورک Express.js، یک فایل server.js تولید کنید که توصیفکننده اپلیکیشن Node.js شماست.
در مراحل بعدی، نحوه اجرای این اپلیکیشن را درون یک داکر کانتینر با استفاده از داکر ایمیج رسمی بررسی میکنیم. البته ابتدا باید یک داکر ایمیج از اپلیکیشن Node.js خود بسازید.
تولید یک داکرفایل
یک فایل خالی با نام «داکرفایل» ایجاد کنید.
php
1touch Dockerfile
داکرفایل را در ویرایشگر متنی دلخواهتان باز کنید.
اولین کاری که باید انجام دهیم، تعریف ایمیجی است که میخواهیم بر اساس آن ساختار را ایجاد کنیم. در انیجا از آخرین نسخه LTS، یعنی نسخه 12 از node که در داکر هاب در دسترس است، استفاده خواهیم کرد.
php
1FROM node:12
حالا یک دایرکتوری برای نگهداری کد اپلیکیشن Node.js درون ایمیج میسازیم. این دایرکتوری اجرایی برای اپلیکیشن شما خواهد بود.
php
1# Create app directory23WORKDIR /usr/src/app
این ایمیج به همراه Node.js و نصب NPM خواهد بود. بنابراین کار بعدی شما نصب متعلقات اپلیکیشن Node.js با استفاده از npm است. به خاطر داشته باشید که در صورتی که از نسخه ۴ یا پایینتر npm استفاده میکنیم، فایل package-lock.json برایتان تولید نخواهد شد.
php
1# Install app dependencies23# A wildcard is used to ensure both package.json AND package-lock.json are copied45# where available (npm@5+)67COPY package*.json ./89RUN npm install1011# If you are building your code for production1213# RUN npm ci --only=production
دقت داشته باشید که به جای کپی کردن تمام دایرکتوری، ما در اینجا فقط فایل package.json را کپی کردهایم. این موضوع به ما اجازه میدهد که از ذخیره پنهان لایههای داکر استفاده کنیم. به علاوه، فرمان npm ci کمک زیادی به سرعت، دقت و مدیریت توسعه در این فضا خواهد کرد.
برای قراردادن سورسکد اپلیکیشن Node.js درون داکر ایمیج، از دستور COPY استفاده کنید.
php
1# Bundle app source23COPY . .
اپلیکیشن شما به پورت 8080 مرتبط است و بر این اساس، باید از فرمان EXPOSE برای ارجاع به داکر استفاده نمایید.
php
1EXPOSE 8080
در یکی از آخرین مراحل با استفاده از CMD، یک فرمان برای اجرای اپلیکیشن تعریف کنید. در اینجا از فرمان node server.js برای شروع به کار سرور استفاده میکنیم.
php
1CMD [ "node", "server.js" ]
در نتیجه داکرفایل شما باید ظاهری شبیه به زیر داشته باشد.
php
1FROM node:1223# Create app directory45WORKDIR /usr/src/app67# Install app dependencies89# A wildcard is used to ensure both package.json AND package-lock.json are copied1011# where available (npm@5+)1213COPY package*.json ./1415RUN npm install1617# If you are building your code for production1819# RUN npm ci --only=production2021# Bundle app source2223COPY . .2425EXPOSE 80802627CMD [ "node", "server.js" ]
فایل .dockerignore
در همین دایرکتوری یک فایل .dockerignore به عنوان داکرفایل و با محتوای زیر ایجاد کنید.
php
1node_modules23npm-debug.log
این کار باعث جلوگیری از کپیشدن ماژولهای محلی و ثبتوقایع عیبیابیها به داکر ایمیج و بازنویسی احتمالی ماژولها درون ایمیج خواهد شد.
ساخت ایمیج اپلیکیشن Node.js
به دایرکتوری حاوی داکرفایل خود بروید و با اجرای فرمان زیر، داکر ایمیج خود را بسازید. گزینه -t به شما اجازه میدهد که برای ایمیج خود برچسب انتخاب کنید و یافتن آن در ادامه، برایتان سادهتر خواهد بود.
php
1docker build -t <your username>/node-web-app .
هماکنون ایمیج شما وارد لیست داکر میشود.
php
1$ docker images23# Example45REPOSITORY TAG ID CREATED67node 12 1934b0b038d1 5 days ago89<your username>/node-web-app latest d64d3505b0d2 1 minute ago
اجرای ایمیج
اجرای ایمیج با گزینه -d باعث میشود که کانتینر بتواند در پسزمینه به صورت مستقل فعال باشد. گزینه -p نیز باعث هدایت پورت عمومی به یک پورت اختصاصی درون کانتینر خواهد شد. برای این منظور، فرمان زیر را تایپ نمایید.
php
1docker run -p 49160:8080 -d <your username>/node-web-app
خروجی اپلیکیشن Node.js خود را چاپ کنید.
php
1# Get container ID23$ docker ps45# Print app output67$ docker logs <container id>89# Example1011Running on http://localhost:80801213اگر بخواهید وارد کانتینر شوید، میتوانید از فرمان exec استفاده کنید.1415# Enter the container1617$ docker exec -it <container id> /bin/bash
آزمایش اپلیکیشن Node.js
برای تست اپلیکیشن، پورت آن را که بهوسیله داکر ارجاع داده میشود، دریافت کنید.
در مثال بالا، داکر پورت 8080 را درون کانتینر به پورت 49160 در سیستم شما ارجاع میدهد. حالا میتوانید با استفاده از فرمان curl اپلیکیشن Node.js خود را فراخوانی کنید. در صورتی که این ابزار را در اختیار ندارید، میتوانید با فرمان sudo apt-get install curl آن را نصب کنید.
php
1$ curl -i localhost:4916023HTTP/1.1 200 OK45X-Powered-By: Express67Content-Type: text/html; charset=utf-889Content-Length: 121011ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"1213Date: Mon, 13 Nov 2017 20:53:59 GMT1415Connection: keep-alive1617Hello world
جمعبندی
امیدواریم که این آموزش موردتوجه شما قرار گرفته و شما با نحوه اجرا یک اپلیکیشن Node.js در داکر آشنا شده باشید. در همین حال، همیشه مطالعه بیشتر میتواند تسلط بهتری را در این زمینهها برایتان ایجاد کند.