مقدمه
کانتینر کردن یک برنامه به فرآیند سازگاری یک برنامه و اجزای آن اشاره میکند برای اینکه بتوانید آن را در محیط های سبک که به کانتینر شناخته می شوند اجرا کنید. چنین محیط هایی منزوی و یکبار مصرف هستند و می توانند برای توسعه ، آزمایش و بکارگیری برنامه های کاربردی برای تولید ، مورد استفاده قرار گیرند.
در این راهنما ، ما از Docker Compose برای کانتینر کردن برنامه Laravel 6 برای توسعه استفاده خواهیم کرد. پس از اتمام ، یک برنامه نمایشی Laravel در سه کانتینر سرویس جداگانه اجرا می شود:
• یک سرویس برنامه که PHP7.4-FPM را اجرا میکند.
• سرویس db که MySQL 5.7 را اجرا می کند.
• سرویس nginx که قبل از ارائه برنامه Laravel به کاربر نهایی از سرویس برنامه برای تجزیه کد PHP استفاده می کند.
برای ایجاد یک روند توسعه ساده و تسهیل اشکال زدایی برنامه ، فایل های برنامه را با استفاده از حجم های مشترک همگام سازی خواهیم کرد. همچنین خواهیم دید که چگونه می توان از دستورات اجرای docker-compose برای اجرای Composer و Artisan در کانتینر برنامه استفاده کرد.
پیش نیازها
⦁ دسترسی به یک دستگاه محلی یا سرور مجازی توسعه Ubuntu 18.04 به عنوان یک کاربر غیر ریشه و دارای امتیازات سودو. اگر از سرور مجازی راه دور استفاده می کنید ، توصیه می شود یک فایروال فعال نصب شود. برای تنظیم این موارد ، لطفاً به راهنمای راه اندازی سرور مجازی اولیه ما برای اوبونتو 18.04 مراجعه کنید.
⦁ Docker نصب شده بر روی سرور مجازی تان، مراحل 1 و 2 نحوه نصب و استفاده از Docker را در اوبونتو 18.04 دنبال کنید.
⦁ Docker Compose نصب شده بر روی سرور مجازی تان. مرحله 1 نحوه نصب Docker Compose را در اوبونتو 18.04 را دنبال کنید.
مرحله 1 – به دست آوردن برنامه نسخه ی نمایشی
برای شروع ، برنامه نسخه ی نمایشی Laravel را از منبع Github آن دریافت خواهیم کرد. ما علاقه مند به شاخه آموزش 01 هستیم که شامل برنامه اصلی Laravel است که در اولین راهنمای این مجموعه ایجاد کرده ایم.
برای به دست آوردن کد برنامه ای که با این آموزش سازگار است ، با دستور زیر آموزش نسخه-1.0.1 را روی دیرکتوری هوم خود دانلود کنید:
⦁ $ cd ~

⦁ $ curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip

برای باز کردن کد برنامه به دستور unzip نیاز خواهیم داشت. اگر قبلاً این بسته را نصب نکرده اید ، اکنون این کار را انجام دهید:
⦁ $ sudo apt update

⦁ $ sudo apt install unzip
اکنون محتویات برنامه را از حالت فشرده خارج کرده و برای دسترسی آسانتر نام دیرکتوری باز شده را تغییر دهید:
⦁ $ unzip travellist.zip

⦁ $ mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo

به دیرکتوری travellist-demo بروید:
⦁ $ cd travellist-demo

