Docker do Zero – انجمن DEV

Summarize this content to 400 words in Persian Lang
کسی که تا به حال این عبارت را نشنیده است: “در دستگاه من کار می کند …”. این یک مشکل رایج برای توسعه دهندگان است (یا بود)، زیرا هر دستگاه پیکربندی های مختلفی دارد و هنگام اجرای برنامه، متغیرهای زیادی می توانند باعث از کار افتادن آن شوند. به این ترتیب Docker به عنوان راهی برای استانداردسازی محیط توسعه ظاهر می شود تا تنها با چند دستور بتوانیم کل برنامه را با وابستگی ها و اتصالات آن آپلود کنیم.
ممکن است در ابتدا پیچیده به نظر برسد، اما با درک برخی از مفاهیم و دستورات، میتوانیم به سرعت بهترین چیزی را که Docker ارائه میکند استخراج کنیم و زندگی خود را بسیار آسانتر کنیم.
Docker به طور مجازی یک ماشین لینوکس را اجرا می کند، بنابراین توصیه می شود کمی در مورد لینوکس و دستورات ترمینال بدانید.
اما قبل از یادگیری نحوه ایجاد یا اجرای دستورات، اجازه دهید برخی از مفاهیم اولیه را درک کنیم:
ساختن خانه
برای درک نحوه کار داکر بر روی دستگاه ما و استفاده از آن، من دوست دارم از قیاس زمانی که خانه می سازیم استفاده کنم. در این صورت فکر کنیم یک قطعه زمین داریم که کانکس خانه هاست و قرار است چند خانه در آنجا بسازیم. خانه ها دارای استانداردی برای ساختار اصلی خواهند بود و سپس می توانیم هر کدام را با مبلمان و غیره سفارشی کنیم.
ابتدا باید به اندازه خانه، دیوارها، درها و پنجره ها فکر کنیم. جایی که قطعات هیدرولیک و الکتریکی قرار خواهند گرفت.
پس از تعریف، آن را به معمار یا مهندس می دهیم تا نقشه های خانه را بسازد.
با این کار می توانیم بر اساس نقشه خانه یک یا چند خانه بسازیم.
و سپس می توانیم به هر خانه ای برویم و هر آنچه را که می خواهیم در آن قرار دهیم. حتی یک در یا پنجره را اصلاح کنید. در نهایت، روی هر خانه به صورت جداگانه کار کنید. همچنین می توانیم بر اساس نقشه اولیه خانه ای را تخریب کنیم و در همان مکان خانه دیگری بسازیم.
موضوعی فراتر از آن قبوض (برق، آب) است. بیایید فرض کنیم که ما همیشه میخواهیم مجموع مقداری که برای کاندومینیوم خرج میکنیم داشته باشیم. اگر خانه ای را خراب کنیم، نمی توانیم آن ارزش را از دست بدهیم. بنابراین ما باید جایی برای نگهداری اسکناس ها در خارج از هر خانه داشته باشیم، علاوه بر این که یک کپی در خود خانه داشته باشیم.
اکنون که ما ایده ای از مراحل فرضی برای ساختن کاندومینیوم خانه های خود داریم، بیایید آنها را به آپلود برنامه با Docker مرتبط کنیم.
ابتدا مراحل ساخت a را تعریف می کنیم تصویر، یعنی نقشه خانه. این مراحل در یک ذخیره می شوند Dockerfile، فایلی که در آن چیزی که باید روی دستگاه(هایی) که قرار است آپلود کنیم، آپلود کنیم تعریف شده است.
از این فایل، ما می سازیم تصویر، پلان خانه ما یکی تصویر اساسا یک قالب برای ایجاد است ظروف.
قبلاً ظروف آنها خانه های ما هستند. آنها نمونه هایی از یک ماشین مجازی هستند که با تنظیمات مشخص شده در دستگاه ما اجرا می شود تصویر. میتونیم یکی بریم بالا ظرف و از طریق ترمینال به آن دسترسی داشته باشید. در آنجا، میتوانیم آن را هر طور که میخواهیم تغییر دهیم، برنامهها یا کتابخانههای جدید را نصب کنیم، برنامهها را اجرا کنیم، پایگاه داده ایجاد کنیم و غیره.
در نهایت می توانیم a را حذف کنیم ظرف. با این کار هر فایل یا نصبی که در داخل آن انجام داده ایم پاک می شود. همانطور که از یک جدید صعود می کنیم ظرف، ما مشخصات اولیه تعریف شده در ما خواهیم داشت تصویر.
چه می شود اگر بخواهیم داده های خود را حفظ کنیم ظرف برای بعدی؟ ما می توانیم استفاده کنیم جلدها، برای آن مانند قبوض خانه، ما باید اطلاعات را در خارج از کانتینر ذخیره کنیم تا باقی بماند. به این ترتیب، ما یک “پل” بین دستگاه خود و دستگاه ایجاد می کنیم ظرف، کپی کردن همه چیز از یکی به دیگری. زمانی که ما را حذف می کنیم ظروف، داده ها را روی دستگاه خود نگه می داریم و می توانیم دوباره از آن استفاده کنیم.
جریان کار
هنگامی که این مفاهیم را درک کردید، درک یک گردش کار با استفاده از Docker آسان تر می شود. دستورات زیر در انتهای این پست بهتر توضیح داده شده است.
اولاً برای کار کردن به یک تصویر نیاز داریم. ما می توانیم یک Dockerfile برای ساخت (docker build) یکی یا دانلود یکی از داکر هاب (docker pull).
بعد از اینکه تصویر را داشتیم (docker imagesما می توانیم آن را اجرا کنیم (docker run) و یک ظرف، یک ماشین مجازی با تنظیمات تعریف شده در تصویر تولید کنید.
کانتینر می تواند یک بار کار کند و متوقف شود، یا در دستگاه ما به کار ادامه دهد (docker ps). ما می توانیم به ظرف (docker exec) و دستورات را در داخل آن اجرا کنید (به یاد داشته باشید که وقتی کانتینر را بکشیم، هرگونه تغییر از بین می رود).
پس از استفاده، می توانیم ظرف را بکشیم (docker stop) (docker rm). و در صورت تمایل می توانیم تصویر را نیز حذف کنیم (docker rmi، اگر دیگر قرار نیست از آن برای ایجاد کانتینرهای جدید استفاده کنیم.
ایجاد یک Dockerfile
هنگامی که یک فایل ایجاد می کنیم، مانند مثال بالا، می توانیم آن را بسازیم Dockerfile در یک تصویر، در حال چرخش docker build -t : . این تصویر را با دستورات و نصب های مشخص شده در Dockerfile که قبلاً اجرا شده است ایجاد می کند.
از آنجا می توانیم مراحل پیکربندی تصویر را با تنظیمات اولیه تعریف کنیم. ما همیشه از یک تصویر به عنوان پایه با دستور استفاده می کنیم FROM. O RUNبرای مثال دستورات را اجرا می کند.
دستورالعمل های اصلی Dockerfile
FROM: تصویری که قرار است از آن به عنوان پایه استفاده کنیم.
WORKDIR: پوشه ای را تعریف می کند که در آن دستورات را در ظرف اجرا می کنیم.
RUN: دستورات مشخص شده را اجرا می کند.
COPY: فایل ها را از دستگاه تصویر حرفه ای ما کپی می کند.
ENTRYPOINT: زمانی که ظرف را مقداردهی اولیه می کنیم، دستوری اجرا شود.
برخی دیگر در اینجا قابل مشاهده است.
از دستورات Docker اصلی استفاده می کنم
در زیر، من برخی از ویژگی های اصلی را که به صورت روزانه از آنها استفاده می کنم، جدا کرده ام.
استفاده از تصاویر
docker pull :: تصویر را به دستگاه محلی ما بکشید. اگر نسخه تصویب نشد، آخرین.
docker build : ما Dockerfile را در یک تصویر می سازیم
-t :: یک نام برای تصویر ایجاد می کنیم. جالب است که از نام کاربری Docker Hub به دنبال / و نام تصویر استفاده کنید: user/project-abc:v1
docker images: تصاویر دانلود شده در دستگاه را فهرست می کند.
docker rmi : یک تصویر را حذف کنید.
فهرست بندی و حذف ظروف.
docker ps: کانتینرهایی را که در حال اجرا هستند فهرست می کند.
-a: کانتینرهای فعال یا آنهایی که قبلا اجرا شده اند را نشان می دهد.
-q: شناسه های کانتینر را فهرست می کند.
docker stop : برای ظرفی که در حال اجراست.
docker rm : ظرف متوقف شده را برمی دارد.
-f: حذف اجباری، حتی اگر ظرف در حال کار باشد.
برای حذف تمام ظروف فعال و غیر فعال:
docker rm -f $(docker ps -aq)
جابجایی ظروف
docker run : با دستور داده شده تصویر را در ترمینال خود اجرا کنید.
-i: ماژول تعاملی، روند را در حال اجرا نگه می دارد.
-t: به شما امکان می دهد چیزهایی را در ترمینال تایپ کنید.
-p: به درگاهی که باید نقشه برداری شود اشاره می کند.
-d: ترمینال را از فرآیند جدا می کند.
-v: حجم برای ماندگاری داده ها. مسیر محلی را با ':' رد می کنیم که مسیر را در ظرف جدا می کند. تغییرات در پوشه کانتینر در دستگاه محلی ادامه خواهد داشت.
–rm: ظرف را پس از اتمام کار خارج می کند.
–name: نامی برای ظرف تعریف می کند.
مثال: docker run -it ubuntu bash ما یک تصویر اوبونتو را اجرا می کنیم و bash را اجرا می کنیم و به ما امکان می دهد کد را در ترمینال داخل ظرف اجرا کنیم.
مثال: docker run -d -p 8080:80 nginx ما nginx را اجرا می کنیم و پورت 8080 را روی دستگاه خود به پورت 80 روی کانتینر نگاشت می کنیم.
docker exec : دستوری را در ظرف فعال ما اجرا می کند. (ما می توانیم از همان پرچم ها استفاده کنیم docker run، مانند، برای مثال، -it)
کار با حجم ها
docker volume ls: لیست حجم.
docker volume create : یک حجم ایجاد می کند.
docker volume inspect : داده های حجم را نشان می دهد.
docker volume prune: حجم ها را حذف می کند و فضا را آزاد می کند.
با این کار می توانیم با عبور از پرچم یک حجم ایجاد کنیم –mount با نام حجم ایجاد شده مثال:
docker run -d -p 8080:80 –mount type=volume,source=,target=/app nginx
یا با پرچم -v:
docker run -d -p 8080:80 -v :/app nginx
ملاحظات
من سعی کردم مفاهیم و دستورات اصلی را که در Docker استفاده می کنم خلاصه کنم. ارزش کاوش عمیق تر و تمرین آپلود تصاویر برای استفاده شخصی را دارد. نکته دیگر مطالعه است Docker Compose، که چندین را هماهنگ می کند ظروف داکر برای کار با هم.اگر سوال یا نظری دارید در زیر بنویسید تا پاسخگوی آنها باشم.
کسی که تا به حال این عبارت را نشنیده است: “در دستگاه من کار می کند …”. این یک مشکل رایج برای توسعه دهندگان است (یا بود)، زیرا هر دستگاه پیکربندی های مختلفی دارد و هنگام اجرای برنامه، متغیرهای زیادی می توانند باعث از کار افتادن آن شوند. به این ترتیب Docker به عنوان راهی برای استانداردسازی محیط توسعه ظاهر می شود تا تنها با چند دستور بتوانیم کل برنامه را با وابستگی ها و اتصالات آن آپلود کنیم.
ممکن است در ابتدا پیچیده به نظر برسد، اما با درک برخی از مفاهیم و دستورات، میتوانیم به سرعت بهترین چیزی را که Docker ارائه میکند استخراج کنیم و زندگی خود را بسیار آسانتر کنیم.
Docker به طور مجازی یک ماشین لینوکس را اجرا می کند، بنابراین توصیه می شود کمی در مورد لینوکس و دستورات ترمینال بدانید.
اما قبل از یادگیری نحوه ایجاد یا اجرای دستورات، اجازه دهید برخی از مفاهیم اولیه را درک کنیم:
ساختن خانه
برای درک نحوه کار داکر بر روی دستگاه ما و استفاده از آن، من دوست دارم از قیاس زمانی که خانه می سازیم استفاده کنم. در این صورت فکر کنیم یک قطعه زمین داریم که کانکس خانه هاست و قرار است چند خانه در آنجا بسازیم. خانه ها دارای استانداردی برای ساختار اصلی خواهند بود و سپس می توانیم هر کدام را با مبلمان و غیره سفارشی کنیم.
- ابتدا باید به اندازه خانه، دیوارها، درها و پنجره ها فکر کنیم. جایی که قطعات هیدرولیک و الکتریکی قرار خواهند گرفت.
- پس از تعریف، آن را به معمار یا مهندس می دهیم تا نقشه های خانه را بسازد.
- با این کار می توانیم بر اساس نقشه خانه یک یا چند خانه بسازیم.
- و سپس می توانیم به هر خانه ای برویم و هر آنچه را که می خواهیم در آن قرار دهیم. حتی یک در یا پنجره را اصلاح کنید. در نهایت، روی هر خانه به صورت جداگانه کار کنید. همچنین می توانیم بر اساس نقشه اولیه خانه ای را تخریب کنیم و در همان مکان خانه دیگری بسازیم.
- موضوعی فراتر از آن قبوض (برق، آب) است. بیایید فرض کنیم که ما همیشه میخواهیم مجموع مقداری که برای کاندومینیوم خرج میکنیم داشته باشیم. اگر خانه ای را خراب کنیم، نمی توانیم آن ارزش را از دست بدهیم. بنابراین ما باید جایی برای نگهداری اسکناس ها در خارج از هر خانه داشته باشیم، علاوه بر این که یک کپی در خود خانه داشته باشیم.
اکنون که ما ایده ای از مراحل فرضی برای ساختن کاندومینیوم خانه های خود داریم، بیایید آنها را به آپلود برنامه با Docker مرتبط کنیم.
- ابتدا مراحل ساخت a را تعریف می کنیم تصویر، یعنی نقشه خانه. این مراحل در یک ذخیره می شوند Dockerfile، فایلی که در آن چیزی که باید روی دستگاه(هایی) که قرار است آپلود کنیم، آپلود کنیم تعریف شده است.
- از این فایل، ما می سازیم تصویر، پلان خانه ما یکی تصویر اساسا یک قالب برای ایجاد است ظروف.
- قبلاً ظروف آنها خانه های ما هستند. آنها نمونه هایی از یک ماشین مجازی هستند که با تنظیمات مشخص شده در دستگاه ما اجرا می شود تصویر. میتونیم یکی بریم بالا ظرف و از طریق ترمینال به آن دسترسی داشته باشید. در آنجا، میتوانیم آن را هر طور که میخواهیم تغییر دهیم، برنامهها یا کتابخانههای جدید را نصب کنیم، برنامهها را اجرا کنیم، پایگاه داده ایجاد کنیم و غیره.
- در نهایت می توانیم a را حذف کنیم ظرف. با این کار هر فایل یا نصبی که در داخل آن انجام داده ایم پاک می شود. همانطور که از یک جدید صعود می کنیم ظرف، ما مشخصات اولیه تعریف شده در ما خواهیم داشت تصویر.
- چه می شود اگر بخواهیم داده های خود را حفظ کنیم ظرف برای بعدی؟ ما می توانیم استفاده کنیم جلدها، برای آن مانند قبوض خانه، ما باید اطلاعات را در خارج از کانتینر ذخیره کنیم تا باقی بماند. به این ترتیب، ما یک “پل” بین دستگاه خود و دستگاه ایجاد می کنیم ظرف، کپی کردن همه چیز از یکی به دیگری. زمانی که ما را حذف می کنیم ظروف، داده ها را روی دستگاه خود نگه می داریم و می توانیم دوباره از آن استفاده کنیم.
جریان کار
هنگامی که این مفاهیم را درک کردید، درک یک گردش کار با استفاده از Docker آسان تر می شود. دستورات زیر در انتهای این پست بهتر توضیح داده شده است.
-
اولاً برای کار کردن به یک تصویر نیاز داریم. ما می توانیم یک Dockerfile برای ساخت (
docker build
) یکی یا دانلود یکی از داکر هاب (docker pull
). -
بعد از اینکه تصویر را داشتیم (
docker images
ما می توانیم آن را اجرا کنیم (docker run
) و یک ظرف، یک ماشین مجازی با تنظیمات تعریف شده در تصویر تولید کنید. -
کانتینر می تواند یک بار کار کند و متوقف شود، یا در دستگاه ما به کار ادامه دهد (
docker ps
). ما می توانیم به ظرف (docker exec
) و دستورات را در داخل آن اجرا کنید (به یاد داشته باشید که وقتی کانتینر را بکشیم، هرگونه تغییر از بین می رود). -
پس از استفاده، می توانیم ظرف را بکشیم (
docker stop
) (docker rm
). و در صورت تمایل می توانیم تصویر را نیز حذف کنیم (docker rmi
، اگر دیگر قرار نیست از آن برای ایجاد کانتینرهای جدید استفاده کنیم.
ایجاد یک Dockerfile
هنگامی که یک فایل ایجاد می کنیم، مانند مثال بالا، می توانیم آن را بسازیم Dockerfile در یک تصویر، در حال چرخش docker build -t
. این تصویر را با دستورات و نصب های مشخص شده در Dockerfile که قبلاً اجرا شده است ایجاد می کند.
از آنجا می توانیم مراحل پیکربندی تصویر را با تنظیمات اولیه تعریف کنیم. ما همیشه از یک تصویر به عنوان پایه با دستور استفاده می کنیم FROM
. O RUN
برای مثال دستورات را اجرا می کند.
دستورالعمل های اصلی Dockerfile
-
FROM
: تصویری که قرار است از آن به عنوان پایه استفاده کنیم. -
WORKDIR
: پوشه ای را تعریف می کند که در آن دستورات را در ظرف اجرا می کنیم. -
RUN
: دستورات مشخص شده را اجرا می کند. -
COPY
: فایل ها را از دستگاه تصویر حرفه ای ما کپی می کند. -
ENTRYPOINT
: زمانی که ظرف را مقداردهی اولیه می کنیم، دستوری اجرا شود.
برخی دیگر در اینجا قابل مشاهده است.
از دستورات Docker اصلی استفاده می کنم
در زیر، من برخی از ویژگی های اصلی را که به صورت روزانه از آنها استفاده می کنم، جدا کرده ام.
استفاده از تصاویر
-
docker pull
: تصویر را به دستگاه محلی ما بکشید. اگر نسخه تصویب نشد، آخرین.: -
docker build
: ما Dockerfile را در یک تصویر می سازیم-
-t
: یک نام برای تصویر ایجاد می کنیم. جالب است که از نام کاربری Docker Hub به دنبال / و نام تصویر استفاده کنید:: user/project-abc:v1
-
-
docker images
: تصاویر دانلود شده در دستگاه را فهرست می کند. -
docker rmi
: یک تصویر را حذف کنید.
فهرست بندی و حذف ظروف.
-
docker ps
: کانتینرهایی را که در حال اجرا هستند فهرست می کند.-
-a
: کانتینرهای فعال یا آنهایی که قبلا اجرا شده اند را نشان می دهد. -
-q
: شناسه های کانتینر را فهرست می کند.
-
-
docker stop
: برای ظرفی که در حال اجراست. -
docker rm
: ظرف متوقف شده را برمی دارد.-
-f
: حذف اجباری، حتی اگر ظرف در حال کار باشد.
-
برای حذف تمام ظروف فعال و غیر فعال:
docker rm -f $(docker ps -aq)
جابجایی ظروف
-
docker run
: با دستور داده شده تصویر را در ترمینال خود اجرا کنید.-
-i
: ماژول تعاملی، روند را در حال اجرا نگه می دارد. -
-t
: به شما امکان می دهد چیزهایی را در ترمینال تایپ کنید. -
-p
: به درگاهی که باید نقشه برداری شود اشاره می کند. -
-d
: ترمینال را از فرآیند جدا می کند. -
-v
: حجم برای ماندگاری داده ها. مسیر محلی را با ':' رد می کنیم که مسیر را در ظرف جدا می کند. تغییرات در پوشه کانتینر در دستگاه محلی ادامه خواهد داشت. -
--rm
: ظرف را پس از اتمام کار خارج می کند. -
--name
: نامی برای ظرف تعریف می کند. - مثال:
docker run -it ubuntu bash
ما یک تصویر اوبونتو را اجرا می کنیم و bash را اجرا می کنیم و به ما امکان می دهد کد را در ترمینال داخل ظرف اجرا کنیم. - مثال:
docker run -d -p 8080:80 nginx
ما nginx را اجرا می کنیم و پورت 8080 را روی دستگاه خود به پورت 80 روی کانتینر نگاشت می کنیم.
-
-
docker exec
: دستوری را در ظرف فعال ما اجرا می کند. (ما می توانیم از همان پرچم ها استفاده کنیمdocker run
، مانند، برای مثال،-it
)
کار با حجم ها
-
docker volume ls
: لیست حجم. -
docker volume create
: یک حجم ایجاد می کند. -
docker volume inspect
: داده های حجم را نشان می دهد. -
docker volume prune
: حجم ها را حذف می کند و فضا را آزاد می کند.
با این کار می توانیم با عبور از پرچم یک حجم ایجاد کنیم --mount
با نام حجم ایجاد شده مثال:
docker run -d -p 8080:80 --mount type=volume,source=
,target=/app nginx
یا با پرچم -v
:
docker run -d -p 8080:80 -v
:/app nginx
ملاحظات
من سعی کردم مفاهیم و دستورات اصلی را که در Docker استفاده می کنم خلاصه کنم. ارزش کاوش عمیق تر و تمرین آپلود تصاویر برای استفاده شخصی را دارد. نکته دیگر مطالعه است Docker Compose، که چندین را هماهنگ می کند ظروف داکر برای کار با هم.
اگر سوال یا نظری دارید در زیر بنویسید تا پاسخگوی آنها باشم.