با استفاده از Docker Desktop و Docker Hub Together – قسمت 1


در CTO های سریع جهانی که امروزه در حال توسعه هستند ، مدیران توسعه و مدیران محصولات خواستار چرخش سریع تری برای ویژگی ها و رفع نقص هستند. شما می گویید: "مشکلی نیست ، رئیس" "ما فقط از ظروف استفاده خواهیم کرد." و درست می گویید اما هنگامی که شروع به حفر کردن کنید و به دنبال راه هایی برای شروع کار با ظروف ، کاملاً صریح و آشکار ، پیچیده باشید.

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

Docker Desktop و Docker Hub دو ابزار اساسی برای ساخت تصاویر و ارسال به ابر هستند. در این مجموعه دو قسمتی ، Docker Desktop را تنظیم و نصب خواهیم کرد ، برخی از تصاویر را ساخته و با استفاده از Docker Compose آنها را اجرا می کنیم. سپس به این موضوع می پردازیم که چگونه می توانیم آن تصاویر را به ابر بفرستیم ، ساختهای خودکار را تنظیم کنیم و کد خود را با استفاده از Docker Hub مستقر کنیم.

Docker Desktop ساده ترین راه برای شروع کار با ظروف در توسعه شما دستگاه. Docker Desktop با موتورهای Docker ، Docker CLI ، Docker Compose و Kubernetes همراه است. با Docker Desktop هیچ کلونی از repos وجود ندارد ، در حال اجرا کردن پرونده ها و جستجوی StackOverflow برای رفع خطاهای ساخت و نصب هستید. شما فقط باید تصویر را برای سیستم عامل خود بارگیری کنید و برای شروع نصب دو بار کلیک کنید. بیایید سریعاً مراحل را طی کنیم.

نصب Docker Desktop

Docker Desktop برای مک و ویندوز در دسترس است. به صفحه اصلی Docker Desktop بروید و سیستم عامل خود را انتخاب کنید.

پس از اتمام بارگیری ، بر روی تصویر دوبار کلیک کنید و دستورالعمل های مربوط به نصب Docker Desktop را دنبال کنید. برای اطلاعات بیشتر در مورد نصب سیستم عامل خاص خود ، روی پیوند زیر کلیک کنید.

Docker Desktop UI Overview

پس از بارگیری و نصب Docker Desktop و نماد نهنگ پایدار شدید ، همه تنظیم شده اید. Docker Desktop روی دستگاه شما اجرا می شود.

Dashboard

اکنون ، بیایید داشبورد داکر را باز کنیم و به آن نگاهی بیندازیم.

بر روی نماد Docker کلیک کرده و از منوی کشویی "دسک تاپ" را انتخاب کنید.

پنجره زیر باید باز شود:

همانطور که می بینید ، در حال حاضر هیچ کانتینی نداریم. ما این مسئله را در عرض یک دقیقه برطرف خواهیم کرد ، اما فعلاً بیایید سریع به داشبورد برویم.

با Docker ID وارد شوید

اولین کاری که می خواهیم انجام دهیم ورود به سیستم با Docker ID است. اگر در حال حاضر یکی از آنها را ندارید ، به قسمت Docker Hub رفته و عضو شوید. برو جلو ، من صبر خواهم کرد. 😁

خوب ، در گوشه بالا سمت راست داشبورد ، دکمه ورود به سیستم را مشاهده خواهید کرد. بر روی آن کلیک کرده و Docker ID و رمز عبور خود را وارد کنید. اگر در عوض ، شناسه Docker خود را مشاهده کنید ، از قبل وارد سیستم شده اید.

تنظیمات

اکنون بیایید نگاهی به تنظیماتی که می توانید در Docker Desktop تنظیم کنید کنید. بر روی نماد تنظیمات در گوشه سمت راست بالای پنجره کلیک کنید و باید صفحه تنظیمات را مشاهده کنید:

General

در زیر این برگه جایی است که شما هنگام ورود به سیستم ، تنظیمات کلی مانند شروع Docker Desktop را پیدا خواهید کرد. به دستگاه شما ، با بررسی خودکار بروزرسانی ها ، شامل Docker Desktop VM در پشتیبان گیری ها ، یا اینکه آیا Docker Desktop آمار استفاده را به Docker ارسال می کند.