در مرحله بعدی ، یک فایل پیکربندی .env برای تنظیم برنامه ایجاد خواهیم کرد.
مرحله 2 – تنظیم فایل .env برنامه
فایل های پیکربندی Laravel در پوشه ای به نام config ، در دیرکتوری اصلی برنامه قرار دارند. علاوه بر این ، از یک فایل .env برای تنظیم پیکربندی وابسته به محیط ، مانند اعتبارات و اطلاعاتی که ممکن است بین پایگاه ها متفاوت باشد ، استفاده می شود. این فایل در کنترل تجدید نظر گنجانده نشده است.
هشدار: فایل تنظیمات محیط شامل اطلاعات حساس در مورد سرور مجازی شما ، از جمله اطلاعات پایگاه داده و کلیدهای امنیتی است. به همین دلیل ، شما هرگز نباید این فایل را به صورت عمومی به اشتراک بگذارید.
مقادیر موجود در فایل .env بر مقادیر تعیین شده در فایل های پیکربندی معمولی واقع در فهرست پیکربندی ارجحیت دارند. هر نصب بر روی یک محیط جدید نیاز به یک فایل متناسب با محیط دارد تا مواردی از قبیل تنظیمات اتصال بانک اطلاعاتی ، گزینه های اشکال زدایی ، URL برنامه را از موارد دیگری که بسته به نوع محیطی که برنامه در آن اجرا میشود تغییر میکنند، متمایز نماید.
اکنون ما یک فایل .env جدید را برای سفارشی کردن گزینه های پیکربندی برای محیط توسعه ای که تنظیم می کنیم ایجاد خواهیم کرد. لاراول با یک فایل.env مثال همراه است که می توانیم آنرا کپی کنیم تا مورد خودمان را ایجاد کنیم:
⦁ $ cp .env.example .env

این فایل را با استفاده از نانو یا ویرایشگر متن مورد نظر خود باز کنید:
⦁ $ nano .env

فایل .env فعلی از برنامه نمایشی Travellist شامل تنظیماتی برای استفاده از یک پایگاه داده محلی MySQL ، با 127.0.0.1 به عنوان میزبان پایگاه داده است. ما باید متغیر DB_HOST را به روز کنیم تا به سرویس دیتابیس که در محیط Docker خود ایجاد خواهیم کرد اشاره کند. در این راهنما ، ما سرویس دیتابیس خود را db می نامیم. پیش بروید و مقدار ذکر شده DB_HOST را با نام سرویس بانک اطلاعات جایگزین کنید:
.env
APP_NAME=Travellist
APP_ENV=dev
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password

در صورت تمایل می توانید نام بانک اطلاعاتی ، نام کاربری و رمزعبور را نیز تغییر دهید. این متغیرها در مرحله بعدی استفاده می شود که در آن فایل docker-compose.yml را برای پیکربندی خدمات خود تنظیم خواهیم کرد.
هنگام ویرایش ، فایل را ذخیره کنید. اگر از nano استفاده کرده اید ، می توانید با فشار دادن Ctrl + x این کار را انجام دهید، سپس Y و Enter را برای تأیید فشار دهید.
مرحله 3 – تنظیم Dockerfile برنامه
اگرچه هر دو سرویس MySQL و Nginx ما مبتنی بر تصاویر پیش فرض به دست آمده از Docker Hub خواهد بود ، اما ما هنوز نیاز به ساختن یک تصویر دلخواه برای کانتینر برنامه داریم. ما برای آن یک Dockerfile جدید ایجاد خواهیم کرد.
تصویر travellist  ما بر اساس PHP: 7.4-fpm تصویر رسمی PHP از Docker Hub خواهد بود. در بالای آن محیط اصلی PHP-FPM ، چند ماژول PHP اضافی و ابزار مدیریت وابستگی کامپوزر را نصب خواهیم کرد.
همچنین یک کاربر جدید برای سیستم ایجاد خواهیم کرد. این کار برای اجرای دستورات artisan  و composer  هنگام تهیه برنامه ضروری است. تنظیم uid تضمین می کند که کاربر درون کانتینر دارای همان کاربری است که کاربر سیستم شما در دستگاه میزبان شما دارد ، جایی که running Docker را اجرا میکنید. به این ترتیب ، هر فایل ایجاد شده توسط این دستورات با مجوزهای صحیح در هاست تکرار می شود. این نکته همچنین بدان معنی است که شما می توانید از ویرایشگر کد مورد نظر خود در دستگاه میزبان استفاده کنید تا برنامه ای را که درون کانتینرها اجرا می شود توسعه دهید.
یک Dockerfile جدید ایجاد کنید:
⦁ $ nano Dockerfile

