جواد جهانگیری
جواد جهانگیری
خواندن ۱۸ دقیقه·۳ سال پیش

نکات کاربردی داکر (docker) برای برنامه نویسان دات نت (Net.) و مدیریت بانک های اطلاعاتی SQLSERVER

به نام آن که جان را فکرت آموخت / چراغ دل به نور جان برافروخت

با سلام و تشکر از مطالعه مقالات بنده در کانال ویرگول ، این مقاله شامل نکات کاربردی داکر برای برنامه نویسان دانت و مدیریت بانک های اطلاعاتی SQLSERVER در داکر می باشد .هدف از این مقاله اموزش داکر نمی باشد زیرا آموزش کامل و مفیدی در راستای داکر در سطح اینترنت به زبان انگلیسی و هم به زبان فارسی وجود دارد که در طی مقاله چندین منبع خوب اموزشی داکر به زبان فارسی معرفی می شود که بعنوان پیشنیاز این مقاله مطالعه شود در ابتدا نحوه نصب و راه اندازی SQLSERVER2019 بر روی داکر و کار با این بانک اطلاعاتی بر روی داکر بررسی می شود و سپس دستورات کاربردی داکر برای برنامه نویسان دانت کور بررسی می شود و در نهایت نحوه داکرایز کردن یک پروژه دانت کوری بررسی می شود.ایده این سری مقاله های آموزشی از این موضوع سرچشمه می گیرد که بخشی از خوانندگان وجود دارد که به محتوای نوشتاری آنلاین بهتر پاسخ می دهند و ترجیج می دهند مهارت های جدید را به سرعت از طریق خواندن افزایش دهند.این سری اموزش ها با ارایه پکیج آموزش های کاربردی در خصوص C# asp.net core آغاز می شود که انتظار می رود با واکنش مثبت کاربران همراه شود.


توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.
با کمال تشکر
جواد جهانگیری
شماره تلفن همراه: 09149431772
نشانی پست الکترونیکی: javad.jahangiri.niopdc@gmail.com
فیلم‌های آموزشی در آپارات:جواد جهانگیری (CTO) - آپارات
فیلم آموزشی در یوتویب: javad jahangiri - YouTube
نسخه مقاله: ۱.۱ - تاریخ بروزرسانی: 1400/09/27



با عنایت به اینکه در سط اینترنت مقالات و اموزش های خوبی برای داکر موجود است هدف از این مقاله به هیچ عنوان اموزش داکر نیست با عنایت به اینکه بنده یک متخصص داکر نیستم ولی بعنوان یک برنامه نویس که از داکر استفاده می کنیم نکات کاربردی برای شما ارایه می شود همانطور که اشاره شد یکسری سایت اموزشی مفید برای مطالعه داکر معرفی خواهد شد یکی از بهترین منابع آموزشی داکر به انگلیسی خود مستندات سایت داکر می باشد:

https://docs.docker.com/get-started/

در سایت های فارسی هم نظر شخصی بنده سایت داکرمی دارای مقالات و اموزش های کاملی برای داکر هست:

https://dockerme.ir/

منبع آموزشی برای مقاله جاری مثل همیشه خود سایت مایکروسافت می باشد:

https://docs.docker.com/samples/dotnetcore/


https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash

می باشد بریم که اموزش را شروع کنیم:

تفاوت داکر با ماشین مجازی ؛ داکر چیست ؟

همانطوی که در شکل بالا مشاهده می کنید در مجازی سازی ما یک سخت افزاری داریم که بر روی ان یک Hypervisor (مثل VMware ، Hyper-V،KVM) وجود دارد که برای شبیه سازی سخت افزار برای ماشین های مجازی که در سطح بالاتر ان قرار می گیرد استفاده می شود. مجازی سازی مزایای خیلی زیاد دارد و بصورت گسترده در اتاق سرورها و دیتاسنتر ها استفاده می شود یکی از مهمترین مزیت های ان این است که سیستم عامل بصورت کاملا جدا از هم کار می کند