این تنظیمات پیش فرض خوب است. شما واقعاً نیازی به تغییر آنها ندارید مگر اینکه در حال ساخت تصاویر پیشرفته هستید و نیازی به تهیه نسخه پشتیبان از تصاویر کار خود ندارید. یا می خواهید کنترل بیشتری هنگام شروع کار Docker Desktop داشته باشید.

منابع

بعدی اجازه دهید نگاهی به برگه منابع بیندازیم. در این برگه و زیر برگه های آن جایی است که می توانید منابعی را که به محیط Docker اختصاص داده شده است ، کنترل کنید. این تنظیمات پیش فرض برای شروع کافی است. اگر در حال ساختن بسیاری از تصاویر هستید یا بسیاری از ظروف را به طور هم زمان اجرا می کنید ، ممکن است بخواهید تعداد پردازنده ها ، حافظه و رم را مرتفع کنید. می توانید اطلاعات بیشتری در مورد این تنظیمات را در مستندات ما بیابید.

Docker Engine

اگر به دنبال ایجاد پیشرفت های پیشرفته تر در نحوه عملکرد Docker Engine هستید ، این برگه برای شماست. Daemon Engine Docker Engine با استفاده از پرونده daemon.json در /etc/docker/daemon.json در سیستم های لینوکس پیکربندی شده است. اما هنگام استفاده از Docker Desktop ، تنظیمات پیکربندی را در اینجا در قسمت متن ارائه شده اضافه خواهید کرد. این تنظیمات به موتور Docker منتقل می شود که با Docker Desktop استفاده می شود. کلیه تنظیمات موجود در اسناد موجود است.

خط فرمان

روشن و خاموش کردن ویژگی های آزمایشی برای CLI به همان سادگی سوئیچ است. این ویژگی ها فقط برای اهداف آزمایش و بازخورد است. بنابراین برای تولید به آنها اعتماد نکنید.

می توانید اطلاعات بیشتری در مورد ویژگی های آزمایشی در ساخت خود در این صفحه مستندات کسب کنید.

Kubernetes

Docker Desktop با یک سرور و مشتری Kubernetes مستقل است. با Docker CLI ادغام شده است. در این برگه جایی است که می توانید این Kubernetes را فعال و غیرفعال کنید. این نمونه از Kubernetes قابل تنظیم نیست و همراه با یک خوشه تک گره است.

سرور Kubernetes درون یک ظرف Docker اجرا می شود و فقط برای آزمایش محلی در نظر گرفته شده است. هنگامی که پشتیبانی Kubernetes فعال شد ، می توانید بار کار خود را بطور موازی روی کانتینرهای Kubernetes ، Swarm و به عنوان ظروف مستقل مستقر کنید. فعال یا غیرفعال کردن سرور Kubernetes تاثیری در بار کار دیگر شما نخواهد داشت.

عیب یابی

اجازه دهید به صفحه عیب یابی برویم. روی نماد اما در گوشه سمت راست بالای پنجره کلیک کنید و باید صفحه Troubleshoot زیر را مشاهده کنید:

در اینجاست که می توانید Docker Desktop ، Run Diagnostics ، تنظیم مجدد ویژگی ها و حذف نصب Docker Desktop را راه اندازی مجدد کنید.
[19659005] Building Images and Running Containers

اکنون که ما Docker Desktop را نصب کرده ایم و یک مرور کلی از UI داریم ، بیایید به آن بپردازیم و یک تصویر Docker ایجاد کنیم که بتوانیم آن را اجرا کنیم و به Hub ارسال کنیم.

Docker از دو اصلی تشکیل شده است. مؤلفه ها: موتوری که به عنوان یک Daemon روی سیستم شما اجرا می شود و یک CLI که دستورات خود را برای ساخت ، ارسال و اجرای تصاویر و ظروف خود به Daemon ارسال می کند.

در این مقاله ، ما در درجه اول با Docker از طریق CLI در تعامل خواهیم بود.

تفاوت بین تصاویر و ظروف

یک ظرف فرایندی است که بر روی سیستم شما اجرا می شود درست مانند هر فرآیند دیگر. اما تفاوت بین یک فرایند "ظرف" و یک فرآیند "عادی" در این است که فرآیند کانتینر از سایر منابع موجود در سیستم ماسهبازی شده یا جدا شده است.