مطالب زیر را در Dockerfile خود کپی کنید:
Dockerfile
FROM php:7.4-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# Get latest Composer
COPY –from=composer:latest /usr/bin/composer /usr/bin/composer

# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www

USER $user

فراموش نکنید که فایل را پس از اتمام ذخیره کنید.
Dockerfile ما با تعریف تصویر پایه ای که ما استفاده می کنیم شروع می شود: php: 7.4-fpm.
پس از نصب بسته های سیستم و پسوندهای PHP ، ما با کپی کردن composer  قابل اجرا از آخرین تصویر رسمی آن روی تصویر برنامه کاربردی خود ، Composer را نصب می کنیم.
سپس کاربر جدید سیستم با استفاده از آرگومانهای user و uid که در ابتدای Dockerfile اعلام شد ، ایجاد و تنظیم می شود. این مقادیر توسط Docker Compose در زمان ساخت وارد می شوند.
در آخر ، dir پیش فرض کار را به عنوان / var / www تنظیم کرده و به کاربر تازه ایجاد شده تغییر می دهیم. این کار اطمینان حاصل می کند که شما به عنوان یک کاربر معمولی در ارتباط هستید ، و هنگام اجرای دستورات composer و artisan در کانتینر برنامه ، در فهرست صحیح قرار دارید.
مرحله چهارم – تنظیم فایلهای پیکربندی Nginx و رونوشت دیتابیس
هنگام ایجاد محیط های توسعه با Docker Compose ، اغلب لازم است فایل های پیکربندی یا شروع را با کانتینرهای سرویس به اشتراک بگذارید تا این سرویس ها را تنظیم یا به صورت خودکار راه اندازی کنید. این روش ایجاد تغییر در فایل های پیکربندی را برای تنظیم دقیق محیط خود در هنگام تهیه برنامه ، تسهیل می کند.
اکنون پوشه ای را با فایل هایی تنظیم خواهیم کرد که برای پیکربندی و شروع کانتینرهای سرویس ما استفاده می شود.
برای راه‌اندازی Nginx ، ما یک فایل travellist.conf را به اشتراک خواهیم گذاشت که نحوه ارائه برنامه را پیکربندی خواهد کرد. پوشه docker-compose / nginx را با دستور زیر ایجاد کنید:
فایل جدیدی به نام travellist.conf را در آن دیرکتوری باز کنید:
⦁ $ nano docker-compose/nginx/travellist.conf

پیکربندی Nginx زیر را در آن فایل کپی کنید:
docker-compose/nginx/travellist.conf

server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}

این فایل Nginx را برای گوش دادن به پورت 80 و استفاده از index.php به عنوان صفحه پیش فرض فهرست پیکربندی می کند. وroot مطالب را بر روی /var/www/public تنظیم می کند ، و سپس Nginx را برای استفاده از سرویس برنامه در پورت 9000 تنظیم می کند تا فایل های * .php را پردازش کند.
هنگام ویرایش ، فایل را ذخیره کنید و ببندید.
برای راه اندازی بانک اطلاعاتی MySQL ، ما یک پایگاه داده را به اشتراک می گذاریم که هنگام شروع کانتینر ، وارد می شود. این ویژگی ارائه شده توسط تصویر MySQL 5.7 است که ما از آن کانتینرها استفاده خواهیم کرد.
یک پوشه جدید برای فایل های شروع MySQL خود در داخل پوشه docker-compose ایجاد کنید:
⦁ $ mkdir docker-compose/mysql

یک فایل .sll جدید را باز کنید:
⦁ $ nano docker-compose/mysql/init_db.sql