در داکر ما بر روی HOST OS یک لایه نازک بنام Docker Engine داریم که روی ان کانتنر های ما سوار می شود فرق کانتینر با ماشین مجازی این است که ماشین مجازی یک سیستم عامل کامل با کرنل مستقل می باشد ولی کانتینر کرنل مستقل ندارد و خیلی از نیازهای خود را می تواند از HOST OS قرض بگیرند و موتور داکر وقت چیزهای که لازم دارید در کانتینر بالا می اورد لذا کانتینر های سبک و کوچیک هستند در مجازی سازی به روش مجازی خود Hypervisor یک سربار زیادی برای ما ایجاد می کند و همچنین مجبور هستیم یک سیستم عامل کامل را بالا بیاوریم ولی در کانتینر فقط چیزهای که لازم دارد از سیستم عامل هاست درخواست می کند لذا می توانیم کانتینر داشته باشیم با سایز فقط 2k بایت بنام Hello Word ،زیرا فقط چیزی که لازم دارد از هاست اوس ما درخواست می کند برای مثال اگر کرنل لازم دارد و یا حافظه ای برای اجرا لازم دارد از سیستم عامل هاست درخواست میکند ولی ایزوله بودن ان نسبت به VM کمتر هست در ماشین های مجازی بحث ایزوله بودن بیشتر می باشد(دوستان که به مباحث امنیت اطلاعات علاقه مند هستند روش های برای رد کردن این ایزولاسیون وجود دارد ?)

در داکر پیچیدگی کمتر هست و Scalable (مقیاس پذیر ) می باشد فرض کنید ما یک کانتینر داریم که یک دتیابیس هستش و یک کانتینر دیگر داریم که یه برنامه می باشد که به مشتریان سرویس می دهد حالا فرض کنید تعداد درخواست ها بالا می رود و یک App ما جواب نمی دهد براحتی می توانیم یک APP دیگر بالا بیاوریم و مقیاس پذیری در داکر خیلی بالا می باشد

در مورد مزایای دیگر داکر فرض کنید ما یک برنامه داریم که نیاز به یکسری پیش نیازهای نصب و راه اندازی دارد اگر این برنامه را به کسی بدهیم باید بهش یه راهنما هم بدهیم که این پیش نیاز ها رو سیستم عامل خودت نصب کن بعد برنامه ما کار می کند ولی در داکر این کار براحتی انجام می شود یک docfile به مشتری می دهیم و یا یک Image داکری برای ان می سازیم بهش می دهیم و مشتری می تواند با این داکر فایل براحتی برنامه ما را بالا بیاورد و یا فرض کنید برنامه ما باید تو یک سرور راه اندازی شود مسئول ان شبکه باید یکسری پیش نیاز های ما روی سرور نصب کند با فرض این پکیجی روی ان سرور باشد که با پکیج های ما سازگاری نداشته باشد در این حالت خیلی مشکلات بوجود می اید ولی در داکر با دادن این داکر فایل مشکل براحتی حل می شود مسئول شبکه با داکر فایل ما یک ایمیج داکر می سازد و از روی ان کانتینر ان را بالامی اورد و برنامه ما براحتی بر روی سرور بالا می اید دقت کنید در حالت حتی ما پلتفرم خاصی نیاز داریم که سیستم عامل سرور ما لینوکس باشد یا ویندوز و …

ما چون در این مقاله قصد اموزش کامل داکر را نداریم با فرض اینکه داکر را می خواهیم روی ویندوز نصب کنیم برای اینکه نسخه جدید داکر در ویندوز با WSL2 سازگار می باشد و توصیه می شود با توزیع Ubuntu نیز integration شود ابتدا مطابق مراحل زیر پیش نیاز های نصب داکر را در ویندوز بصورت کاربردی و سریع طی می کنیم:


تکنولوژی (WSL) چیست؟

این تکنولوژی مخفف Windows Subsystem for Linux می باشد و راهی برای اجرای لینوکس (هسته لینوکس واقعی) بر روی ویندوز است که تقریبا از تمامی توزیع های لینوکس پشتیبانی می کنه

