wikibackup/fa/Docker.md

15 KiB
Raw Blame History

title description published date tags editor dateCreated
داکر داکر یک ابزار برای ایزوله سازی (Containerization) برای توسعه تمیز تر و راحت برای توسعه دهندگان است true 2024-08-12T07:20:23.121Z داکر, container markdown 2024-07-23T16:21:30.996Z

توضیحات

docker ابزاری برای ایزوله سازی (Containerization) است که امکان اشتراک گذاری محیط توسعه را به صورت container در هر سیستم عاملی می دهد, این کار موجب تسریع زمان توسعه و اشتراک گذاری محیط بین اعضای تیم می شود, همچنین از تداخل وابستگی ها جلوگیری می کند، چرا که تمام وابستگی ها در container و به صورت ایزوله نگه داری میشود.

تاریخچه

قبل از ایجاد مفهموم container و ایزوله سازی محیط, مجازی سازی (Virtualization) یکی از اصلی ترین راهکار ها برای جدا کردن محیط توسعه از سیستم میزبان بود, کاربر با اختصاص دادن cpu ,memory و hard space تایین می کرد چه مقدار منابع از سیستم میزبان به سیستم مجازی تعلق دارد, اما این راهکار چندان مناسب نبود چرا که مقدار قابل توجهی از منابع به سیستم عامل مجازی تعلق میگرفت و سرعت پردازش نسبت به سیستم میزبان کند تر بود.

اما با ورود مفهوم container, موجب شد که ایزوله سازی و جدا کردن محیط های مختلف به صورت کم هزینه تر و با منابع کمتری صورت بپذیرد.

docker یکی از ابزار هایی است که میتوان برای ساخت و مدیریت container و ... از آن استفاده کرد, ممکن است نیاز داشته باشد که محیط توسعه/محصول خودتان را با دیگر اعضا به اشتراک بگذارید, docker این امکان را فراهم می کند تا با اشتراک گذاری فایل اسکلت container خود (image) این کار را تسریع کنید, همچنین افراد دیگر نگرانی جهت بر طرف کردن وابستگی ها ندارند چرا که تمام انها از قبل حل شده است.

نصب و راه اندازی

سایت مرجع docker اموزش کاملی را جهت نصب در سیستم های لینوکسی پوشش داده است اما توزیع های مبتبی بر ارچ به صورت رسمی پوشش داده نشده است و نصب آن به صورت unstable است.

1- ترمینال را باز کنید و با استفاده از مدیر بسته docker را نصب کنید

sudo pacman -S docker

اگر با خطای docker not found مواجه شدید مطمئن شوید مخازن خود را بروزرسانی کرده اید با دستور sudo pacman -Syu می توانید از بروز بودن مخازن خود اطمینان حاصل کنید

2- اگر از systemd به عنوان init استفاده می کنید با دستور زیر سرویس docker را فعال کنید:

sudo systemctl enable --now docker.service

3- در این مرحله باید نام کاربری خودتان را به گروه docker اضافه کنید:

برای اعمال تغییرات یکبار از سیستم logout کنید یا از دستور newgrp docker استفاده کنید.

sudo usermod -aG docker $USER

4- حالا می توانید با run کردن hello-world که یک image است از درست کار کردن docker اطمینان حاصل کنید.

docker run hello-world

دستور run همانطور که از اسم آن پیداست برای اجرا کردن image ها می باشد, image ها اسلکت هایی هستند که container ها از آنها ساخته میشوند, مجموعه از فایل ها و پیکربندی هایی از پیش تعریف شده که container بر اساس آنها ساخته میشود.

برای لیست کردن image های موجود در سیستم خودتان میتوانید از docker images استفاده کنید

برای لیست کردن container های فعال میتوانید از docker ps استفاده کنید.

Docker hub

Docker hub به عنوان مخزن پیشفرض docker برای دانلود و اپلود image ها مورد استفاده قرار می گیرد.

به عنوان مثال ممکن است بخواهید از nginx به عنوان webserver خود استفاده کنید, میتوانید image nginx را از docker hub دریافت کنید و از روی آن یک container ایجاد کنید.

