بعد از اینکه با موفقیت Docker Compose را نصب کردیم. حالا وقت آن رسیده که برگردیم سراغ برنامه ای که داشتیم و اگر خاطرتان باشد، برای برنامه مان چند کانتینر نیاز داشتیم. در ادامه ی آموزش ها قصد داریم با استفاده از فایل Compose، همان برنامه ای که داشتیم را با شرایط حرفه ای تر و البته اصولی تر Dockerize کنیم. در این قسمت کانتینر اصلی برنامه را به فایل Compose اضافه میکنیم و در بخش بعدی دیتابیس آن را اضافه میکنیم تا برنامه به صورت کامل Dockerize شود.
Dockerizing به چه معناست؟
حالا که در مسیر حرفه ای تر شدن در داکر، مفاهیم و کاربردهای آن هستیم، شاید خوب باشد که با اصطلاح Dockerizing هم آشنا بشویم. این اصطلاح را که شاید از زبان حرفه ای ها زیاد بشنویم و یا کارفرمای آگاهی از ما بخواهد برنامه ی توسعه داده شده را برایش Dockerize کنیم؛ این اصطلاح به معنای فرآیند بسته بندی، استقرار و اجرای برنامه ها با استفاده از کانتینرهای Docker است.
فایل Compose را ایجاد کنید
برای استفاده از Compose نیاز است در ابتدا فایلی را در پوشه ی اصلی برنامه با نام docker-compose.yml
ایجاد کنیم.
فایل Compose را با نوشتن نسخه ی آن شروع می کنیم.
version: "3.7"
در بیشتر مواقع بهتر است از آخرین نسخه ی پشتیبانی شده استفاده کنیم. در ادامه ماتریس سازگاری Docker و Compose را مشاهده می کنید.
نسخه داکر Engine | قالب فایل Compose |
---|---|
+19.03.0 | مشخصات Compose |
+19.03.0 | 3.8 |
+18.06.0 | 3.7 |
+18.02.0 | 3.6 |
+17.12.0 | 3.5 |
+17.09.0 | 3.4 |
+17.06.0 | 3.3 |
+17.04.0 | 3.2 |
+1.13.1 | 3.1 |
+1.13.0 | 3.0 |
+17.12.0 | 2.4 |
+17.06.0 | 2.3 |
+1.13.0 | 2.2 |
+1.12.0 | 2.1 |
+1.10.0 | 2.0 |
در ادامه، باید لیست سرویس هایی (همان کانتینرهایی) را که می خواهیم به عنوان بخشی از برنامه مان اجرا شود را معرفی کنیم. در ادامه ی این آموزش، قصد داریم هر یک از سرویس های مورد استفاده در برنامه مان را به فایل Compose منتقل کنیم.
version: "3.7"
services:
تعریف سرویس (کانتینر) برنامه
اگر یادتان باشد، دستور زیر، همان دستوری هست که برای تعریف سرویس برنامه مورد استفاده قرار داده بودیم.
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:12-alpine \
sh -c "yarn install && yarn run dev"
که در صورت استفاده از PowerShell باید دستور زیر را وارد میکردیم.
PS> docker run -dp 3000:3000 `
-w /app -v "$(pwd):/app" `
--network todo-app `
-e MYSQL_HOST=mysql `
-e MYSQL_USER=root `
-e MYSQL_PASSWORD=secret `
-e MYSQL_DB=todos `
node:12-alpine `
sh -c "yarn install && yarn run dev"
حالا در ادامه به صورت گام به گام این دستورات را به فایل Compose منتقل خواهیم کرد.
1. ابتدا لازم است سرویس و Image ای که برای کانتینر می خواهیم را معرفی کنیم. ما هر نامی که بخواهیم، می توانیم برای سرویس مان انتخاب کنیم. این نام به صورت خودکار به Alias (نام مستعار) شبکه هم داده می شود، که برای تعریف سرویس MySQL مفید خواهد بود.
version: "3.7"
services:
app:
image: node:12-alpine
ما برای نام سرویس از "app
" استفاده کردیم و در مقابل برچسب image
هم نام image مورد انتظارمان برای این کانتینر یعنی node:12-alpine
را نوشتیم.
2. برای برچسب هایی که می نویسیم الزامی وجود ندارد که یک ترتیب و نظم خاص را دنبال کنیم. ولی الگوی هایی هم وجود دارد که بین کاربران داکر مرسوم شده است. مثلا به طور معمول، بعد از برچسب image
، معمول است که برچسب command
نوشته شود. پس در ادامه، فایل ما به این صورت تغییر می کند.
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
3. در این مرحله بعدی باید p 3000:3000-
را به فایل Compose مان اضافه کنیم. برای این کار از برچسبی با عنوان ports
استفاده می کنیم.
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
ما در اینجا از حالت کوتاه شده ی این تعریف استفاده کردیم. ولی خوب است بدانیم که در نوشتن فایل Compose، حالت دیگری هم داریم که در انتهای این فصل، قصد دارم برچسب های مهم را به صورت تفکیک شده برایتان توضیح بدهم که توصیه می کنم حتما آنها را بخوانید تا درباره ی هرکدام از این برچسب ها اطلاعات کافی و مناسبی بدست بیاورید.
4. در ادامه، باید مسیر اجرایی برنامه یا همان Working Directory را که با دستور w /app-
مشخص کرده بودیم به فایل Compose منتقل کنیم. در این مرحله به طور همزمان قصد داریم حافظه یا Volume برنامه را هم که با "v "$(pwd):/app-
معرفی کرده بودیم، به فایل Compose منتقل کنیم.
این دو مقدار مهم را با برچسب های working_dir
و volumes
در فایل Compose معرفی می کنیم. توجه داشته باشید که volumes
هم حالت کوتاه و بلند دارد و نکات حرفه ای تری برای آن وجود دارد که در آخر همین فصل به آن ها خواهیم پرداخت.
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
5. در نهایت، باید متغیرهای محیطی ای که برای برنامه مان تعریف کرده بودیم را به فایل Compose منتقل کنیم. برچسب مورد نیاز برای این مقادیر environment
است.
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
تا اینجا توانستیم دستوری که برای ایجاد کانتینر مربوط به برنامه مان داشتیم را به فایل Compose منتقل کنیم. در قسمت بعدی، به همین صورت گام به گام، فایل Compose مربوط به سرویس MySQL را راه اندازی می کنیم و در نهایت برنامه مان را اجرا می کنیم. با ما همراه باشید.