رونوشت MySQL زیر بر اساس پایگاه داده ای است که ما در Laravel روی راهنمای LEMP خود تنظیم کرده ایم. این یک جدول جدید به نام places ایجاد می کند. سپس ، جدول را با مجموعه ای از مکان های نمونه جمع می کند.
کد زیر را به فایل اضافه کنید:
docker-compose/mysql/db_init.sql
DROP TABLE IF EXISTS `places`;

CREATE TABLE `places` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`visited` tinyint(1) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `places` (name, visited) VALUES (‘Berlin’,0),(‘Budapest’,0),(‘Cincinnati’,1),(‘Denver’,0),(‘He

جدول places  شامل سه فیلد است: id ، name و visited. قسمت visited ، فلگی است که برای شناسایی مکانهایی که هنوز to go هستند، استفاده می شود. در تغییر مکان های نمونه یا مکان های جدید آزادانه عمل کنید. پس از اتمام کار ، فایل را ذخیره کنید و ببندید.
ما تنظیمات Dockerfile برنامه و فایل های پیکربندی سرویس را به پایان رساندیم. در مرحله بعدی ، Docker Compose را تنظیم خواهیم کرد تا هنگام ایجاد خدمات ، از این فایل ها استفاده کنیم.
مرحله 5 – ایجاد یک محیط چند کانتینری با Docker Compose
Docker Compose به شما امکان می دهد محیطهای چند کانتینری را برای برنامه های در حال اجرا در Docker ایجاد کنید. با استفاده از تعاریف سرویس ، محیطهای کاملاً قابل تنظیم با چندین کانتینر را ایجاد می کند که می توانند شبکه ها و حجم داده ها را به اشتراک بگذارند. این امر امکان ادغام یکپارچه بین اجزای برنامه را فراهم می آورد.
برای تنظیم تعاریف خدمات ، ما یک فایل جدید با نام docker-compose.yml ایجاد خواهیم کرد. به طور معمول ، این فایل در ریشه پوشه برنامه قرار دارد و محیط کانتینر شده شما ، از جمله تصاویر پایه ای که برای ساخت کانتینرها خود استفاده خواهید کرد ، و نحوه تعامل سرویس های شما را تعریف می کند.
ما سه سرویس مختلف را در فایل docker-compose.yml خود تعریف خواهیم کرد: app ،db و nginx.
سرویس app براساس Dockerfile که قبلاً ایجاد کرده ایم ، تصویری به نام travellist ایجاد می کند. کانتینر تعریف شده توسط این سرویس ، سرور مجازی php-fpm را برای تجزیه کد PHP اجرا می کند و نتایج را به سرویس nginx ارسال می کند ، که روی یک کانتینر جداگانه اجرا می شود. سرویس mysql یک کانتینر تعریف می کند که سرور مجازی MySQL 5.7 را راه اندازی می کند. خدمات ما شبکه پلی با نام travellist را به اشتراک می گذارند.
فایل های برنامه هم در app و هم خدمات nginx از طریق bind mounts (نصب های اتصالی) همگام می شوند. bind mounts در محیط های توسعه مفید هستند زیرا امکان همگام سازی دو طرفه بین دستگاه میزبان و کانتینرها را فراهم می کنند.
یک فایل docker-compose.yml جدید در ریشه پوشه برنامه ایجاد کنید:
⦁ $ nano docker-compose.yml

یک فایل معمولی docker-compose.yml با تعریف نسخه شروع می شود و به دنبال آن یک گره خدمات قرار می گیرد که تحت آن همه خدمات تعریف می شوند. شبکه های اشتراکی معمولاً در پایین آن فایل تعریف می شوند.
برای شروع ، این کد boilerplate را در فایل docker-compose.yml خود کپی کنید:
docker-compose.yml
version: “3.7”
services:

networks:
travellist:
driver: bridge

اکنون گره خدمات را ویرایش خواهیم کرد تا خدمات app ، db و nginx را شامل شود.
سرویس app
سرویس app کانتینری به نام travellist-app را تنظیم میکند. این تصویر جدید Docker را بر اساس Dockerfile که در همان مسیر فایل docker-compose.yml قرار دارد ، می سازد. تصویر جدید به صورت محلی تحت عنوان travellist ذخیره می شود.
حتی اگر ریشه سند به عنوان برنامه در کانتینر nginx قرار داشته باشد ، ما به فایل های برنامه نیز در جایی داخل کانتینر برنامه نیاز داریم ، بنابراین می توانیم وظایف خط فرمان را با ابزار Laravel Artisan اجرا کنیم.
تعریف خدمات زیر را در زیر گره خدمات خود ، درون فایل docker-compose.yml کپی کنید:
docker-compose.yml
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
– ./:/var/www
networks:
– travellist

این تنظیمات موارد زیر را انجام می دهد:
⦁ Build: این پیکربندی به Docker Compose می گوید یک تصویر محلی برای سرویس برنامه ، با استفاده از مسیر مشخص شده (محتوا) و Dockerfile برای دستورالعمل ها بسازد. آرگومان های user و uid برای سفارشی سازی دستورات ایجاد کاربر در زمان ساخت به Dockerfile تزریق می شوند.
⦁ Image: نامی که برای تصویر ساخته شده استفاده خواهد شد.
⦁ container_name: نام کانتینر را برای این سرویس تنظیم می کند.
⦁ Restart: همیشه راه اندازی مجدد میکند ، مگر اینکه سرویس متوقف شود.
⦁ working_dir: دایرکتوری پیش فرض این سرویس را به عنوان / var / www تنظیم می کند.
⦁ Volumes: یک والیوم مشترک ایجاد می کند که محتویات موجود از دایرکتوری فعلی را به / var / www داخل کانتینر هماهنگ سازی می کند. توجه کنید که این، ریشه سند شما نیست ، زیرا در کانتینر nginx زندگی می کند.
⦁ networks: برای استفاده از شبکه ای به نام Travellist ، این سرویس را تنظیم کنید.
سرویس db
سرویس db از تصویر پیش ساخته MySQL 5.7 از Docker Hub استفاده می کند. از آنجا که Docker Compose به طور خودکار فایلهای متغیر .env را که در همان دیرکتوری فایل docker-compose.yml قرار دارد بارگیری می کند ، می توانیم تنظیمات پایگاه داده خود را از فایل Laravel .env که در مرحله قبلی ایجاد کردیم ، بدست آوریم.
تعریف خدمات زیر را درست بعد از سرویس app در گره خدمات خود وارد کنید:
docker-compose.yml
db:
image: mysql:5.7
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
– ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
– travellist

این تنظیمات موارد زیر را انجام می دهد:
⦁ Image:تصویر Docker را که باید برای این کانتینر استفاده شود ، تعریف می کند. در این حالت ، ما از تصویر MySQL 5.7 Docker Hub استفاده می کنیم.
⦁ container_name:نام کانتینر را برای این سرویس تنظیم می کند: travellist-db.
⦁ restart: همیشه این سرویس را مجدداً راه اندازی کنید ، مگر اینکه صریحاً متوقف شده باشد.
⦁ environment: متغیرهای محیط را در کانتینر جدید تعریف می کند. ما برای تنظیم سرویس MySQL از مقادیر به دست آمده از فایل Laravel .env استفاده می کنیم که به طور خودکار یک پایگاه داده جدید و کاربر را بر اساس متغیرهای محیط ارائه شده ایجاد می کند.
⦁ Volumes:یک حجم برای به اشتراک گذاشتن یک پایگاه داده dsql ایجاد می کند که برای شروع بانک اطلاعاتی برنامه کاربردی خواهد بود. تصویر MySQL به طور خودکار فایل های .ql قرار داده شده در فهرست /docker-entrypoint-initdb.d را درون کانتینر وارد می کند.
⦁ networks: برای استفاده از شبکه ای به نام Travellist ، این سرویس را تنظیم کنید.
سرویس nginx
سرویس nginx از یک تصویر پیش ساخته Nginx در بالای Alpine ، توزیع لینوکس سبک استفاده می کند. کانتینری به نام travellist-nginx ایجاد می کند و از تعریف پورت ها برای ایجاد تغییر مسیر از پورت 8000 روی سیستم میزبان برای پورت 80 درون کانتینر استفاده می کند.
تعریف خدمات زیر را در گره خدمات خود ، درست بعد از سرویس db وارد کنید:
این تنظیمات موارد زیر را انجام می دهد:
docker-compose.yml
nginx:
image: nginx:1.17-alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
– 8000:80
volumes:
– ./:/var/www
– ./docker-compose/nginx:/etc/nginx/conf.d
networks:
– travellist

⦁ Image: تصویر Docker را که باید برای این کانتینر استفاده شود ، تعریف می کند. در این حالت ، ما از تصویر Alpine Nginx 1.17 استفاده می کنیم.
⦁ container_name: نام کانتینر را برای این سرویس تنظیم می کند: travellist-nginx
⦁ restart: همیشه این سرویس را مجدداً راه اندازی کنید ، مگر اینکه صریحاً متوقف شده باشد.
⦁ ports: تغییر مسیر پورت را تنظیم می کند که امکان دسترسی خارجی از طریق پورت 8000 به سرور مجازی وب را که درگاه 80 در داخل کانتینر کار می کند ، فراهم می کند.
⦁ volumes: دو والیوم مشترک ایجاد می کند. اولی همگام سازی محتوا از فهرست فعلی با / var / www داخل کانتینر را انجام میدهد. به این ترتیب ، وقتی تغییرات محلی را در فایل های برنامه اعمال می کنید ، به سرعت در برنامه ارائه شده توسط Nginx در داخل کانتینر منعکس می شوند. دومی اطمینان حاصل خواهد کرد که فایل پیکربندی Nginx ، واقع در docker-compose / nginx / travellist.conf ، در پوشه تنظیمات Nginx کانتینر کپی شده است.
⦁ networks: برای استفاده از شبکه ای به نام Travellist ، این سرویس را تنظیم کنید.
فایل docker-compose.yml تکمیل شده
فایل docker-compose.yml به پایان رسیده این گونه خواهد بود:
docker-compose.yml
version: “3.7”
services:
app:
build:
args:
user: sammy
uid: 1000
context: ./
dockerfile: Dockerfile
image: travellist
container_name: travellist-app
restart: unless-stopped
working_dir: /var/www/
volumes:
– ./:/var/www
networks:
– travellist

db:
image: mysql:5.7
container_name: travellist-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
– ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
– travellist

nginx:
image: nginx:alpine
container_name: travellist-nginx
restart: unless-stopped
ports:
– 8000:80
volumes:
– ./:/var/www
– ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
– travellist

networks:
travellist:
driver: bridge

اطمینان حاصل کنید که فایل را هنگام انجام کار ذخیره کنید.
مرحله 6 – اجرای برنامه با Docker Compose
اکنون برای ایجاد تصویر برنامه و اجرای سرویس هایی که در مجموعه خود مشخص کرده ایم ، از دستورات docker-compose استفاده خواهیم کرد.
تصویر app را با دستور زیر بسازید:
⦁ $ docker-compose build app

این دستور ممکن است چند دقیقه طول بکشد. خروجی مشابه این را مشاهده خواهید کرد:
Output
Building app
Step 1/11 : FROM php:7.4-fpm
—> fa37bd6db22a
Step 2/11 : ARG user
—> Running in f71eb33b7459
Removing intermediate container f71eb33b7459
—> 533c30216f34
Step 3/11 : ARG uid
—> Running in 60d2d2a84cda
Removing intermediate container 60d2d2a84cda
—> 497fbf904605
Step 4/11 : RUN apt-get update && apt-get install -y git curl libpng-dev libonig-dev …
Step 7/11 : COPY –from=composer:latest /usr/bin/composer /usr/bin/composer
—> e499f74896e3
Step 8/11 : RUN useradd -G www-data,root -u $uid -d /home/$user $user
—> Running in 232ef9c7dbd1
Removing intermediate container 232ef9c7dbd1
—> 870fa3220ffa
Step 9/11 : RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user
—> Running in 7ca8c0cb7f09
Removing intermediate container 7ca8c0cb7f09
—> 3d2ef9519a8e
Step 10/11 : WORKDIR /var/www
—> Running in 4a964f91edfa
Removing intermediate container 4a964f91edfa
—> 00ada639da21
Step 11/11 : USER $user
—> Running in 9f8e874fede9
Removing intermediate container 9f8e874fede9
—> fe176ff4702b

Successfully built fe176ff4702b
Successfully tagged travellist:latest

پس از اتمام ساخت ، می توانید محیط را در حالت پس زمینه اجرا کنید:
⦁ $ docker-compose up -d
⦁ Output
⦁ Creating travellist-db … done
⦁ Creating travellist-app … done
⦁ Creating travellist-nginx … done

این کار کانتینرهای شما را در پس زمینه اجرا می کند. برای نشان دادن اطلاعات در مورد وضعیت خدمات فعال خود ، این دستور را اجرا کنید:
⦁ $ docker-compose ps
خروجی مانند این را خواهید دید:
Output
Name Command State Ports
——————————————————————————-
travellist-app docker-php-entrypoint php-fpm Up 9000/tcp
travellist-db docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
travellist-nginx nginx -g daemon off; Up 0.0.0.0:8000->80/tcp

اکنون محیط شما در حال اجرا است ، اما ما هنوز باید دستورات زوجی را اجرا کنیم تا تنظیم برنامه به پایان برسد. برای اجرای دستورات موجود در کانتینرها سرویس مانند ls-l می توانید از دستور docker-compose برای نمایش اطلاعات در مورد فایل ها در دیرکتوری برنامه استفاده کنید:
⦁ $ docker-compose exec app ls -l
⦁ Output
⦁ total 256
⦁ -rw-rw-r– 1 sammy 1001 738 Jan 15 16:46 Dockerfile
⦁ -rw-rw-r– 1 sammy 1001 101 Jan 7 08:05 README.md
⦁ drwxrwxr-x 6 sammy 1001 4096 Jan 7 08:05 app
⦁ -rwxr-xr-x 1 sammy 1001 1686 Jan 7 08:05 artisan
⦁ drwxrwxr-x 3 sammy 1001 4096 Jan 7 08:05 bootstrap
⦁ -rw-rw-r– 1 sammy 1001 1501 Jan 7 08:05 composer.json
⦁ -rw-rw-r– 1 sammy 1001 179071 Jan 7 08:05 composer.lock
⦁ drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 config
⦁ drwxrwxr-x 5 sammy 1001 4096 Jan 7 08:05 database
⦁ drwxrwxr-x 4 sammy 1001 4096 Jan 15 16:46 docker-compose
⦁ -rw-rw-r– 1 sammy 1001 1015 Jan 15 16:45 docker-compose.yml
⦁ -rw-rw-r– 1 sammy 1001 1013 Jan 7 08:05 package.json
⦁ -rw-rw-r– 1 sammy 1001 1405 Jan 7 08:05 phpunit.xml
⦁ drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 public
⦁ -rw-rw-r– 1 sammy 1001 273 Jan 7 08:05 readme.md
⦁ drwxrwxr-x 6 sammy 1001 4096 Jan 7 08:05 resources
⦁ drwxrwxr-x 2 sammy 1001 4096 Jan 7 08:05 routes
⦁ -rw-rw-r– 1 sammy 1001 563 Jan 7 08:05 server.php
⦁ drwxrwxr-x 5 sammy 1001 4096 Jan 7 08:05 storage
⦁ drwxrwxr-x 4 sammy 1001 4096 Jan 7 08:05 tests
⦁ -rw-rw-r– 1 sammy 1001 538 Jan 7 08:05 webpack.mix.js

اکنون composer install را برای نصب متعلقات برنامه اجرا میکنیم:
⦁ $ docker-compose exec app composer install

خروجی مانند این را خواهید دید:
Output
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
– Installing doctrine/inflector (1.3.1): Downloading (100%)
– Installing doctrine/lexer (1.2.0): Downloading (100%)
– Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)
– Installing erusev/parsedown (1.7.4): Downloading (100%)
– Installing symfony/polyfill-ctype (v1.13.1): Downloading (100%)
– Installing phpoption/phpoption (1.7.2): Downloading (100%)
– Installing vlucas/phpdotenv (v3.6.0): Downloading (100%)
– Installing symfony/css-selector (v5.0.2): Downloading (100%)

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover –ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

