Dockerize Javascript IOT Applications – DEV Community
من یک کاپیتان Docker هستم و عاشق ساخت رباتها و دستگاههای IoT هستم.
در آن سالها، نمونههای اولیه اینترنت اشیا زیادی را برای شرکتها و برای خودم انجام دادهام. من از آردوینو، رزبری پای و میکروکنترلرهای دیگر استفاده کرده ام.
چیزهای کمی وجود دارد که توسعه اینترنت اشیا را با سایر انواع توسعه نرم افزار متفاوت می کند. یکی از آنها این است که برای آزمایش کد یا ساخت یک شبیه ساز خوب باید یک دستگاه فیزیکی داشته باشید. این بدان معناست که شما باید دستگاهی داشته باشید که بتوانید به رایانه خود متصل شده و کد خود را روی آن اجرا کنید.
برای من بسیار معمول بود که هنگام رفت و آمد به محل کار، وسایل، حسگرها و سیم های زیادی در کوله پشتی خود داشته باشم. زمانی که در حال انجام توسعه اینترنت اشیا در کافی شاپ های سرتاسر دنیا بودم، موقعیت های خنده دار زیادی را تجربه می کنم، درست مانند تصویر بالا و بسیاری دیگر از سال 2015
معرفی
زمانی که آردوینو شروع به محبوب شدن کرد، من از ایده ساختن دستگاه های اینترنت اشیا خودم بسیار هیجان زده بودم. من شروع به یادگیری برنامه نویسی در C/C++ کردم و تعداد زیادی سنسور و اجزای دیگر را برای ساختن پروژه های خود خریداری کردم.
اما خیلی زود متوجه شدم که زمان زیادی را صرف کد منبع آردوینو می کنم، بنابراین تصمیم گرفتم به جای آن از جاوا اسکریپت استفاده کنم. من شروع به استفاده از Johnny-Five کردم و توانستم دستگاه پیچیده اینترنت اشیا را در چند ساعت بسازم.
نمونه اولیه MVP جدید است
در حالی که JSDayES 2016 در حال برگزاری بود، من در یکی از جایگاه ها بودم. در طول وقفه ها توانستم ظرف آب نبات خوش آمد گویی را هک کنم و یک دستگاه اینترنت اشیا ساده بسازم که توسط سرور Node.js کنترل می شد. این دستگاه بسته به منطقی که در یک برنامه ساده Node.js تعریف میکنید، میتوانست رنگ نور را تغییر دهد.
چرا جانی فایو خیلی باحاله؟
کتابخانه Johnny-Five یک کتابخانه جاوا اسکریپت است که به شما امکان می دهد آردوینو و سایر میکروکنترلرها را با استفاده از جاوا اسکریپت کنترل کنید. استفاده از آن بسیار آسان است و مثال های زیادی دارد که می توانید برای یادگیری نحوه استفاده از آن استفاده کنید.
به عنوان یک توسعه دهنده جاوا اسکریپت، بسیار خوشحالم که می توانم از همان زبان برای ساخت دستگاه های اینترنت اشیا استفاده کنم:
مثال معمولی پلک زدن برای برد آردوینو به این صورت است:
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(13);
led.blink(1000);
});
در مقایسه با رویکرد کلاسیک:
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
ممکن است تفاوت بزرگی به نظر نرسد، اما وقتی در حال ساخت دستگاه های پیچیده اینترنت اشیا هستید، تفاوت بزرگی ایجاد می کند. میتوانید از تمام ویژگیهای جاوا اسکریپت مانند Promises، Async/Await و غیره برای ساخت دستگاههای IoT و تمام قدرت محاسباتی که دستگاه میزبان ارائه میکند، و همچنین تمام ارتباطات مدرنی که امروز انتظار داریم (HTTP APIS، SDK…) استفاده کنید. .
این شما را مجبور می کند (USB، بلوتوث…) دستگاه IoT را همیشه به رایانه متصل کنید زیرا دستگاه دستورالعمل ها را ضبط نمی کند.
بدیهی است که همه پروژه های IOT با این الزامات مطابقت ندارند، اما برای یک نمونه اولیه ساده یک راه حل فوق العاده است.
چرا باید پروژه خود را Dockerize کنم؟
Johnny Five یک کتابخانه خارق العاده است، اما برخی از وابستگی های آنها فرآیند نصب پیچیده ای دارند (زیر هود)، این امر گاهی اوقات نصب کتابخانه را در برخی از محیط ها دشوار می کند. به خصوص اگر نیاز به تغییر بین دستگاهها داشتید، در ابتدا برای من بسیار ناامیدکننده بود تا اینکه تصمیم گرفتم از Docker برای آسانتر کردن اجرای آن استفاده کنم.
برنامه JS IoT خود را داکر کنید
من این مخزن را برای docker کردن مثال چشمک زدن ایجاد کردم، بنابراین دنبال کردن و کشف جزئیات آسان تر است.
نرم افزار لازم را دریافت کنید
قبل از شروع، باید Docker را روی دستگاه خود نصب کنید.
یک Dockerfile بنویسید
در اینجا یک Dockerfile بسیار ساده شده است، اگر می خواهید یک نمونه آماده تولید بسازید، از این شروع کنید
اگر اسپانیایی صحبت می کنید، کتاب الکترونیکی خود “Docker Seguro” را نیز به شما توصیه می کنم
FROM node:18.14.1
WORKDIR /usr/src/app
RUN apt-get update
RUN apt-get -y install udev
COPY package*.json ./
RUN npm install --unsafe-perm --build-from-source=serialport
COPY . .
CMD [ "npm", "run", "start" ]
تصویر داکر را بسازید
با استفاده از docker build
دستور، یک تصویر داکر ایجاد کنید.
docker build -t blink .
برنامه خود را در یک ظرف Docker اجرا کنید
برنامه خود را با استفاده از docker run
دستور، تعیین پارامترهای لازم برای پیکربندی ظرف شما.
در اینجا قسمت دشوار است، شما باید دستگاه USB را به ظرف منتقل کنید تا بتواند به برد آردوینو دسترسی داشته باشد.
docker run -it --rm --privileged --device=/dev/ttyUSB0 blink
در مورد من پورت بود /dev/ttyUSB0
، اما این ممکن است برای شما متفاوت باشد. در این راهنما می توانید اطلاعات بیشتری را بیابید.
گاهی اوقات دسترسی به دستگاه های USB از Docker می تواند دشوار باشد، به خصوص در macOS.
آیا می توانم از طریق یک دستگاه USB به یک ظرف عبور کنم؟
متأسفانه، امکان عبور از طریق یک دستگاه USB (یا یک پورت سریال) به یک کانتینر وجود ندارد زیرا نیاز به پشتیبانی در سطح Hypervisor دارد.
Docker: سوالات متداول عمومی برای دسکتاپ
اما راهحلهای زیادی از سوی جامعه وجود دارد:
تصویر Docker خود را منتشر کنید
به صورت اختیاری، می توانید تصویر Docker خود را در یک رجیستری کانتینری، مانند Docker Hub، برای دسترسی و توزیع آسان منتشر کنید.