1- با استفاده از docker login به حساب کاربری خود وارد شوید.

اگر حساب کاربری ندارید, یکی ایجاد کنید

2- میتوانید با استفاده از docker pull nginx اخرین ورژن nginx را از docker hub دریافت کنید.

متاسفانه docker hub در ایران تحریم است, در صورتی که با خطای 403 یا connection time out مواجه شدید, به احتمال زیاد مشکل از تحریم ها می باشد, میتوانید با خواندن رفع تحریم این مشکل را حل کنید.

وب سرور nginx در docker hub مستندات کاملی را درباره نحوه کار با image و container جمع اوری کرده است.

بعد از اتمام دانلود image میتوانید با استفاده از دستور run یک container برای nginx ایجاد کنید

docker run --name some-nginx -p 8080:80 -v /some/content:/usr/share/nginx/html:ro -d nginx

اگر از mirror های دیگری مانند focker.ir برای دانلود image استفاده کرده اید باید از نام focker.ir/nginx به جای nginx استفاده کنید

docker run --name some-nginx -p 8080:80 -v /some/content:/usr/share/nginx/html:ro -d focker.ir/nginx

1- پرچم name-- برای اختصاص یک نام به container استفاده میشود که در این مثال some-nginx می باشد 2- پرچم v- یا volume-- برای اشتراک گذاری یک (مسیر از سیستم میزبان) با (یک مسیر در کانتینر) استفاده میشود

در این مثال مسیر /some/content از سیستم میزبان (اصلی) با /usr/share/nginx/html در container مشترک شده است, به عنوان مثال اگر فایلی به نام name.txt را در سیستم میزبان (اصلی) در مسیر /some/content ایجاد کنید, بعد از ورود به container می توانید همان فایل را در ادرس /usr/share/nginx/html مشاهده کنید.

در اخرین بخش مقدار volume که با : جدا شده اند, ro به معنا تنها خواندی (readonly) می باشد, اگر مقدار آن را rw قرار دهید خواندنی و نوشتنی (read and write) خواهد بود.

4- پرچم p- یا port-- یک پورت از سیستم میزبان را به یک پورت از container متصل می کند

در این مثال پورت 8080 از سیستم میزبان (اصلی) به پورت 80 container متصل شده است.

3- پرچم d- به معنای اجرای پروسه در background می باشد.

رفع تحریم

برای رفع تحریم می توان از راهکار های زیر استفاده کرد:

1- استفاده از dns 2- استفاده از mirror های دیگر 3- استفاده از ابزار های proxy client همانند hiddify و nekoray ...

استفاده از mirror های دیگر

ساده ترین روش برای دور زدن تحریم ها می باشد با استفاده از مخازن دیگر اقدام به دانلود image ها می کنید (همانند focker.ir و ابراروان)

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

اما به طور خلاصه میتوانید تنها با اضافه کردن ادرس دامین /docker.arvancloud.ir به اول اسم image از مخازن ابراروان برای دانلود image استفاده کنید:

 docker pull docker.arvancloud.ir/<ImageName> 

همچنین برای /focker.ir نیز به همین صورت است:

 docker pull focker.ir/<ImageName> 

استفاده از dns

تعدادی dns داخلی به جهت رفع تحریم ها در دسترس است که معروف ترین انها shecan, 403 و begzar است.

begzar

etc/resolv.conf/#
 nameserver 185.55.226.26
nameserver 185.55.225.25

403

etc/resolv.conf/#
 nameserver 10.202.10.202
nameserver 10.202.10.102

shecan

etc/resolv.conf/#
 nameserver 178.22.122.100
nameserver 185.51.200.2

docker compose

docker compose یکی از قدرتمند ترین دستور های docker است که امکان می دهد در صورت استفاده از چند container برای یک هدف مشترک, config های انها را در یک فایل yaml تعریف کنید و هر بار مجبور به تایپ کردن آنها در ترمینال یا نوشتن دستی آنها در script نباشید و در نهایت با اجرا تنها یک دستور تمامی container ها را اجرا کنید.