آخرین کاری که قبل از تست برنامه باید انجام دهیم تولید یک کلید برنامه منحصر به فرد با ابزار خط فرمان artisan Laravel است. این کلید برای رمزگذاری بخش های کاربر و سایر داده های حساس استفاده می شود:
⦁ $ docker-compose exec app php artisan key:generate

Output
Application key set successfully.

اکنون به مرورگر خود بروید و به نام دامنه یا آدرس IP سرور مجازی خود در پورت 8000 دسترسی پیدا کنید:
http://server_domain_or_IP:8000

صفحه ای را به این شکل مشاهده خواهید کرد:

می توانید از دستور logs برای بررسی گزارش های ایجاد شده توسط سرویس های خود استفاده کنید:
⦁ $ docker-compose logs nginx

Attaching to travellist-nginx
travellist-nginx | 192.168.160.1 – – [23/Jan/2020:13:57:25 +0000] “GET / HTTP/1.1” 200 626 “-” “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”
travellist-nginx | 192.168.160.1 – – [23/Jan/2020:13:57:26 +0000] “GET /favicon.ico HTTP/1.1” 200 0 “http://localhost:8000/” “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”
travellist-nginx | 192.168.160.1 – – [23/Jan/2020:13:57:42 +0000] “GET / HTTP/1.1” 200 626 “-” “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36”

