Docker for everything! (web-dev)

یه disclaimer داشته باشم اول بحث که من این پست رو فقط بر اساس دانشی که نسبت به لینوکس و داکر داشتم (به همراه مقدار زیادی سرچ و کمک از دوستان)، نوشتم و از اصولی بودن هیچکدوم از مراحل مطمئن نیستم. (دواپس نیستم :) ). اگه برای هرکدوم از بخش ها فک میکنید ایده بهتر و یا اصولی تری دارید حتما باهام درمیون بزارید.و البته اینم بگم که ابزار ها و سرویس هایی که اینجا داکرایز کردمشون اینان: (خودم لاراول کار میکنم)mysql (mariadb v10.3)phpmyadmin v5redis v6.2php v7.4 and composer v2node & npm in all versions available on dockerhubخود لاراول هم برای داکرایز کردن، پکیچی به اسم sail داره که خیلی تمیز کار میکنه ولی من اون پکیج رو زیادی سنگین دیدم. مثلا برای هر پروژه یه کانتینر میسازه هم برای خودش که serveش کنه هم برای دیتابیسش و بقیه سرویساش. شاید شما با منطق sail بیشتر کنار بیاید مهم اینه که کار انجام بشه و منم به روشی که توش راحت تر بودم انجامش دادم.بریم سر اصل مطلب، مسئله ای که چند وقته درگیرشم -- جابجایی بین سیستم های مختلف برای develop. سه تا زیر مسئله داشتم برای این کار: IDE -> solution: VSCode syncSource code -> solution: gitDev environment -> possible solution: dockerایده از اینجا شروع شد که آیا میتونم هیچ چیز به جز داکر نصب نکنم و بتونم به کارم ادامه بدم؟! پس شروع کردم به تست روش های مختلف. برای توضیحات زیر یه ریپو ساختم و فایل های زیر داخلش هست.اولین چیزی که آوردم روی داکر دیتابیسام بود. سرویسایی که لازم داشتم اینا بود: (mysql, phpmyadmin, redis). یه فایل docker-compose برای این کار نوشتم. این فایل. با یه docker-compose up زدن سه تا container میاد بالا که توضیحات هر کدوم رو توی فایل به صورت کامنت نوشتم.version: &quot3.7&quot networks: mynet: volumes: mariadb_data: phpmyadmin_data: services: mariadb: image: mariadb:10.3 ports: - 3306:3306 # bind port just in case we need to access it from our machine environment: MYSQL_ROOT_PASSWORD: password # mysql's root user password volumes: - mariadb_data:/var/lib/mysql/ #- ./conf/my.cnf:/etc/mysql/conf.d/my-custom.cnf # if you want to do custom config of your mariadb restart: always # makes sure that the container starts on daemon start and restarts on failures networks: - mynet # put containers on the same network in order to make them able to see each other phpmyadmin: image: phpmyadmin:5 environment: PMA_HOST: mariadb # introduce myqsl/mariadb host to phpmyadmin ports: - 8080:80 # port to access phpmyadmin from our machine volumes: - phpmyadmin_data:/var/www/html/ restart: always networks: - mynet depends_on: - mariadb redis: image: redis:6.2-alpine ports: - 6379:6379 restart: always networks: - mynetبعد از اینا رفتم سراغ (php, composer, node, npm). برای حل این مسئله اومدم یه سری alias برای شل نوشتم که توی این فایل هست. توضیحات رو هم سعی کردم تا جایی که میشه به صورت کامنت بزارم.# You can change version of nodejs or add another version here. Check dockerhub for other available versions alias node14='docker run -it --rm -e HOME:$HOME -v $HOME:$HOME -v `pwd`:/usr/app/ -w /usr/app node:14-slim node' alias npm14='docker run -it --rm -e HOME:$HOME -v $HOME:$HOME -v `pwd`:/usr/app/ -w /usr/app node:14-slim npm' alias composer2='docker run --rm -it -v `pwd`:/app -v ${COMPOSER_HOME:-$HOME/.composer}:tmp composer:2' alias php74='docker run -it --rm -v `pwd`:/usr/app/ -w /usr/app amirsarfar/php:74-cli' # Just in case you need php-cli itself alias pas74='docker run -it --rm -p 8787:8787 --network=&quotdb_tools_mynet&quot -v `pwd`:/usr/app/ -w /usr/app amirsarfar/php:74-cli php artisan serve --host=0.0.0.0 --port=8787' # php artisan serve (php7.4) # In all these docker aliases be sure to check ports and volumes that you need for a command. It may differ from mineتوی ست کردن alias ها خیلی به network و volume های توی دستور docker run دقت کنید چون ممکنه بسته به شرایطتون لازم باشه اونا رو تغییر بدین.بعد از اینکه این alias ها رو ست کردین خیلی راحت میتونین توی پروژه تون بدون اینکه nodejs روی سیستمتون نصب شده باشه ازش استفاده کنید. مثلا میتونید همین npm14 install رو بزنید و پکیج هاتون نصب بشن.بعد از انجام اینا به ذهنم رسید موضوع و مطلب خوبیه برای اولین نوشته توی ویرگول پس با شما به اشتراک گذاشتمش.امیدوارم به کارتون بیاد