تفاوت بین ماشین های مجازی و WSL چیست؟
تفاوت اصلی این است که ویندوز تماس های سیستم WSL را به دستورالعمل های بومی ویندوز ترجمه می کند ، این بدان معناست که شبیه لینوکس اصلی است و لی ماشین های مجازی تماس های سیستم را شبیه سازی می کند.

از روی راهنمایی زیر در سایت مایکروسافت WSL را نصب کنید حتما به نسخه WLS2 بروزرسانی کنید

نکته : دقت شود حتما نسخه wsl رو نسخه دو تنظیم شود:

wsl --set-default-version 2

که با یک سرچ ساده در اینترنت می توانید ان را نصب کنید و در سایت خود مایکروسافت هم مرحله به مرحله مراحل نصب وجود دارد.

https://docs.microsoft.com/en-us/windows/wsl/install

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

مطابق مقاله زیر می توانید اوبونتو را در WSL2 نصب کنید:

https://altis.com.au/installing-ubuntu-bash-for-windows-10-wsl2-setup/

توجه شود حتما توزیع ابونتو لینوکس بعنوان engine مربوط به wsl تنظیم شود

wsl --list --verbose wsl --set-default ubuntu

Windows Terminal

در مرحله بعد پیشنهاد می شود و توصیه می شود که Windows Terminal را بروی ویندوزتان نصب کنید

https://docs.microsoft.com/en-us/windows/terminal/install

در نهایت می بایستی ترمینال جدید ویندوز به شرح زیر باز می شود

بعد از نصب پیش نیازها نسبت به نصب Docker Desktop از لینک زیر اقدام شود

https://www.docker.com/products/docker-desktop
دقت شود بعد از نصب داکر دسکتاپ می بایستی مطابق شکل زیر از قسمت تنظیمات به منوی Resource وارد می شویم و گزینه Enable integration with my default wsl distor می بایستی فعال بود و همچنین گزینه
Enable integration with additional distro برای Ubuntu فعال کنید


دستورات کاربردی داکر

نحوه نمایش ایمیج های داکر

docker images

نحوه نمایش کانتینرهای در حین اجرا

docker ps

نحوه نمایش همه کانتینرها (چه انهای که در گذشته اجراشده و چه انهای که در حین اجرا می باشد)

docker ps -a

نحوه پاک کردن یک کانتینر

docker rm container-id

نحوه پاک کردن تمامی کانتینرها

docker container prune

نحوه پاک کردن ایمیج داکر

docker rmi image-name i for remove image

نحوه اجرا کردن یک داکر

docker run name-docker

نحوه اجرا کردن یک داکر بصورت اینتراکتیو

docker run -it docker-image

نحوه اجرا کردن یک داکر بصورت اینتراکتیو و پاک شدن کانتینر بعد از خروج از داکر

docker rum --rm -it docker-image --rm for remove container on close --it interactive and tty for input and output in docker

نحوه اجرا کردن یک دستور در داخل یک کانتینر داکر

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container Options: -d, --detach Detached mode: run command in the background --detach-keys string Override the key sequence for detaching a container -e, --env list Set environment variables --env-file list Read in a file of environment variables -i, --interactive Keep STDIN open even if not attached --privileged Give extended privileges to the command -t, --tty Allocate a pseudo-TTY -u, --user string Username or UID (format: <name|uid>[:<group|gid>]) -w, --workdir string Working directory inside the container

مثال :نحوه اجرای bash در داخل یک کانتینر:

docker exec -it contianer bash

Publish port (-p)

docker run -p hostip:hostport:contianerport/tcp containername docker run -p 127.0.0.1:80:8080/tcp ubuntu docker run -p 80:8080/tcp ubuntu docker run -p 80:8080 ubuntu

این پورت 8080 کانتینر را به پورت TCP 80 در 127.0.0.1 دستگاه میزبان متصل می کند. همچنین می توانید پورت های udp و sctp را مشخص کنید. توجه کنید در صورتی که مقدار hostip نوشته نشود مقدار پیش فرض ان 127.0.0.1 می باشد اگر پروتکل مشخص نشود مقدار ان tcp می باشد