اگر می خواهید در هنگام حفظ وضعیت کلیه خدمات آن ، محیط Docker Compose را متوقف کنید ، این دستور را اجرا کنید:
⦁ $ docker-compose pause
Output
Pausing travellist-db … done
Pausing travellist-nginx … done
Pausing travellist-app … done
برای ادامه دوباره برنامه:
⦁ $ docker-compose unpause
Output
Unpausing travellist-app … done
Unpausing travellist-nginx … done
Unpausing travellist-db … done

برای خاموش کردن محیط Docker Compose و حذف همه کانتینرها ، شبکه ها و والیوم های آن ، این دستور را اجرا کنید:
⦁ $ docker-compose down
Output
Stopping travellist-nginx … done
Stopping travellist-db … done
Stopping travellist-app … done
Removing travellist-nginx … done
Removing travellist-db … done
Removing travellist-app … done
Removing network travellist-laravel-demo_travellist

برای مشاهده کلیه دستورات Docker Compose ، لطفاً مرجع خط فرمان Docker Compose را بررسی کنید.
نتیجه
در این راهنما ، ما یک محیط Docker با سه کانتینر را با استفاده از Docker Compose تنظیم کرده ایم تا زیرساخت های خود را در یک فایل YAML تعریف کنیم.
از این مرحله به بعد ، می توانید بدون نیاز به نصب و راه اندازی یک سرور مجازی وب محلی برای توسعه و آزمایش بر روی برنامه Laravel خود کار کنید. علاوه بر این ، شما با یک محیط یکبار مصرف که می تواند به راحتی تکثیر و توزیع شود ، کار می کنید ، که می تواند در هنگام تهیه برنامه شما و همچنین هنگام حرکت به سمت یک محیط تولید ، کمک کننده باشد.

 

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

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع)

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظیم كرد (شروع سریع)

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی خود استفاده کرد

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم كرد

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی هلند – خرید وی پی اس – خرید vps هلند – خرید vps فرانسه

برچسب‌ها:,