برنامه نویسی

کانتینرهای داکر | فضای نام لینوکس | جداسازی کانتینر

Summarize this content to 400 words in Persian Lang

مقدمه

این مقاله مهارت های فنی زیر را پوشش می دهد:

در این آزمایشگاه، اولین کانتینر Docker خود را اجرا خواهید کرد.

کانتینرها فقط یک فرآیند (یا گروهی از فرآیندها) هستند که به صورت مجزا اجرا می شوند. جداسازی از طریق فضاهای نام لینوکس، گروه های کنترل (cgroups)، seccomp و SELinux به دست می آید. توجه داشته باشید که فضاهای نام لینوکس و گروه های کنترل در هسته لینوکس ساخته شده اند! به غیر از خود هسته لینوکس، چیز خاصی در مورد کانتینرها وجود ندارد.

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

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

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

ما از چند دستور Docker در این آزمایشگاه استفاده خواهیم کرد. برای مستندات کامل در مورد دستورات موجود، اسناد رسمی را بررسی کنید.

شروع کنید

یک ترمینال در LabEx VM باز کنید و آن را اجرا کنید docker -h، که صفحه راهنمای Docker CLI را به شما نشان می دهد.

$ docker -h
Flag shorthand -h has been deprecated, please use –help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خط فرمان Docker می تواند برای مدیریت چندین ویژگی Docker Engine استفاده شود. در این آزمایشگاه، ما به طور عمده بر روی container فرمان

نصب کنید podman در LabEx VM شما.

sudo apt-get install podman

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر podman نصب شده است، می توانید دستور جایگزین را برای مقایسه اجرا کنید.

اگر ندارید podman نصب شده، می توانید اجرا کنید sudo apt-get update && sudo apt-get upgrade دستور ارتقای نرم افزار

sudo podman -h

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

علاوه بر این می توانید نسخه نصب Docker خود را نیز بررسی کنید docker version

docker version

Client:
Version: 20.10.21

Server:
Engine:
Version: 20.10.21

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که Docker هر دو a را نصب می کند Client و الف Server: Docker Engine. به عنوان مثال، اگر فرمان مشابهی را برای podman اجرا کنید، فقط یک نسخه CLI را مشاهده خواهید کرد، زیرا پادمن بدون دیمون اجرا می شود و برای ایجاد کانتینرهای در حال اجرا به یک کانتینر سازگار با OCI (runc، crun، و غیره) متکی است تا با سیستم عامل ارتباط برقرار کند تا کانتینرهای در حال اجرا را ایجاد کند. .

sudo podman version –events-backend=none
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.17.3
Built: Thu Jan 1 08:00:00 1970
OS/Arch: linux/amd64

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین کانتینر خود را اجرا کنید

ما قصد داریم از Docker CLI برای اجرای اولین کانتینر خود استفاده کنیم.

یک ترمینال در LabEx VM باز کنید.

دستور را اجرا کنید.

docker container run -t ubuntu top

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده کنید docker container run دستور اجرای یک کانتینر با ubuntu تصویر با استفاده از top فرمان این -t پرچم ها یک شبه TTY را اختصاص می دهند که برای آن نیاز داریم top به درستی کار کند

$ docker container run -it ubuntu top
Unable to find image ‘ubuntu:latest’ locally
latest: Pulling from library/ubuntu
aafe6b5e13de: Pull complete
0a2b43a72660: Pull complete
18bdd1e546d2: Pull complete
8198342c3e05: Pull complete
f56970a44fd4: Pull complete
Digest: sha256:f3a61450ae43896c4332bda5e78b453f4a93179045f20c8181043b26b5e79028
Status: Downloaded newer image for ubuntu:latest

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این docker run دستور ابتدا به a منجر می شود docker pull برای دانلود تصویر اوبونتو در هاست خود. پس از دانلود، ظرف را راه اندازی می کند. خروجی کانتینر در حال اجرا باید به شکل زیر باشد:

top – 20:32:46 up 3 days, 17:40, 0 users, load average: 0.00, 0.01, 0.00
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2046768 total, 173308 free, 117248 used, 1756212 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1548356 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 36636 3072 2640 R 0.3 0.2 0:00.04 top

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

top یک ابزار لینوکس است که فرآیندها را در یک سیستم چاپ می کند و آنها را بر اساس مصرف منابع سفارش می دهد. توجه داشته باشید که تنها یک فرآیند در این خروجی وجود دارد: آن است top خود فرآیند به دلیل جداسازی فضای نام PID، فرآیندهای دیگری از میزبان خود را در این لیست نمی‌بینیم.

کانتینرها از فضای نام لینوکس برای جداسازی منابع سیستم از سایر کانتینرها یا میزبان استفاده می کنند. فضای نام PID جداسازی شناسه های فرآیند را فراهم می کند. اگر بدوید top در داخل کانتینر، متوجه خواهید شد که فرآیندهای داخل فضای نام PID کانتینر را نشان می دهد، که بسیار متفاوت از آنچه در صورت اجرا می توانید مشاهده کنید. top روی میزبان