درحقیقت هاست پورت همان پورت خارجی می باشد که ما را به کانتینر پورت داخلی این کانتینر وصل می کند
docker run -p 6379:6379 redis

این دستور پورت 6379 هاست ما (دنیای خارجی ) را به پورت 6379 داخلی ردیس که روی ان بصورت پیش فرض سرویس می دهد متصل می کنید

نحوه save کردن ایمیج داکر(پشتیبان گیری از ایمیج ها داکر)

همانگونه که مستحضرید ما توسط داکر هاب تحریم شدیم درست است می توانیم از طریق سایت شکن این تحریم ها را دور زد

https://shecan.ir/

ولی سرعت دانلود ایمیج ها برای ما کند می باشد و درصورت نیاز لازم دارید که این ایمیج ها پشتیبان گیری کنید و یا بصورت فنی تر ان ها را save کنید که در صورت نیاز در اینده ان ها به جای دانلود براحتی ان ها را از روی هارد خودتان load کنید

docker save

Description

Save one or more images to a tar archive (streamed to STDOUT by default)

Usage

$ docker save [OPTIONS] IMAGE [IMAGE...]

Extended description

Produces a tarred repository to the standard output stream. Contains all parent layers, and all tags + versions, or specified repo:tag, for each argument provided.

For example uses of this command, refer to the examples section below.

Options

Name, shorthandDefaultDescription--output , -o


مثالی از نحوه ذخیره داکر های مهم مورد نیاز برنامه نویسی ها دانت کور:

در این مثال ها از ایمیج داکرهای زیر در مسیر D:\dockerimage یک پشتیبان گرفته می شود

docker save ocelotapigw -o D:\dockerimage\ocelotapigw.tar docker save rabbitmq -o D:\dockerimage\rabbitmq.tar docker save postgres -o D:\dockerimage\aspnetrunbasics.tar docker save dpage/pgadmin4 -o D:\dockerimage\dpage_pgadmin4.tar docker save redis -o D:\dockerimage\redis.tar docker save mcr.microsoft.com/mssql/server -o D:\dockerimage\cr_microsoft_com_mssql_server.tar


نحوه بارگذاری یک ایمیج ذخیره شده داکر (Docker):


حالا فرض کنید که از یک داکر به روش در قسمت قبل بیان شد یک پشتیبان بر روی کامپیوتر تهیه شده است حالا نیاز است به جای دانلود این ایمیج ان را از روی کامیپوتر خودمان بارگذاری کنیم :

docker load

Description

Load an image from a tar archive or STDIN

Usage

$ docker load [OPTIONS]

Extended description

Load an image or repository from a tar archive (even if compressed with gzip, bzip2, or xz) from a file or STDIN. It restores both images and tags.

For example uses of this command, refer to the examples section below.

Options

Name, shorthandDefaultDescription--input , -iRead from tar archive file, instead of STDIN--quiet , -qSuppress the load output

مثال : نحوه بارگذاری ایمیج های داکرهای مهم برای برنامه نویسان دانت کور:

docker load -i D:\dockerimage\rabbitmq.tar docker load -i D:\dockerimage\dpage_pgadmin4.tar docker load -i D:\dockerimage\redis.tar docker load -i D:\dockerimage\cr_microsoft_com_mssql_server.tar



نحوه نصب مایکروسافت SQL SERVER 2019 بر روی داکر (Docker)


همانگونه که مستحضرید متاسفانه شرکت داکر هاب ما رو تحریم کرده برای دور زدن تحریم وارد سایت شکن می شود و مطابق اموزش های ارایه شده در این سایت DNS های خود را تغییر می دهیم

https://shecan.ir/

برای نصب MS SQLSERVER 2019 بر روی داکر ابتدا وارد سایت داکر هاب (Docker Hub) می شویم و مطابق دستور العمل به شرح زیر عمل می کنیم :

https://hub.docker.com/_/microsoft-mssql-server

برای دریافت اخرین نسخه SQLSERVER 2019 از دستور زیر استفاده می کنیم:

docker pull mcr.microsoft.com/mssql/server:2019-latest

