mirror of
https://github.com/parchlinux/wikibackup.git
synced 2025-02-22 11:55:43 -05:00
415 lines
15 KiB
Markdown
415 lines
15 KiB
Markdown
|
---
|
|||
|
title: داکر
|
|||
|
description: داکر یک ابزار برای ایزوله سازی (Containerization) برای توسعه تمیز تر و راحت برای توسعه دهندگان است
|
|||
|
published: true
|
|||
|
date: 2024-08-12T07:20:23.121Z
|
|||
|
tags: داکر, container
|
|||
|
editor: markdown
|
|||
|
dateCreated: 2024-07-23T16:21:30.996Z
|
|||
|
---
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# توضیحات
|
|||
|
|
|||
|
docker ابزاری برای ایزوله سازی (Containerization) است که امکان اشتراک گذاری محیط توسعه را به صورت container در هر سیستم عاملی می دهد, این کار موجب تسریع زمان توسعه و اشتراک گذاری محیط بین اعضای تیم می شود, همچنین از تداخل وابستگی ها جلوگیری می کند، چرا که تمام وابستگی ها در container و به صورت ایزوله نگه داری میشود.
|
|||
|
|
|||
|
# تاریخچه
|
|||
|
قبل از ایجاد مفهموم container و ایزوله سازی محیط, مجازی سازی (Virtualization) یکی از اصلی ترین راهکار ها برای جدا کردن محیط توسعه از سیستم میزبان بود, کاربر با اختصاص دادن cpu ,memory و hard space تایین می کرد چه مقدار منابع از سیستم میزبان به سیستم مجازی تعلق دارد, اما این راهکار چندان مناسب نبود چرا که مقدار قابل توجهی از منابع به سیستم عامل مجازی تعلق میگرفت و سرعت پردازش نسبت به سیستم میزبان کند تر بود.
|
|||
|
|
|||
|
اما با ورود مفهوم container, موجب شد که ایزوله سازی و جدا کردن محیط های مختلف به صورت کم هزینه تر و با منابع کمتری صورت بپذیرد.
|
|||
|
|
|||
|
docker یکی از ابزار هایی است که میتوان برای ساخت و مدیریت container و ... از آن استفاده کرد, ممکن است نیاز داشته باشد که محیط توسعه/محصول خودتان را با دیگر اعضا به اشتراک بگذارید, docker این امکان را فراهم می کند تا با اشتراک گذاری فایل اسکلت container خود (image) این کار را تسریع کنید, همچنین افراد دیگر نگرانی جهت بر طرف کردن وابستگی ها ندارند چرا که تمام انها از قبل حل شده است.
|
|||
|
|
|||
|
# [نصب و راه اندازی](https://itsfoss.com/install-docker-arch-linux/)
|
|||
|
|
|||
|
سایت مرجع [docker](https://docs.docker.com/engine/install/) اموزش کاملی را جهت نصب در سیستم های لینوکسی پوشش داده است اما توزیع های مبتبی بر ارچ به صورت رسمی پوشش داده نشده است و نصب آن به صورت 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](https://hub.docker.com/)
|
|||
|
|
|||
|
[Docker hub](https://hub.docker.com/) به عنوان مخزن پیشفرض docker برای دانلود و اپلود image ها مورد استفاده قرار می گیرد.
|
|||
|
|
|||
|
به عنوان مثال ممکن است بخواهید از nginx به عنوان webserver خود استفاده کنید, میتوانید image nginx را از docker hub دریافت کنید و از روی آن یک container ایجاد کنید.
|
|||
|
|
|||
|
1- با استفاده از ```docker login``` به حساب کاربری خود وارد شوید.
|
|||
|
> اگر حساب کاربری ندارید, یکی [ایجاد](https://app.docker.com/signup?) کنید
|
|||
|
|
|||
|
2- میتوانید با استفاده از ```docker pull nginx``` اخرین ورژن nginx را از docker hub دریافت کنید.
|
|||
|
|
|||
|
> متاسفانه docker hub در ایران تحریم است, در صورتی که با خطای 403 یا connection time out مواجه شدید, به احتمال زیاد مشکل از تحریم ها می باشد, میتوانید با خواندن [رفع تحریم](#رفع-تحریم) این مشکل را حل کنید.
|
|||
|
|
|||
|
> وب سرور nginx در docker hub [مستندات کاملی](https://wiki.parchlinux.com/fa/Docker) را درباره نحوه کار با 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](https://hiddify.com/) و [nekoray](https://github.com/MatsuriDayo/nekoray) ...
|
|||
|
|
|||
|
## استفاده از mirror های دیگر
|
|||
|
|
|||
|
ساده ترین روش برای دور زدن تحریم ها می باشد با استفاده از مخازن دیگر اقدام به دانلود image ها می کنید (همانند focker.ir و ابراروان)
|
|||
|
|
|||
|
ابراروان یک [مستند](https://www.arvancloud.ir/fa/dev/docker) جامع در این باز منتشر کرده است
|
|||
|
|
|||
|
اما به طور خلاصه میتوانید تنها با اضافه کردن ادرس دامین /docker.arvancloud.ir به اول اسم image از مخازن ابراروان برای دانلود image استفاده کنید:
|
|||
|
|
|||
|
```
|
|||
|
docker pull docker.arvancloud.ir/<ImageName>
|
|||
|
```
|
|||
|
|
|||
|
همچنین برای /focker.ir نیز به همین صورت است:
|
|||
|
|
|||
|
```
|
|||
|
docker pull focker.ir/<ImageName>
|
|||
|
```
|
|||
|
|
|||
|
## استفاده از dns
|
|||
|
|
|||
|
تعدادی dns داخلی به جهت رفع تحریم ها در دسترس است که معروف ترین انها [shecan](https://shecan.ir/), [403](https://403.online/) و [begzar](https://begzar.ir/) است.
|
|||
|
|
|||
|
### 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](https://docs.docker.com/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
|
|||
|
```
|
|||
|
### search
|
|||
|
جستجوی 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
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|