یکی از قطعه های اصلی این جداسازی سیستم پرونده است. هر کانتینر فایل سیستم شخصی خود را دارد که از تصویر Docker ایجاد شده است. این تصویر Docker جایی است که همه چیز برای اجرای فرایندها بسته بندی شده است – کد ، کتابخانه ها ، پرونده های پیکربندی ، متغیرهای محیط و زمان اجرا.

ایجاد یک تصویر Docker

من یک برنامه node.js کوچک را برای شما قرار داده ام. برای اهداف تظاهرات استفاده خواهیم کرد اما هر برنامه وب همان اصولی را که ما در مورد آنها صحبت خواهیم کرد پیروی می کند. احساس رایگان کنید تا از برنامه خود استفاده کنید و دنبال کنید.

ابتدا بیایید برنامه را از GitHub کلون کنیم.

$ git clone [email protected]: pmckeetx / projectz.git

پروژه در ویرایشگر متن مورد علاقه خود. خواهید دید که این برنامه از یک رابط کاربری داخلی در React.js و یک سرویس باطن نوشته شده در Node.js و Express تشکیل شده است.

بیایید وابستگی ها را نصب کنیم و برنامه را به صورت محلی اجرا کنیم تا مطمئن شویم که همه چیز کار می کند. [19659049] ترمینال مورد علاقه خود و cd را در فهرست اصلی پروژه قرار دهید.

$ cd خدمات

$ npm install

Now بیایید وابستگی UI را نصب کنیم.

$ cd ../uiociation19459018 غلط19659049 قراردادن19459017 غلبه بر npm نصب

بیایید ابتدا خدمات را شروع کنیم. یک پنجره ترمینال جدید و cd را در فهرست خدمات قرار دهید. برای اجرای برنامه ، دستور زیر را اجرا کنید:

$ npm run run

در پنجره ترمینال اصلی خود ، UI را شروع کنید. برای شروع UI ، دستور زیر را اجرا کنید:

$ npm run start

اگر یک پنجره مرورگر به طور خودکار برای شما باز نشده است ، مرورگر مورد علاقه خود را آتش بگیرید و به http: // localhost بروید: 3000 /

باید صفحه زیر را مشاهده کنید:

اگر لیستی از پروژه ها را نمی بینید یا پیام خطایی دریافت نمی کنید ، مطمئن شوید که پروژه خدمات را در حال اجرا دارید.

باشه ،

Dockerfile

قبل از ساختن تصاویر ، اجازه دهید نگاهی گذرا به Dockerfile که برای ساختن تصویر خدمات استفاده خواهیم کرد ، نگاهی بیاندازیم.

در texteditor ، باز کردن Dockerfile برای پروژه خدمات. شما باید موارد زیر را مشاهده کنید.

 از گره: lts
 
ARG NODE_ENV = تولید
ENV NODE_ENV $ NODE_ENV
 
WORKDIR / کد
 
ARG PORT = 80
ENV PORT $ PORT
 
بسته COPY.json /code/package.json
COPY pack-lock.json /code/package-lock.json
RUN npm ci
 
کپی 🀄 . / کد
 
CMD [ "node", "src/server.js" ]

یک Dockerfile در واقع یک اسکریپت پوسته است که به Docker می گوید که چگونه تصویر خود را بسازد.

 از گره: lts 

اولین خط در پرونده به Docker می گوید که ما از پشتیبانی طولانی مدت استفاده خواهیم کرد. node.js به عنوان تصویر پایه ما.

 ARG NODE_ENV = تولید
ENV NODE_ENV $ NODE_ENV 

در مرحله بعد ، ما یک آرگومان ساختیم و مقدار پیش فرض را تعیین می کنیم "تولید" و سپس NODE_ENV متغیر را با آنچه در NODE_ENV ساخته شده است تنظیم می کنیم. arg.

 WORKDIR / code 

اکنون ما به داکر می خواهیم دایرکتوری به نام کد ایجاد کند و از آن بعنوان دایرکتوری کار ما استفاده کند. دستورات زیر COPY و RUN در این فهرست انجام می شوند:

 ARG PORT = 80