سپس از طریق دستور زیر نسبت به اجرای داکر اقدام می کنیم توجه شود بجای your_password رمزعبور خود رابرای کاربری sa ست می کنید

docker run -e &quotACCEPT_EULA=Y&quot -e &quotSA_PASSWORD=<your_password>&quot -p 1433:1433 --name sql2019 -d mcr.microsoft.com/mssql/server:2019-latest

سپس از طریق دستور زیر sqlcmd را از داخل کانتینر بصورت زیر اجرا می کنیم :

docker exec -it sql2019 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>

حالا چند نمونه از دستورات را روی Sqlcmd را اجرا می کنیم:

print @@version go
prin @@servername go
select name from sys.databases go
create database db1 go
use db1 go


حالا نسبت به دانلود Microsoft SQL Server Management Studio از سایت خود مایکروسافت اقدام می کنیم :

https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15

سپس مطابق شکل زیر نسبت به وصل شدن به SqlServer نصب شده در داکر عمل می کنیم :

نحوه پشتیبان گیری (Backup ) و ریستور (Restor) یک دیتابیس داخل داکر SQLSERVER


docker cp

Description

Copy files/folders between a container and the local filesystem

Usage

$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

حالا با کمک دستور فوق نسبت به انتقال فایل پشتیبان گیری شده بر روی کامپیوتر خودمان اقدام می کنیم:

docker cp sql2019:/var/opt/mssql/data/db1.bak d:\backup

حالا فرض کنید که پشتیبان را قبلا تهیه کردید و می خواهید انرا را بر روی دیتابیس خودتان Restor کنید دوباره از طریق دستور docker cp این بار بصورت معکوس برای کپی پشتیبان به داخل داکر عمل می کنیم

docker cp s d:\backup\db1.bak sql2019:/var/opt/mssql/data/

مطابق شکل زیر به قسمت Restore Database وارد می شویم:

نسبت به Restore دیتابیس بصورت زیر عمل می کنیم :

Persist your data

تغییرات پیکربندی SQL Server داکر اس کیو ال به نحوی است که فایل های پایگاه داده در کانتینر باقی می مانند حتی اگر کانتینر را با docker stopو docker start راه اندازی مجدد کنید. با این حال، اگر کانتینر را با docker rm حذف کنید، همه چیز در کانتینر از جمله SQL Server و پایگاه داده‌های شما حذف می‌شود. بخش زیر نحوه استفاده از حجم داده ها را برای حفظ فایل های پایگاه داده خود حتی در صورت حذف کانتینرهای مرتبط توضیح می دهد.

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-docker-container-configure?view=sql-server-ver15&pivots=cs1-bash#persist

Mount a host directory as data volume

The first option is to mount a directory on your host as a data volume in your container. To do that, use the docker run command with the -v <host directory>:


docker run -e &quotACCEPT_EULA=Y&quot -e &quotSA_PASSWORD=<your-password>&quot -p 1433:1433 --name sql2017 -v D:/SqlDatabase/data:/var/opt/mssql/data -v D:/SqlDatabase/log:/var/opt/mssql/log -v D:/SqlDatabase/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2017-latest



docker network

مفاهیم شبکه در داکر خیلی گسترده می باشد و در این مقاله در حد اشنایی با شبکه داکر این موضوع را بررسی می کنیم

انواع شبکه در داکر به شرح زیر داریم:

  • User-defined bridge networks are best when you need multiple containers to communicate on the same Docker host.
  • Host networks are best when the network stack should not be isolated from the Docker host, but you want other aspects of the container to be isolated.
  • Overlay networks are best when you need containers running on different Docker hosts to communicate, or when multiple applications work together using swarm services.
  • Macvlan networks are best when you are migrating from a VM setup or need your containers to look like physical hosts on your network, each with a unique MAC address.
  • Third-party network plugins allow you to integrate Docker with specialized network stacks.

شبکه bridge :