ابزار ها

پرچم ها

داکر مجوعه از پرچم ها را ارائه می دهد:

--help

نحوه استفاده از docker و دستورات را نمایش می دهد.

-D, --debug=true|false

حالت دیباگ را فعال با غیر فعال می کند

-H, --host=[unix:///var/run/docker.sock]

ادرس socket را برای سرویس docker مشخص می کند

-l, --log-level=debug|info|warn|error|fatal

سطح لاگ را مشخص می کند (به صورت پیشفرض info است)

--tls=true|false

استفاده از پکت ها tls را مشخص میکند (پیشفرض false)

--tlscacert=~/.docker/ca.pem

بررسی می کند certs ها حتما توسط CA مشخص شده امضا شده باشد

--tlscert=~/.docker/cert.pem

نحوه استفاده از داکر و مجوعه ای از دستورات را نمایش می دهد.

--tlskey=~/.docker/key.pem

ادرس کلید tls را برای CA مشخض می کند

--tlsverify=true|false

از tls استفاده می کند و کنترول از راه دور را تایید می کند

-v, --version=true|false

نسخه فعلی docker را نمایش می دهد

دستورات

با استفاده از docker --help می توانید لیست دستورات را بررسی کنید

run

اجرای یک container جدید از یک تصویر

docker run hello-world

exec

اجرای دستورات در یک container در حال اجرا

docker exec -it my_container bash

ps

نمایش container های در حال اجرا

docker ps

build

ساخت تصویر Docker از فایل Dockerfile

docker build -t my_image .

pull

دانلود image از Docker Hub

docker pull nginx

push

آپلود image به Docker Hub

docker push focker.ir/my_image

images

نمایش لیست image های موجود

docker images

login

ورود به Docker Hub

docker login

logout

خروج از Docker Hub

docker logout

جستجوی image در Docker Hub

docker search redis

version

نمایش نسخه Docker

docker version

info

نمایش اطلاعات سیستم Docker

docker info

attach

اتصال به یک container در حال اجرا

docker attach my_container

commit

ساخت یک image از یک container در حال اجرا

docker commit my_container my_image

cp

کپی فایل ها بین هاست ( سیستم میزبان) و container

docker cp my_container:/path/in/container /path/on/host

create

ساخت یک container جدید

docker create --name my_container ubuntu

diff

نمایش تغییرات فایل های container

docker diff my_container

events

نمایش رویدادهای Docker

docker events

export

خروجی گرفتن از filesystem یک container به صورت فایل tar

docker export my_container -o my_container.tar

history

نمایش تاریخچه یک image

docker history ubuntu

import

وارد کردن filesystem به عنوان image

docker import my_container.tar my_image

inspect

نمایش جزئیات یک container یا image

docker inspect my_container

kill

متوقف کردن یک container

docker kill my_container

load

بارگذاری image از فایل tar

docker load -i my_image.tar

logs

نمایش لاگ های یک container

docker logs my_container

pause

متوقف کردن موقت اجرای یک container

docker pause my_container

port

نمایش نقشه برداری پورت container

docker port my_container

rename

تغییر نام یک container

docker rename my_container new_container_name

restart

ریستارت کردن یک container

docker restart my_container

rm

حذف یک container

docker rm my_container

rmi

حذف یک image

docker rmi my_image

save

ذخیره یک image به صورت فایل tar

docker save -o my_image.tar my_image

start

شروع به کار یک container متوقف شده

docker start my_container

stats

نمایش اطلاعات آماری container ها

docker stats my_container

stop

متوقف کردن اجرای یک container

docker stop my_container

tag

ایجاد یک tag برای یک image

docker tag my_image my_repo/my_image:tag

top

نمایش فرآیندهای در حال اجرای یک container

docker top my_container

unpause

ادامه اجرای یک container متوقف شده

docker unpause my_container

update

به‌روزرسانی تنظیمات یک container

docker update --cpus=2 my_container

wait

منتظر ماندن تا پایان اجرای یک container

docker wait my_container