حتی اگر ما از آن استفاده می کنیم ubuntu image، توجه به این نکته مهم است که ظرف ما هسته خود را ندارد. از هسته هاست و the استفاده می کند ubuntu تصویر فقط برای ارائه سیستم فایل و ابزارهای موجود در یک سیستم اوبونتو استفاده می شود.

ظرف را با docker container exec

این docker container exec دستور راهی برای “وارد کردن” فضاهای نام کانتینر در حال اجرا با یک فرآیند جدید است.

یک ترمینال جدید باز کنید انتخاب کنید Terminal > New Terminal.

در ترمینال جدید، از docker container ls دستور برای دریافت شناسه کانتینر در حال اجرا که ایجاد کرده اید.

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3ad2a23fab3 ubuntu “top” 29 minutes ago Up 29 minutes goofy_nobel

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس از آن شناسه برای اجرا استفاده کنید bash داخل آن ظرف با استفاده از docker container exec فرمان از آنجایی که ما از bash استفاده می کنیم و می خواهیم با این کانتینر از ترمینال خود تعامل داشته باشیم، استفاده کنید -it پرچم‌ها را برای اجرا با استفاده از حالت تعاملی در حین تخصیص یک ترمینال کاذب.

$ docker container exec -it ID > bash
root@b3ad2a23fab3:/#

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و وویلا! ما فقط استفاده کردیم docker container exec دستور “ورود” فضای نام کانتینر ما با فرآیند bash ما. با استفاده از docker container exec با bash یک الگوی متداول برای بازرسی کانتینر داکر است.

به تغییر پیشوند ترمینال خود توجه کنید. به عنوان مثال root@b3ad2a23fab3:/. این نشانه این است که ما در حال اجرا در “داخل” ظرف خود هستیم.

توجه داشته باشید: این مانند وارد شدن به یک میزبان جداگانه یا یک VM نیست. برای اتصال با فرآیند bash به سرور ssh نیاز نداریم. به یاد داشته باشید که کانتینرها از ویژگی های سطح هسته برای رسیدن به ایزوله استفاده می کنند و کانتینرها در بالای هسته اجرا می شوند. ظرف ما فقط گروهی از فرآیندهایی است که به صورت مجزا در همان میزبان اجرا می شوند و ما می توانیم از آنها استفاده کنیم docker container exec برای وارد شدن به آن انزوا با bash فرآیند بعد از دویدن docker container exec، گروهی از فرآیندهای در حال اجرا به صورت مجزا (یعنی ظرف ما) شامل top و bash.

از همان ترمینال اجرا کنید ps -ef برای بازرسی فرآیندهای در حال اجرا

root@b3ad2a23fab3:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:34 ? 00:00:00 top
root 17 0 0 21:06 ? 00:00:00 bash
root 27 17 0 21:14 ? 00:00:00 ps -ef

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما باید فقط ببینید top فرآیند، bash فرآیند و ما ps فرآیند

برای مقایسه، از ظرف خارج شده و اجرا کنید ps -ef یا top روی میزبان این دستورات روی لینوکس یا مک کار می کنند. برای ویندوز، می توانید با استفاده از فرآیندهای در حال اجرا را بررسی کنید tasklist.

root@b3ad2a23fab3:/# exit
exit
$ ps -ef
# Lots of processes!

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شیرجه عمیق فنیPID تنها یکی از فضاهای نام لینوکس است که کانتینرهایی را با ایزوله به منابع سیستم ارائه می کند. سایر فضاهای نام لینوکس عبارتند از:

MNT – دایرکتوری‌ها را بدون تأثیرگذاری بر سایر فضاهای نام نصب و جدا کنید
NET – کانتینرها پشته شبکه مخصوص به خود را دارند
IPC – مکانیسم های ارتباطی بین فرآیندی ایزوله مانند صف های پیام.
کاربر – نمای ایزوله از کاربران در سیستم
UTC – نام میزبان و نام دامنه را در هر ظرف تنظیم کنید

این فضاهای نام با هم جداسازی کانتینرها را فراهم می کنند که به آنها اجازه می دهد به طور ایمن و بدون تضاد با سایر کانتینرهای در حال اجرا در همان سیستم اجرا شوند. در ادامه کاربردهای مختلف ظروف را نشان خواهیم داد. و مزیت ایزوله شدن به دلیل اجرای چندین کانتینر روی یک میزبان.

توجه داشته باشید: فضای نام یکی از ویژگی های است لینوکس هسته اما داکر به شما اجازه می دهد تا کانتینرها را روی ویندوز و مک اجرا کنید… چگونه کار می کند؟ راز این است که در محصول داکر یا موتور داکر یک زیرسیستم لینوکس تعبیه شده است. Docker این زیرسیستم لینوکس را با منبع باز به پروژه جدیدی تبدیل کرد: LinuxKit. امکان اجرای کانتینرها بر روی پلتفرم های مختلف یکی از مزایای استفاده از ابزار Docker با کانتینرها است.

علاوه بر اجرای ظروف لینوکس در ویندوز با استفاده از زیرسیستم لینوکس، کانتینرهای بومی ویندوز اکنون به دلیل ایجاد کانتینرهای اولیه در سیستم عامل ویندوز امکان پذیر است. کانتینرهای ویندوز بومی را می توان در ویندوز 10 یا ویندوز سرور 2016 یا جدیدتر اجرا کرد.