دایور پیشفرض داکر bridge هستش و مواقعی چندتا کانتینر standalone داریم و این‌ کانینترها با هم دیگه ارتباط دارند از bridge استفاده می‌کنیم. مثلا docker-compse که در بحث برنامه نویسی بیشترین نوع شبکه ای که استفاده می شود این نوع شبکه می باشد که بیشتر مورد بررسی قرار میگرد و سایر شبکه در حد تعریف بررسی می شود.

اگر با تکنولوژی‌های مجازی‌ساز(vmware, kvm, ...) کار کرده باشید، باید بهتون بگم شبکه داکر تو حالت bridge با مجازی‌سازها متفاوته!قتی DOCKER یه کانتینر رو اجرا می‌کنه. بصورت پیش فرض یه شبکه BRIDGE میسازه و اون رو NAT میکنه.منظورم از شبکه BRIDGE یعنی یه کارت شبکه مجازی میسازه که بتونه از هاست(سیستم عامل اصلی که داکر روش نصب شده) با container در ارتباط باشه. از طرفی nat هم انجام میده تا کانتینر اینترنت داشته باشه.

برای اینکه لیست شبکه‌های داکر رو ببینیم کافیه دستور زیر رو اجرا کنیم:
docker network ls

دستور ساختن یک شبکه داکر (بصورت پیش فرض از نوع BRIDGE ساخته می شود)

docker network create <NAME_OF_NETWORK>

docker network create mynetwork

حالا اگر بخواهیم یک کانتینر تو این شبکه باشد باید:

docker run --network mynetwork-p 8080:80 --name my-container nginx:latest

شبکه Host:

در این نوع شبکه کانتینر بطور مستقیم از شبکه ماشین میزبان(سرور) استفاده می‌کند.مثلا یک کانتینر nginx داشته باشیم که شبکه آن از نوع Host باشه با زدن ادرس ماشین میزبان درخواست رو ان پورت مستقیم تحویل کانتینر می شود:

شبکه Overlay:
کمک overlay می توانیم چند تا docker daemon رو بهم دیگر وصل کرد.به کمک این نوع شبکه می توانیم دو کانتینر داشته باشیم که در دو تا docker daemon جداگانه با همدیگر در ارتباط باشندو می توانیم این ارتباط را رمزنگاری نیز کرد

شبکه macvlan:

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

شبکه none:

شبکه را برای کانتینر غیرفعال می کند

شبکه Plugin:

به کمک این شبکه می توانیم یک افزونه(plugin) third-party رو نصب و استفاده کرد.

dockerfile

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

docker build

Description

Build an image from a Dockerfile

Usage

$ docker build [OPTIONS] PATH | URL | -
https://docs.docker.com/engine/reference/commandline/build/

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


  • دستورالعمل ها یا instruction های داکر به بزرگ یا کوچک بودن حروف حساس نیستند
  • دستورالعمل های Dockerfile را به ترتیب از بالا به پایین اجرا میکند
  • اولین دستورالعملی که استفاده می شود، FORM است که از آن برای مشخص کردن ایمیج اصلی استفاده میشود و بعد از آن متوان از دستورالعمل های RUN, CMD, FROM, EXPOSE, ENV و غیره استفاده کرد.
  • دستوراتی که با # شروع می شوند، به عنوان یک کامنت عمل میکنند

یک داکرفایل نمونه برای دانت کور:

dockerfile for .Net Core

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY [&quotServices/Catalog/Catalog.API/Catalog.API.csproj&quot, &quotServices/Catalog/Catalog.API/&quot] RUN dotnet restore &quotServices/Catalog/Catalog.API/Catalog.API.csproj&quot COPY . . WORKDIR &quot/src/Services/Catalog/Catalog.API&quot RUN dotnet build &quotCatalog.API.csproj&quot -c Release -o /app/build FROM build AS publish RUN dotnet publish &quotCatalog.API.csproj&quot -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT [&quotdotnet&quot, &quotCatalog.API.dll&quot]

docker compose

ابزاری برای ارائه و اجرای برنامه‌هایی است که در اصطلاح مولتی کانتینر بوده و چند کانتینر مختلف دارند

docker-compose.yml