ENV PORT $ PORT 

در اینجا ما یک استدلال ساخت دیگری ایجاد می کنیم و 80 را به عنوان مقدار اختصاص می دهیم. سپس از این آرگومان ساخت برای تنظیم متغیر محیط PORT استفاده می شود.

 COPY pack.json /code/package.json
COPY pack-lock.json /code/package-lock.json
RUN npm ci 

این دستورات COPY بسته های * .json را در تصویر ما کپی می کنند و برای نصب گره از npm ci استفاده می کنند. وابستگی js.

 کپی. / code 

اکنون کد برنامه ما را در تصویر کپی خواهیم کرد.

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

بنابراین ، برای مثال ، ما می خواهیم قبل از کپی کردن منبع منبع ، پرونده های pack.json و pack-Lock.json را در تصویر کپی کنیم زیرا کد منبع بیشتر از اضافه کردن ماژول ها به عکس تغییر می کند. پرونده pack.json پرونده.

 CMD [ "node", "src/server.js" ]

آخرین خط در Dockerfile ما به داکر می گوید چه دستوراتی را می خواهیم هنگام شروع تصویر ما اجرا کنیم. در این حالت ، می خواهیم دستور را اجرا کنیم: node src / server.js

ساختن تصویر

اکنون که ما Dockerfile خود را می فهمیم. بگذارید Docker تصویر را بسازد.

در ریشه فهرست خدمات ، دستور زیر را اجرا کنید:

$ docker build --tag projectz-svc.

این به ساخت Docker می گوید. تصویر ما با استفاده از Dockerfile واقع در فهرست موجود و سپس برچسب آن تصویر با projectz-svc

شما باید هنگام خروج کار ساخت تصویر ، یک خروجی مشابه را ببینید. [19659002] با موفقیت 922d1db89268 را ساخت

با موفقیت برچسب گذاری شده توسط projectz-svc

حالا بیایید ظرف خود را اجرا کنیم و مطمئن شویم که می توانیم به آن وصل شویم. برای شروع تصویر ، دستور زیر را اجرا کنید و پورت 8080 را به پورت 80 در داخل ظرف خود وصل کنید.

$ docker run -it --rm --name service -p 8080: 80 projectz-svc [19659002] باید موارد زیر را در ترمینال چاپ کنید:

گوش دادن به درگاه: 80

مرورگر خود را باز کنید و به http: // localhost: 8080 / خدمات / پروژه ها

گوش دهید. خوب ، شما یک دسته از json برگشت داده شده در مرورگر را مشاهده خواهید کرد و «دریافت / خدمات / پروژه ها» که در ترمینال چاپ شده است.

بیایید همین کار را برای UI جلویی انجام دهیم. من در این زمان شما را از طریق Dockerfile نمی گذارم ، اما وقتی می خواهیم به Cloud فشار بیاوریم دوباره مرور خواهیم کرد.

در ترمینال خود به فهرست منبع UI بروید و دستورات زیر را اجرا کنید:

$ docker build --tag projectz-ui.

$ docker run -it --rm --name ui -p 3000: 80 projectz-ui

باز هم مرورگر مورد علاقه خود را باز کنید و به http: // localhost: 3000 /

عالی !!!

اکنون ، اگر به یاد داشته باشید در ابتدای مقاله ، نگاهی به رابط کاربری Docker Desktop بیندازید. در آن زمان هیچ کانتینی در حال کار نبودیم. داشبورد داکر را با کلیک کردن روی نماد نهنگ () یا در قسمت اعلان (یا سیستم سینی) در ویندوز یا از نوار منو در مک باز کنید.

اکنون می توانیم دو ظروف خود را در حال اجرا مشاهده کنیم:

اگر آنها را در حال اجرا نمی بینید ، دستورات زیر را در ترمینال خود مجدداً اجرا کنید.

$ docker run -it --rm --name service -p 8080: 80 projectz-svc

$ docker run -it --rm --name ui -p 3000: 80 projectz-ui

موس خود را روی یکی از تصاویر معلق بگیرید و خواهید دید که دکمه ها ظاهر می شوند.