توجه داشته باشید: اگر این تمرین را در یک ترمینال کانتینری اجرا کنید و آن را اجرا کنید ps -ef دستور در ترمینال، شما همچنان مجموعه محدودی از فرآیندها را پس از خروج از آن خواهید دید exec فرمان می توانید سعی کنید برنامه را اجرا کنید ps -ef در یک ترمینال در دستگاه محلی خود دستور دهید تا همه فرآیندها را ببینید.

ظرف در حال اجرا را تمیز کنید top پردازش با تایپ کردن: -c، همه کانتینرها را فهرست کنید و کانتینرها را با شناسه آنها حذف کنید.

docker ps -a

docker rm

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چندین کانتینر را اجرا کنید

داکر هاب را کاوش کنید

داکر هاب یک مرکز ثبت عمومی برای تصاویر داکر است که شامل تصاویر انجمن و رسمی است.

هنگام جستجوی تصاویر، فیلترهایی برای تصاویر “Docker Certified”، “Verified Publisher” و “Official Images” پیدا خواهید کرد. فیلتر “Docker Certified” را انتخاب کنید تا تصاویری را پیدا کنید که برای شرکت آماده هستند و با محصول Docker Enterprise Edition آزمایش شده اند. مهم است که هنگام توسعه تصاویر خود که قرار است در محیط تولید مستقر شوند، از محتوای تایید نشده از Docker Store استفاده نکنید. این تصاویر تأییدنشده ممکن است حاوی آسیب‌پذیری‌های امنیتی یا احتمالاً حتی نرم‌افزارهای مخرب باشند.

در مرحله 2 این آزمایشگاه، ما چند کانتینر را با استفاده از برخی تصاویر تأیید شده از داکر هاب شروع می کنیم: وب سرور nginx و پایگاه داده mongo.

سرور Nginx را اجرا کنید

بیایید یک کانتینر را با استفاده از تصویر رسمی Nginx از Docker Hub اجرا کنیم.

docker container run –detach –publish 8080:80 –name nginx nginx

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما در اینجا از چند پرچم جدید استفاده می کنیم. این –detach flag این ظرف را در پس‌زمینه اجرا می‌کند. این publish flag پورت 80 را در کانتینر (درگاه پیش‌فرض برای nginx) از طریق پورت 8080 در هاست ما منتشر می‌کند. به یاد داشته باشید که فضای نام NET به فرآیندهای کانتینر پشته شبکه خود را می دهد. این –publish flag یک ویژگی است که به ما امکان می دهد شبکه را از طریق کانتینر بر روی میزبان قرار دهیم.

چگونه می دانید که پورت 80 پورت پیش فرض nginx است؟ زیرا در اسناد موجود در Docker Hub ذکر شده است. به طور کلی، مستندات برای تصاویر تأیید شده بسیار خوب است، و هنگام اجرای کانتینرها با استفاده از آن تصاویر، باید به آنها مراجعه کنید.

ما همچنین در حال مشخص کردن آن هستیم –name flag که ظرف را نامگذاری می کند. هر کانتینری یک نام دارد، اگر نامی را مشخص نکنید، داکر به طور تصادفی یکی را برای شما اختصاص می دهد. تعیین نام خود، اجرای دستورات بعدی را در کانتینر آسان‌تر می‌کند، زیرا می‌توانید به جای شناسه کانتینر به نام اشاره کنید. به عنوان مثال: docker container inspect nginx به جای docker container inspect 5e1.

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

Nginx یک وب سرور سبک وزن است. شما می توانید به سرور nginx دسترسی داشته باشید وب 8080 تب LabEx VM. آن را تغییر دهید و صفحه را رفرش کنید تا خروجی nginx را ببینید.

اجرا کنید mongo سرور DB

اکنون یک سرور mongoDB را اجرا کنید. ما از تصویر رسمی mongoDB از داکر هاب استفاده خواهیم کرد. به جای استفاده از latest تگ (که پیش‌فرض است اگر تگ مشخص نشده باشد)، از یک نسخه خاص از تصویر mongo استفاده خواهیم کرد: 4.4.

docker container run –detach –publish 8081:27017 –name mongo mongo:4.4

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باز هم، از آنجایی که این اولین بار است که یک کانتینر مونگو را اجرا می کنیم، تصویر مونگو را از فروشگاه Docker پایین می کشیم. ما در حال استفاده از –publish پرچم گذاری کنید تا پورت 27017 مونگو را در میزبان خود نمایان کنیم. ما باید از پورتی غیر از 8080 برای نگاشت هاست استفاده کنیم، زیرا آن پورت از قبل روی هاست ما در معرض دید قرار گرفته است. مجدداً به اسناد رسمی Docker Hub مراجعه کنید تا جزئیات بیشتری در مورد استفاده از تصویر mongo بدست آورید.

خروجی mongoDB را با استفاده از آن مشاهده کنید 0.0.0.0:8081 در مرورگر وب باید پیامی را مشاهده کنید که اخطاری را از MongoDB برمی‌گرداند.