با استفاده از فایل docker-compose.yml می‌توانید سرویس‌های برنامتان را اجرا و کانفیگ کنید. بعد از آن فقط  با استفاده از یک دستور می‌توانید همه‌‌‌ی سرویس‌هایی را که در فایل yaml خود مشخص کردید، را بسازید و اجرا کنید.

برای مثال :

اضافه کردن ایمیج مونگودبی به داکر کامپوز فایل برای محیط های مولتی کانتینر داکر

برای این کار وارد فایل docker-compose.yml می شویم ابتدا یک سرویس به این فایل بنام storedb اضافه می کنیم و سپس برای اینکه درهنگام نصب و یا حذف کانتینر های اطلاعات دیتابیس حذف نشود و بعبارتی اطلاعات دیتابیس در سیستم فایل ما در یک فایل جداگانه از خود کانتینر نوشته شود یک volumes هم به فایل داکرکامپوز با نام mongo_data اضافه می کنیم

docker-composer version: '3.4' services: catalogdb: image: mongo catalog.api: image: ${DOCKER_REGISTRY-}catalogapi build: context: . dockerfile: Services/Catalog/Catalog.API/Dockerfile volumes: mongo_data:

docker-compose.override.yml

مهم ترین فایل docker-compose.override.yml می رسد, این فایل وقتی که ما دستور می دهیم که داکر کامپوز مجدد کانتینرها را بسازد داکر کامپوز برای رونویسی تنظیمات پروژه از این فایل استفاده می کند

docker-composer.override version: '3.4' services: catalogdb: container_name: catalogdb restart: always ports: - &quot27017:27017&quot volumes: - mongo_data:/data/db catalog.api: container_name: catalog.api environment: - ASPNETCORE_ENVIRONMENT=Development - &quotDatabaseSettings:ConnectionString=mongodb://catalogdb:27017&quot depends_on: - catalogdb ports: - &quot8000:80&quot

برای سرویس storedb که همانگونه که مستحضرید هر سرویس به یک داکر کانتینر در نهایت تبدیل می شود ابتدا برای کانتینر یک اسم می دهیم و سپس بهش اعلام می کنیم که اگر در حین استارت کانتینر به مشکل برخورد کرد همیشه کانتینر ریست شود و پورت 27017 برای کانتینر تنظیم کرده و والیومی که دیتاهای مونگودبی باید در ان مسیر نوشته شود را /data/db/ را برای ان تنظیم می کنیم

سپس برای کانتینر اصلی پروژه یک نام بنام store.api می دهیم و سپس در پیشنیازهای این سرویس اعلام می کنیم که قبل از استارت این کانتینر باید کانتینر storedb باید ابتدا استارت شده باشد و مشخص می کنیم که پورت ان نیز از 8000 به 80 منتقل شود

نمونه از اجرای دستور docker-compose

docker-compose -f .\docker-compose.yml -f .\docker-compose.override.yml up -d


با تشکر از مطالعه مقاله بنده



https://www.aparat.com/javadjahangiriniopdc/playlists



در دوره های آموزش تضمینی مجتمع فنی ارومیه که به صورت خصوصی و عمومی در دو شیوه حضوری و آنلاین برگزار می شود سرفصل های بسیار متنوع و کاربردی را بصورت پروژه محور آموزش داده می شود تا شخص کارآموز بتواند بلافاصله پس از اتمام این دوره در کمترین زمان ممکن وارد بازار کار شود.
آموزش تخصص ماست با ما حرفه ای شوید
جهت مشاوره با شماره 09149431772 در ارتباط باشید ...
داکر برای برنامه نویسان دانتداکر برای مدیریت بانک های اطلاعاتی sqlserverجواد جهانگیریمجتمع فنی ارومیهآموزش برنامه نویسی در ارومیه
بنده دارای مدارک بین المللی شبکه ,برنامه نویسی, سرورهای ویندوزی و لینوکس هستم بیش از ده سال سابقه تدریس در زمینه های یاد شده را دارم. آموزش تخصص ماست با ما حرفه ای شوید 09149431772 مجتمع فنی ارومیه
شاید از این پست‌ها خوشتان بیاید