با این دکمه هایی که می توانید موارد زیر را انجام دهید:

  • در مرورگر باز شود – اگر کانتینر یک پورت را در معرض دید قرار داد ، می توانید روی این دکمه کلیک کرده و برنامه خود را در یک مرورگر باز کنید.
  • CLI – این دکمه docker را اجرا خواهد کرد. در یک ترمینال برای شما.
  • Stop / Start – می توانید ظرف خود را راه اندازی و متوقف کنید.
  • راه اندازی مجدد – شما همچنین می توانید ظرف خود را مجدداً راه اندازی کنید.
  • حذف – همچنین می توانید r

اکنون روی صفحه ui کلیک کنید تا صفحه جزئیات آن را مشاهده کنید.

در صفحه جزئیات ، ما قادر به مشاهده پرونده های کانتینر ، بازرسی از ظروف و مشاهده آمارهایی از قبیل استفاده از CPU ، استفاده از حافظه هستیم. ، خواندن / نوشتن دیسک ، و شبکه I / O.

Docker-compose

حالا اجازه دهید نگاهی بیندازیم که چگونه می توانیم با استفاده از docker-compose این کار را کمی ساده تر انجام دهیم. با استفاده از docker-compose ، می توانیم برنامه های کاربردی خود را در یک پرونده پیکربندی کنیم و هر دو را با یک دستور شروع کنیم.

اگر به ریشه repo git ما نگاهی بیندازید ، می توانید یک docker-comppos را ببینید. پرونده .yml . آن پرونده را در ویرایشگر متن خود باز کنید و اجازه دهید نگاهی بیندازیم.

 نسخه: "3.7"
 
خدمات:
 
 تو:
   تصویر: projectz-ui
   ساختن:
     زمینه: ./ui
     استدلال می کند:
       NODE_ENV: تولید
       REACT_APP_SERVICE_HOST: http: // localhost: 8080
   پورت ها:
     - "3000: 80"
 
 خدمات:
   تصویر: projectz-svc
   ساختن:
     زمینه: ./ خدمات
     استدلال می کند:
       NODE_ENV: تولید
       پورت: "80"
   پورت ها:
     - "8080: 80"

این پرونده تمام پارامترهایی را که ما برای ایجاد و اجرای سرویس های خود به دو دستور قبلی خود منتقل کرده ایم ، ترکیب می کند.

اگر قبلاً چنین کاری نکرده اید ، سرویس ها و ظروف ui را که زودتر شروع می کنیم ، متوقف کرده و آنها را حذف کنید.

خدمات توقف docker

$ docker stop ui

حالا بیایید برنامه خود را با استفاده از docker-compose شروع کنیم. اطمینان حاصل کنید که در ریشه git repo هستید و دستور زیر را اجرا می کنید:

$ docker-compose up --build

Docker-compose تصاویر ما را ساخته و برچسب گذاری می کند. پس از اتمام کار ، آهنگسازی دو ظروف شروع می کند – یکی برای برنامه UI و دیگری برنامه خدمات.

صفحه داشبورد دسکتاپ دسکر را باز کنید و اکنون می توانید ببینید که ما projectz در حال اجرا است.

پروژه projectz را گسترش داده و دو کانتینر ما را در حال اجرا می بینید:

اگر روی هر یک از ظروف کلیک کنید ، به همان صفحه های جزئیات مانند گذشته دسترسی خواهید داشت. [19659002Docker-composeپیشرفتبیشتریدراجرایهریکازدستوراتdockerbuild و docker run مانند گذشته دارد. فقط تصور کنید که اگر شما دارای 10s سرویس یا حتی 10000 خدمات میکرو بودید که برنامه خود را اجرا می کردند و باید هر ظرف جداگانه را یک بار شروع کنید. با docker-compose ، می توانید برنامه خود را پیکربندی کنید ، آرگومان بسازید و همه خدمات را با یک دستور شروع کنید.

مراحل بعدی

برای اطلاعات بیشتر در مورد نحوه استفاده از دسک تاپ ، این منابع را بررسی کنید:

برای قسمت دوم این سری تنظیم شده است که در آن از داکتر هاب برای ساخت تصاویرمان استفاده خواهیم کرد ، تست های خودکار را اجرا می کنیم و تصاویر خود را به ابر سوق می دهیم.