ظروف در حال اجرا خود را با docker container ls

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6777df89fea nginx “nginx -g ‘daemon …” Less than a second ago Up 2 seconds 0.0.0.0:8080- nginx > 80/tcp
ead80a0db505 mongo “docker-entrypoint…” 17 seconds ago Up 19 seconds 0.0.0.0:8081- mongo > 27017/tcp
af549dccd5cf ubuntu “top” 5 minutes ago Up 5 minutes priceless_kepler

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باید ببینید که یک کانتینر وب سرور Nginx و یک کانتینر MongoDB در حال اجرا روی هاست خود دارید. توجه داشته باشید که ما این کانتینرها را برای صحبت با یکدیگر پیکربندی نکرده ایم.

می‌توانید نام‌های “nginx” و “mongo” را که به کانتینرهای خود داده‌ایم، و نام تصادفی (در مورد من “priceless_kepler”) که برای کانتینر اوبونتو ایجاد شده است را ببینید. همچنین می توانید ببینید که نگاشت پورت هایی که ما با آن مشخص کردیم –publish پرچم برای اطلاعات بیشتر در مورد این کانتینرهای در حال اجرا می توانید از بازرسی کانتینر داکر [container id command.

One thing you might notice is that the mongo container is running the docker-entrypoint command. This is the name of the executable that is run when the container is started. The mongo image requires some prior configuration before kicking off the DB process. You can see exactly what the script does by looking at it on github. Typically, you can find the link to the github source from the image description page on the Docker Store website.

Containers are self-contained and isolated, which means we can avoid potential conflicts between containers with different system or runtime dependencies. For example: deploying an app that uses Java 7 and another app that uses Java 8 on the same host. Or running multiple nginx containers that all have port 80 as their default listening ports (if exposing on the host using the –publish flag, the ports selected for the host will need to be unique). Isolation benefits are possible because of Linux Namespaces.

Note: You didn’t have to install anything on your host (other than Docker) to run these processes! Each container includes the dependencies that it needs within the container, so you don’t need to install anything on your host directly.

Running multiple containers on the same host gives us the ability to fully utilize the resources (cpu, memory, etc) available on single host. This can result in huge cost savings for an enterprise.

While running images directly from the Docker Hub can be useful at times, it is more useful to create custom images, and refer to official images as the starting point for these images. We will dive into building our own custom images in Lab 2.

Clean up

Completing this lab results in a bunch of running containers on your host. Let’s clean these up.

First get a list of the containers running using docker container ls.

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6777df89fea nginx “nginx -g ‘daemon …” 3 minutes ago Up 3 minutes 0.0.0.0:8080- nginx > 80/tcp
ead80a0db505 mongo “docker-entrypoint…” 3 minutes ago Up 3 minutes 0.0.0.0:8081- mongo > 27017/tcp
af549dccd5cf ubuntu “top” 8 minutes ago Up 8 minutes priceless_kepler

Enter fullscreen mode

Exit fullscreen mode

Next, run docker container stop [container id] برای هر ظرف در لیست همچنین می توانید از نام کانتینرهایی که قبلاً مشخص کرده اید استفاده کنید.

$ docker container stop d67 ead af5
d67
ead
af5

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید: برای منحصر به فرد بودن فقط باید به تعداد کافی از ارقام شناسه ارجاع دهید. سه رقم تقریباً همیشه کافی است.

ظروف متوقف شده را بردارید

docker system prune یک دستور واقعا مفید برای پاکسازی سیستم شما است. این ظروف متوقف شده، حجم ها و شبکه های استفاده نشده و تصاویر آویزان را حذف می کند.

$ docker system prune
WARNING! This will remove:
– all stopped containers
– all volumes not used by at least one container
– all networks not used by at least one container
– all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
7872fd96ea4695795c41150a06067d605f69702dbcb9ce49492c9029f0e1b44b
60abd5ee65b1e2732ddc02b971a86e22de1c1c446dab165462a08b037ef7835c
31617fdd8e5f584c51ce182757e24a1c9620257027665c20be75aa3ab6591740

Total reclaimed space: 12B

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خلاصه

در این آزمایشگاه، اولین کانتینرهای Ubuntu، Nginx و MongoDB خود را ایجاد کردید.

خوراکی های کلیدی

کانتینرها از فضاهای نام لینوکس و گروه های کنترلی تشکیل شده اند که از سایر کانتینرها و میزبان جدا می شوند.
به دلیل ویژگی های جداسازی کانتینرها، می توانید تعداد زیادی کانتینر را روی یک میزبان واحد زمان بندی کنید بدون اینکه نگران وابستگی های متضاد باشید. این کار اجرای چندین کانتینر روی یک هاست را آسان‌تر می‌کند: استفاده کامل از منابع تخصیص یافته به آن میزبان و در نهایت صرفه‌جویی در هزینه‌های سرور.
هنگام توسعه تصاویر خود از استفاده از محتوای تایید نشده از Docker Store خودداری کنید زیرا این تصاویر ممکن است حاوی آسیب‌پذیری‌های امنیتی یا احتمالاً حتی نرم‌افزارهای مخرب باشند.
کانتینرها شامل همه چیزهایی هستند که برای اجرای فرآیندهای درون خود نیاز دارند، بنابراین نیازی به نصب وابستگی های اضافی به طور مستقیم روی هاست شما نیست.

🚀 اکنون تمرین کنید: اولین کانتینر خود را اجرا کنید

می خواهید بیشتر بدانید؟

مقدمه

این مقاله مهارت های فنی زیر را پوشش می دهد:

نمودار مهارت ها

در این آزمایشگاه، اولین کانتینر Docker خود را اجرا خواهید کرد.

کانتینرها فقط یک فرآیند (یا گروهی از فرآیندها) هستند که به صورت مجزا اجرا می شوند. جداسازی از طریق فضاهای نام لینوکس، گروه های کنترل (cgroups)، seccomp و SELinux به دست می آید. توجه داشته باشید که فضاهای نام لینوکس و گروه های کنترل در هسته لینوکس ساخته شده اند! به غیر از خود هسته لینوکس، چیز خاصی در مورد کانتینرها وجود ندارد.

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

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

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

ما از چند دستور Docker در این آزمایشگاه استفاده خواهیم کرد. برای مستندات کامل در مورد دستورات موجود، اسناد رسمی را بررسی کنید.

شروع کنید

یک ترمینال در LabEx VM باز کنید و آن را اجرا کنید docker -h، که صفحه راهنمای Docker CLI را به شما نشان می دهد.

$ docker -h
Flag shorthand -h has been deprecated, please use --help

Usage: docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

...

Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خط فرمان Docker می تواند برای مدیریت چندین ویژگی Docker Engine استفاده شود. در این آزمایشگاه، ما به طور عمده بر روی container فرمان

نصب کنید podman در LabEx VM شما.

sudo apt-get install podman
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر podman نصب شده است، می توانید دستور جایگزین را برای مقایسه اجرا کنید.

اگر ندارید podman نصب شده، می توانید اجرا کنید sudo apt-get update && sudo apt-get upgrade دستور ارتقای نرم افزار

sudo podman -h
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

علاوه بر این می توانید نسخه نصب Docker خود را نیز بررسی کنید docker version

docker version

Client:
Version: 20.10.21
...

Server:
Engine:
Version: 20.10.21
...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که Docker هر دو a را نصب می کند Client و الف Server: Docker Engine. به عنوان مثال، اگر فرمان مشابهی را برای podman اجرا کنید، فقط یک نسخه CLI را مشاهده خواهید کرد، زیرا پادمن بدون دیمون اجرا می شود و برای ایجاد کانتینرهای در حال اجرا به یک کانتینر سازگار با OCI (runc، crun، و غیره) متکی است تا با سیستم عامل ارتباط برقرار کند تا کانتینرهای در حال اجرا را ایجاد کند. .

sudo podman version --events-backend=none
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.17.3
Built: Thu Jan 1 08:00:00 1970
OS/Arch: linux/amd64
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین کانتینر خود را اجرا کنید

ما قصد داریم از Docker CLI برای اجرای اولین کانتینر خود استفاده کنیم.

یک ترمینال در LabEx VM باز کنید.

دستور را اجرا کنید.

docker container run -t ubuntu top
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده کنید docker container run دستور اجرای یک کانتینر با ubuntu تصویر با استفاده از top فرمان این -t پرچم ها یک شبه TTY را اختصاص می دهند که برای آن نیاز داریم top به درستی کار کند

$ docker container run -it ubuntu top
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
aafe6b5e13de: Pull complete
0a2b43a72660: Pull complete
18bdd1e546d2: Pull complete
8198342c3e05: Pull complete
f56970a44fd4: Pull complete
Digest: sha256:f3a61450ae43896c4332bda5e78b453f4a93179045f20c8181043b26b5e79028
Status: Downloaded newer image for ubuntu:latest
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این docker run دستور ابتدا به a منجر می شود docker pull برای دانلود تصویر اوبونتو در هاست خود. پس از دانلود، ظرف را راه اندازی می کند. خروجی کانتینر در حال اجرا باید به شکل زیر باشد:

top - 20:32:46 up 3 days, 17:40,  0 users,  load average: 0.00, 0.01, 0.00
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2046768 total,   173308 free,   117248 used,  1756212 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.  1548356 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
      1 root      20   0   36636   3072   2640 R   0.3  0.2   0:00.04 top
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

top یک ابزار لینوکس است که فرآیندها را در یک سیستم چاپ می کند و آنها را بر اساس مصرف منابع سفارش می دهد. توجه داشته باشید که تنها یک فرآیند در این خروجی وجود دارد: آن است top خود فرآیند به دلیل جداسازی فضای نام PID، فرآیندهای دیگری از میزبان خود را در این لیست نمی‌بینیم.

کانتینرها از فضای نام لینوکس برای جداسازی منابع سیستم از سایر کانتینرها یا میزبان استفاده می کنند. فضای نام PID جداسازی شناسه های فرآیند را فراهم می کند. اگر بدوید top در داخل کانتینر، متوجه خواهید شد که فرآیندهای داخل فضای نام PID کانتینر را نشان می دهد، که بسیار متفاوت از آنچه در صورت اجرا می توانید مشاهده کنید. top روی میزبان

حتی اگر ما از آن استفاده می کنیم ubuntu image، توجه به این نکته مهم است که ظرف ما هسته خود را ندارد. از هسته هاست و the استفاده می کند ubuntu تصویر فقط برای ارائه سیستم فایل و ابزارهای موجود در یک سیستم اوبونتو استفاده می شود.

ظرف را با docker container exec

این docker container exec دستور راهی برای “وارد کردن” فضاهای نام کانتینر در حال اجرا با یک فرآیند جدید است.

یک ترمینال جدید باز کنید انتخاب کنید Terminal > New Terminal.

در ترمینال جدید، از docker container ls دستور برای دریافت شناسه کانتینر در حال اجرا که ایجاد کرده اید.

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3ad2a23fab3 ubuntu "top" 29 minutes ago Up 29 minutes goofy_nobel
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس از آن شناسه برای اجرا استفاده کنید bash داخل آن ظرف با استفاده از docker container exec فرمان از آنجایی که ما از bash استفاده می کنیم و می خواهیم با این کانتینر از ترمینال خود تعامل داشته باشیم، استفاده کنید -it پرچم‌ها را برای اجرا با استفاده از حالت تعاملی در حین تخصیص یک ترمینال کاذب.

$ docker container exec -it ID > bash
root@b3ad2a23fab3:/#
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و وویلا! ما فقط استفاده کردیم docker container exec دستور “ورود” فضای نام کانتینر ما با فرآیند bash ما. با استفاده از docker container exec با bash یک الگوی متداول برای بازرسی کانتینر داکر است.

به تغییر پیشوند ترمینال خود توجه کنید. به عنوان مثال root@b3ad2a23fab3:/. این نشانه این است که ما در حال اجرا در “داخل” ظرف خود هستیم.

توجه داشته باشید: این مانند وارد شدن به یک میزبان جداگانه یا یک VM نیست. برای اتصال با فرآیند bash به سرور ssh نیاز نداریم. به یاد داشته باشید که کانتینرها از ویژگی های سطح هسته برای رسیدن به ایزوله استفاده می کنند و کانتینرها در بالای هسته اجرا می شوند. ظرف ما فقط گروهی از فرآیندهایی است که به صورت مجزا در همان میزبان اجرا می شوند و ما می توانیم از آنها استفاده کنیم docker container exec برای وارد شدن به آن انزوا با bash فرآیند بعد از دویدن docker container exec، گروهی از فرآیندهای در حال اجرا به صورت مجزا (یعنی ظرف ما) شامل top و bash.

از همان ترمینال اجرا کنید ps -ef برای بازرسی فرآیندهای در حال اجرا

root@b3ad2a23fab3:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:34 ? 00:00:00 top
root 17 0 0 21:06 ? 00:00:00 bash
root 27 17 0 21:14 ? 00:00:00 ps -ef
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما باید فقط ببینید top فرآیند، bash فرآیند و ما ps فرآیند

برای مقایسه، از ظرف خارج شده و اجرا کنید ps -ef یا top روی میزبان این دستورات روی لینوکس یا مک کار می کنند. برای ویندوز، می توانید با استفاده از فرآیندهای در حال اجرا را بررسی کنید tasklist.

root@b3ad2a23fab3:/# exit
exit
$ ps -ef
# Lots of processes!
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شیرجه عمیق فنی
PID تنها یکی از فضاهای نام لینوکس است که کانتینرهایی را با ایزوله به منابع سیستم ارائه می کند. سایر فضاهای نام لینوکس عبارتند از:

  • MNT – دایرکتوری‌ها را بدون تأثیرگذاری بر سایر فضاهای نام نصب و جدا کنید
  • NET – کانتینرها پشته شبکه مخصوص به خود را دارند
  • IPC – مکانیسم های ارتباطی بین فرآیندی ایزوله مانند صف های پیام.
  • کاربر – نمای ایزوله از کاربران در سیستم
  • UTC – نام میزبان و نام دامنه را در هر ظرف تنظیم کنید

این فضاهای نام با هم جداسازی کانتینرها را فراهم می کنند که به آنها اجازه می دهد به طور ایمن و بدون تضاد با سایر کانتینرهای در حال اجرا در همان سیستم اجرا شوند. در ادامه کاربردهای مختلف ظروف را نشان خواهیم داد. و مزیت ایزوله شدن به دلیل اجرای چندین کانتینر روی یک میزبان.

توجه داشته باشید: فضای نام یکی از ویژگی های است لینوکس هسته اما داکر به شما اجازه می دهد تا کانتینرها را روی ویندوز و مک اجرا کنید… چگونه کار می کند؟ راز این است که در محصول داکر یا موتور داکر یک زیرسیستم لینوکس تعبیه شده است. Docker این زیرسیستم لینوکس را با منبع باز به پروژه جدیدی تبدیل کرد: LinuxKit. امکان اجرای کانتینرها بر روی پلتفرم های مختلف یکی از مزایای استفاده از ابزار Docker با کانتینرها است.

علاوه بر اجرای ظروف لینوکس در ویندوز با استفاده از زیرسیستم لینوکس، کانتینرهای بومی ویندوز اکنون به دلیل ایجاد کانتینرهای اولیه در سیستم عامل ویندوز امکان پذیر است. کانتینرهای ویندوز بومی را می توان در ویندوز 10 یا ویندوز سرور 2016 یا جدیدتر اجرا کرد.

توجه داشته باشید: اگر این تمرین را در یک ترمینال کانتینری اجرا کنید و آن را اجرا کنید ps -ef دستور در ترمینال، شما همچنان مجموعه محدودی از فرآیندها را پس از خروج از آن خواهید دید exec فرمان می توانید سعی کنید برنامه را اجرا کنید ps -ef در یک ترمینال در دستگاه محلی خود دستور دهید تا همه فرآیندها را ببینید.

ظرف در حال اجرا را تمیز کنید top پردازش با تایپ کردن: -c، همه کانتینرها را فهرست کنید و کانتینرها را با شناسه آنها حذف کنید.

docker ps -a

docker rm 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چندین کانتینر را اجرا کنید

داکر هاب را کاوش کنید

داکر هاب یک مرکز ثبت عمومی برای تصاویر داکر است که شامل تصاویر انجمن و رسمی است.

هنگام جستجوی تصاویر، فیلترهایی برای تصاویر “Docker Certified”، “Verified Publisher” و “Official Images” پیدا خواهید کرد. فیلتر “Docker Certified” را انتخاب کنید تا تصاویری را پیدا کنید که برای شرکت آماده هستند و با محصول Docker Enterprise Edition آزمایش شده اند. مهم است که هنگام توسعه تصاویر خود که قرار است در محیط تولید مستقر شوند، از محتوای تایید نشده از Docker Store استفاده نکنید. این تصاویر تأییدنشده ممکن است حاوی آسیب‌پذیری‌های امنیتی یا احتمالاً حتی نرم‌افزارهای مخرب باشند.

در مرحله 2 این آزمایشگاه، ما چند کانتینر را با استفاده از برخی تصاویر تأیید شده از داکر هاب شروع می کنیم: وب سرور nginx و پایگاه داده mongo.

سرور Nginx را اجرا کنید

بیایید یک کانتینر را با استفاده از تصویر رسمی Nginx از Docker Hub اجرا کنیم.

docker container run --detach --publish 8080:80 --name nginx nginx
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما در اینجا از چند پرچم جدید استفاده می کنیم. این --detach flag این ظرف را در پس‌زمینه اجرا می‌کند. این publish flag پورت 80 را در کانتینر (درگاه پیش‌فرض برای nginx) از طریق پورت 8080 در هاست ما منتشر می‌کند. به یاد داشته باشید که فضای نام NET به فرآیندهای کانتینر پشته شبکه خود را می دهد. این --publish flag یک ویژگی است که به ما امکان می دهد شبکه را از طریق کانتینر بر روی میزبان قرار دهیم.

چگونه می دانید که پورت 80 پورت پیش فرض nginx است؟ زیرا در اسناد موجود در Docker Hub ذکر شده است. به طور کلی، مستندات برای تصاویر تأیید شده بسیار خوب است، و هنگام اجرای کانتینرها با استفاده از آن تصاویر، باید به آنها مراجعه کنید.

ما همچنین در حال مشخص کردن آن هستیم --name flag که ظرف را نامگذاری می کند. هر کانتینری یک نام دارد، اگر نامی را مشخص نکنید، داکر به طور تصادفی یکی را برای شما اختصاص می دهد. تعیین نام خود، اجرای دستورات بعدی را در کانتینر آسان‌تر می‌کند، زیرا می‌توانید به جای شناسه کانتینر به نام اشاره کنید. به عنوان مثال: docker container inspect nginx به جای docker container inspect 5e1.

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

Nginx یک وب سرور سبک وزن است. شما می توانید به سرور nginx دسترسی داشته باشید وب 8080 تب LabEx VM. آن را تغییر دهید و صفحه را رفرش کنید تا خروجی nginx را ببینید.

مرحله 2 nginx

اجرا کنید mongo سرور DB

اکنون یک سرور mongoDB را اجرا کنید. ما از تصویر رسمی mongoDB از داکر هاب استفاده خواهیم کرد. به جای استفاده از latest تگ (که پیش‌فرض است اگر تگ مشخص نشده باشد)، از یک نسخه خاص از تصویر mongo استفاده خواهیم کرد: 4.4.

docker container run --detach --publish 8081:27017 --name mongo mongo:4.4
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باز هم، از آنجایی که این اولین بار است که یک کانتینر مونگو را اجرا می کنیم، تصویر مونگو را از فروشگاه Docker پایین می کشیم. ما در حال استفاده از --publish پرچم گذاری کنید تا پورت 27017 مونگو را در میزبان خود نمایان کنیم. ما باید از پورتی غیر از 8080 برای نگاشت هاست استفاده کنیم، زیرا آن پورت از قبل روی هاست ما در معرض دید قرار گرفته است. مجدداً به اسناد رسمی Docker Hub مراجعه کنید تا جزئیات بیشتری در مورد استفاده از تصویر mongo بدست آورید.

خروجی mongoDB را با استفاده از آن مشاهده کنید 0.0.0.0:8081 در مرورگر وب باید پیامی را مشاهده کنید که اخطاری را از MongoDB برمی‌گرداند.

تصویر

ظروف در حال اجرا خود را با docker container ls

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6777df89fea nginx "nginx -g 'daemon ..." Less than a second ago Up 2 seconds 0.0.0.0:8080- nginx > 80/tcp
ead80a0db505 mongo "docker-entrypoint..." 17 seconds ago Up 19 seconds 0.0.0.0:8081- mongo > 27017/tcp
af549dccd5cf ubuntu "top" 5 minutes ago Up 5 minutes priceless_kepler
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باید ببینید که یک کانتینر وب سرور Nginx و یک کانتینر MongoDB در حال اجرا روی هاست خود دارید. توجه داشته باشید که ما این کانتینرها را برای صحبت با یکدیگر پیکربندی نکرده ایم.

می‌توانید نام‌های “nginx” و “mongo” را که به کانتینرهای خود داده‌ایم، و نام تصادفی (در مورد من “priceless_kepler”) که برای کانتینر اوبونتو ایجاد شده است را ببینید. همچنین می توانید ببینید که نگاشت پورت هایی که ما با آن مشخص کردیم --publish پرچم برای اطلاعات بیشتر در مورد این کانتینرهای در حال اجرا می توانید از بازرسی کانتینر داکر [container id command.

One thing you might notice is that the mongo container is running the docker-entrypoint command. This is the name of the executable that is run when the container is started. The mongo image requires some prior configuration before kicking off the DB process. You can see exactly what the script does by looking at it on github. Typically, you can find the link to the github source from the image description page on the Docker Store website.

Containers are self-contained and isolated, which means we can avoid potential conflicts between containers with different system or runtime dependencies. For example: deploying an app that uses Java 7 and another app that uses Java 8 on the same host. Or running multiple nginx containers that all have port 80 as their default listening ports (if exposing on the host using the --publish flag, the ports selected for the host will need to be unique). Isolation benefits are possible because of Linux Namespaces.

Note: You didn’t have to install anything on your host (other than Docker) to run these processes! Each container includes the dependencies that it needs within the container, so you don’t need to install anything on your host directly.

Running multiple containers on the same host gives us the ability to fully utilize the resources (cpu, memory, etc) available on single host. This can result in huge cost savings for an enterprise.

While running images directly from the Docker Hub can be useful at times, it is more useful to create custom images, and refer to official images as the starting point for these images. We will dive into building our own custom images in Lab 2.

Clean up

Completing this lab results in a bunch of running containers on your host. Let’s clean these up.

First get a list of the containers running using docker container ls.

$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6777df89fea nginx "nginx -g 'daemon ..." 3 minutes ago Up 3 minutes 0.0.0.0:8080- nginx > 80/tcp
ead80a0db505 mongo "docker-entrypoint..." 3 minutes ago Up 3 minutes 0.0.0.0:8081- mongo > 27017/tcp
af549dccd5cf ubuntu "top" 8 minutes ago Up 8 minutes priceless_kepler
Enter fullscreen mode

Exit fullscreen mode

Next, run docker container stop [container id] برای هر ظرف در لیست همچنین می توانید از نام کانتینرهایی که قبلاً مشخص کرده اید استفاده کنید.

$ docker container stop d67 ead af5
d67
ead
af5
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید: برای منحصر به فرد بودن فقط باید به تعداد کافی از ارقام شناسه ارجاع دهید. سه رقم تقریباً همیشه کافی است.

ظروف متوقف شده را بردارید

docker system prune یک دستور واقعا مفید برای پاکسازی سیستم شما است. این ظروف متوقف شده، حجم ها و شبکه های استفاده نشده و تصاویر آویزان را حذف می کند.

$ docker system prune
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
7872fd96ea4695795c41150a06067d605f69702dbcb9ce49492c9029f0e1b44b
60abd5ee65b1e2732ddc02b971a86e22de1c1c446dab165462a08b037ef7835c
31617fdd8e5f584c51ce182757e24a1c9620257027665c20be75aa3ab6591740

Total reclaimed space: 12B
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خلاصه

در این آزمایشگاه، اولین کانتینرهای Ubuntu، Nginx و MongoDB خود را ایجاد کردید.

خوراکی های کلیدی

  • کانتینرها از فضاهای نام لینوکس و گروه های کنترلی تشکیل شده اند که از سایر کانتینرها و میزبان جدا می شوند.
  • به دلیل ویژگی های جداسازی کانتینرها، می توانید تعداد زیادی کانتینر را روی یک میزبان واحد زمان بندی کنید بدون اینکه نگران وابستگی های متضاد باشید. این کار اجرای چندین کانتینر روی یک هاست را آسان‌تر می‌کند: استفاده کامل از منابع تخصیص یافته به آن میزبان و در نهایت صرفه‌جویی در هزینه‌های سرور.
  • هنگام توسعه تصاویر خود از استفاده از محتوای تایید نشده از Docker Store خودداری کنید زیرا این تصاویر ممکن است حاوی آسیب‌پذیری‌های امنیتی یا احتمالاً حتی نرم‌افزارهای مخرب باشند.
  • کانتینرها شامل همه چیزهایی هستند که برای اجرای فرآیندهای درون خود نیاز دارند، بنابراین نیازی به نصب وابستگی های اضافی به طور مستقیم روی هاست شما نیست.

نقشه ذهنی


🚀 اکنون تمرین کنید: اولین کانتینر خود را اجرا کنید


می خواهید بیشتر بدانید؟

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا