در بخش اول این مجموعه ، ما در مورد ایجاد تصاویر Docker با استفاده از Dockerfile ، برچسب گذاری تصاویر و مدیریت تصاویر آشنا شدیم. در ادامه نگاهی به اجرای کانتینرها ، انتشار درگاه ها و اجرای کانتینرها در حالت جداگانه انداختیم. سپس با راه اندازی ، متوقف کردن و راه اندازی مجدد آنها در مورد مدیریت کانتینرها آشنا شدیم. ما همچنین به بررسی نام کانتینرهای خود پرداختیم تا به راحتی شناسایی شوند.

در این پست ، ما بر تنظیم محیط توسعه محلی خود تمرکز خواهیم کرد. ابتدا نگاهی خواهیم انداخت به اجرای یک پایگاه داده در یک کانتینر و اینکه چگونه از حجم و شبکه استفاده می کنیم تا داده های خود را تداوم بخشیم و به برنامه مان اجازه دهیم با پایگاه داده صحبت کند. سپس همه چیز را با هم در یک فایل نوشتن قرار می دهیم که به ما امکان می دهد یک محیط توسعه محلی را با یک دستور راه اندازی و اجرا کنیم. سرانجام ، نگاهی خواهیم انداخت به اتصال اشکال زدایی به برنامه خود که در داخل یک کانتینر اجرا می شود.
بانک اطلاعات محلی و کانتینرها
به جای بارگیری MongoDB ، نصب ، پیکربندی و سپس اجرای پایگاه داده Mongo به عنوان سرویس. ما می توانیم از Docker Official Image برای MongoDB استفاده کنیم و آن را در یک کانتینر اجرا کنیم.
قبل از اینکه MongoDB را در یک کانتینر اجرا کنیم ، می خواهیم چند جلد ایجاد کنیم که Docker بتواند آنها را برای ذخیره داده ها و پیکربندی های مداوم ما مدیریت کند. من می خواهم به جای استفاده از پایه های اتصال ، از ویژگی های مدیریت شده حجم که docker ارائه می دهد استفاده کنم. شما می توانید همه مطالب مربوط به مجلدات را در مستندات ما بخوانید.
بیایید اکنون جلدهای خود را ایجاد کنیم. ما یکی برای داده ها و دیگری برای پیکربندی MongoDB ایجاد خواهیم کرد.
$ docker volume create mongodb
$ docker volume ایجاد mongodb_config
اکنون ما شبکه ای ایجاد کنید که برنامه و پایگاه داده ما از آن برای گفتگو با یکدیگر استفاده کنند. این شبکه یک شبکه پل تعریف شده توسط کاربر نامیده می شود و خدمات جستجوی DNS خوبی را در اختیار ما قرار می دهد که می توانیم هنگام ایجاد رشته اتصال از آن استفاده کنیم.
docker network ایجاد mongodb
اکنون می توانیم MongoDB را در کانتینر و به حجم ها و شبکه ای که در بالا ایجاد کردیم پیوست شود. Docker تصویر را از Hub بیرون می کشد و برای شما به صورت محلی اجرا می کند.
$ docker run -it --rm -d -v mongodb: / data / db
-v mongodb_config: / data / configdb -p 27017: 27017
- network mongodb
- نام mongodb
خوب ، حالا که یک mongodb در حال اجرا داریم ، بیایید server.js را به روز کنیم تا از یک MongoDB استفاده کنیم و نه از یک ذخیره داده در حافظه.
const ronin = نیاز ('ronin-server')
const mocks = نیاز ('ronin-mocks')
پایگاه داده const = نیاز ('ronin-database')
سرور const = ronin . ] server ()
پایگاه داده . اتصال (روند . env . CONNECTIONSTRING)
server . use ('/'، mocks . server (server . Router ()، false، false)]
server . start ()
ما ماژول پایگاه داده ronin را اضافه کردیم و کد را برای اتصال به پایگاه داده به روز کردیم و پرچم حافظه را false قرار دادیم. اکنون باید تصویر خود را بازسازی کنیم تا شامل تغییرات ما شود.
ابتدا اجازه دهید ماژول پایگاه داده ronin را با استفاده از npm به برنامه خود اضافه کنیم.
$ npm نصب پایگاه داده ronin
اکنون ما می تواند تصویر ما را بسازد.
$ docker build --tag node-docker.
حالا بیایید کانتینر خود را اجرا کنیم. اما این بار باید متغیر محیطی CONNECTIONSTRING را تنظیم کنیم تا برنامه ما بداند از کدام رشته اتصال برای دسترسی به پایگاه داده استفاده می کند. ما این کار را درست در دستور docker run انجام خواهیم داد.
$ docker run
-it --rm -d
- network mongodb
- name rest-server
-p 8000: 8000
-e CONNECTIONSTRING = mongodb: / / mongodb: 27017 / yoda_notes
node-docker
بیایید آزمایش کنیم که برنامه ما به پایگاه داده متصل است و می تواند یک یادداشت اضافه کند.
$ حلقه - درخواست POST
- url http: // localhost: 8000 / notes
- header 'type-type: application / json'
- data '{
"name": "this is a note"،
"text": "این است یادداشتی که می خواستم آن را یادداشت کنم زمانی که مشغول نوشتن یک پست وبلاگ بودم. "،
" صاحب ":" peter "
}"
[19659005] شما باید json زیر را از خدمات ما دریافت کنید.
{"کد": "موفقیت" ، "محموله": {"_ id": "5efd0a1552cd422b59d4f994" ، "نام": "این یادداشت است" ، "text": "این یادداشتی است که می خواستم هنگام نوشتن یک پست وبلاگ یادداشت کنم."، "صاحب": "peter"، "createDate": "2020-07-01T22: 11: 33.256Z" }}
استفاده از نوشتن برای توسعه محلی
عالی! اکنون ما MongoDB خود را در داخل یک کانتینر اجرا می کنیم و داده های آن را با حجم Docker ادامه می دهیم. ما همچنین توانستیم با استفاده از یک متغیر محیطی در رشته اتصال عبور کنیم.
اما این می تواند کمی وقت گیر باشد و همچنین به خاطر سپردن تمام متغیرهای محیطی ، شبکه ها و حجم هایی که باید ایجاد و راه اندازی شوند دشوار است. برنامه ما
در این بخش ، برای پیکربندی همه کارهایی که به صورت دستی انجام داده ایم ، از یک فایل Compose استفاده خواهیم کرد. ما همچنین فایل Compose را برای شروع برنامه در حالت اشکال زدایی تنظیم می کنیم تا بتوانیم اشکال زدایی را به روند گره در حال اجرا متصل کنیم.
IDE یا ویرایشگر متن مورد علاقه خود را باز کنید و یک فایل جدید به نام docker-compose.dev ایجاد کنید .امیل دستورات زیر را در آن پرونده کپی و پیست کنید.
نسخه: '3.8'
خدمات:
یادداشت ها:
build:
زمینه:.
بنادر:
- 8000: 8000
[19459109] 9229: 9229
محیط:
- CONNECTIONSTRING = mongodb: // mongo: 27017 / notes
[194590045] 90 جلد: 19659005] - ./:/ کد کد 19459010 برگزیده19659005] ترکیب19459009] دستور: npm اجرای اشکال زدایی
mongo:
4.2: mongo: 2 .8
بنادر:
- 27017: 27017
حجم:
-
-
- data / db
- mongodb_config: / data / configdb
volumes:
mongodb:
mongodb_config:
این فایل نوشتن بسیار مناسب است زیرا اکنون نیازی به تایپ کردن تمام پارامترها برای به دستور docker run بروید.
ما در حال آشکار کردن پورت 9229 هستیم تا بتوانیم یک خطایاب را پیوست کنیم. ما همچنین کد منبع محلی خود را در ظرف در حال نگاشت قرار می دهیم تا بتوانیم تغییراتی در ویرایشگر متن خود ایجاد کنیم و آن تغییرات را در محفظه انتخاب کنیم.
یکی دیگر از ویژگی های جالب استفاده از یک فایل نوشتن ، وضوح خدمات به طور خودکار برای ما تنظیم شده است. بنابراین اکنون می توانیم از "mongo" در رشته اتصال خود استفاده کنیم. دلیل اینکه ما می توانیم از "mongo" استفاده کنیم این است که این نامی است که ما در فایل نوشتن برای برچسب زدن به کانتینر خود با MongoDB خود استفاده کردیم.
برای اینکه بتوانیم برنامه خود را در حالت اشکال زدایی شروع کنیم ، باید یک خط به فایل pack.json برای گفتن به npm نحوه شروع برنامه در حالت اشکال زدایی.
فایل package.json را باز کنید و خط زیر را به بخش اسکریپت ها اضافه کنید.
"اشکال زدایی": "nodemon --inspect = 0.0.0.0: 9229 server.js "
همانطور که مشاهده می کنید ما از nodemon استفاده خواهیم کرد. Nodemon سرور ما را در حالت اشکال زدایی شروع می کند و همچنین پرونده هایی را که تغییر کرده اند تماشا می کند و سرور ما را مجدداً راه اندازی می کند. بیایید nodemon را به فایل package.json خود اضافه کنیم.
$ npm nodemon را نصب کنید
بیایید ابتدا برنامه در حال اجرا و ظرف mongodb را متوقف کنیم. سپس می توانیم برنامه خود را با استفاده از نوشتن شروع کرده و تأیید کنیم که به درستی اجرا می شود.
$ docker stop rest-server mongodb
$ docker-compose -f docker-compose.dev. yml up --build
در صورت بروز خطای زیر: 'پاسخ خطا از daemon: چنین ظرفی وجود ندارد: "نگران نباشید. این فقط به این معنی است که شما کانتینر را از قبل متوقف کرده اید یا در وهله اول در حال اجرا نبود.
خواهید دید که ما پرچم "-build" را به دستور docker-compose منتقل می کنیم. این به داکر می گوید که ابتدا تصویر ما را کامپایل کرده و سپس آن را شروع کند.
اگر همه چیز ادامه دارد ، باید چیزی مشابه را ببینید:
حالا بیایید نقطه پایانی API خود را آزمایش کنیم. دستور curl زیر را اجرا کنید:
curl $ - درخواست GET - url http: // localhost: 8000 / notes
شما باید پاسخ زیر را دریافت کنید:
{ "code": "موفقیت" ، "متا": {"کل": 0 ، "شمارش": 0} ، "محموله": []}
اتصال یک اشکال زدا
ما استفاده خواهیم کرد اشکال زدایی همراه با مرورگر Chrome. Chrome را روی دستگاه خود باز کنید و سپس موارد زیر را در نوار آدرس تایپ کنید.
about: inspect
صفحه زیر باز می شود.
روی پیوند "Open DevTools اختصاصی برای گره" کلیک کنید. با این کار پنجره DevTools که به فرآیند در حال اجرا node.js درون ظرف ما متصل است باز می شود.
بیایید کد منبع را تغییر دهیم و سپس یک نقطه شکست تعیین کنیم.
کد زیر را در خط 9 به پرونده server.js اضافه کنید و فایل را ذخیره کنید.
سرور . استفاده از ('/ foo'، ([ req ، res ) => {
بازگشت res . json ({"foo": "bar"})
}]
اگر به ترمینال محل اجرای برنامه نوشتن نگاهی بیندازید ، خواهید دید که nodemon متوجه تغییرات شده و برنامه ما را بارگیری مجدد کرد.
دوباره به Chrome DevTools بروید و نقطه خط را در خط 10 تنظیم کنید و سپس موارد زیر را اجرا کنید دستور curl برای ایجاد نقطه شکست.
$ curl - درخواست GET - url http: // localhost: 8000 / foo
💥BOOM 💥شکنید که کد را در خط 10 مشاهده می کنید و اکنون شما می توانید مانند اشکال عادی از اشکال زدا استفاده کنید. شما می توانید متغیرها را بازرسی و تماشا کنید ، نقاط تقسیم مشروط را تنظیم کنید ، رد پشته ها و یک سری موارد دیگر را مشاهده کنید.
نتیجه گیری
در این پست ، ما MongoDB را در یک کانتینر اجرا کردیم ، آن را به چند جلد متصل کردیم و یک شبکه ایجاد کردیم بنابراین برنامه ما می تواند با پایگاه داده صحبت کند. سپس ما از Docker Compose استفاده کردیم تا همه اینها را با هم در یک پرونده جمع کنیم. سرانجام ، ما نگاهی گذرا به پیکربندی برنامه خود برای شروع در حالت اشکال زدایی انداختیم و با استفاده از اشکال زدایی Chrome به آن متصل شدیم.
اگر س questionsالی دارید ، لطفاً از طریق توییتر pmckee تماس بگیرید. و به ما در انجمن شلیک ما بپیوندید.