Оптимизация Docker-образов

Оптимизация Docker-образов для production через использование кеширования и мультистадийный билдинг.

Скрытый контент
Комментарии (28)
Альберт

Подскажите как быть к примеру с папкой изображений, если это интернет-магазин, не будешь же ее в образ копировать.

Ответить
Дмитрий Елисеев

Использовать для изображений отдельный файловый хостинг и загружать на него файлы из PHP по S3 или FTP.

Ответить
Arunas

в prod режиме как изменить параметры в файле параметров (напр.: params.php), где виде масива, хранится параметры: 'limitRowTable' => 20, 'limitRowSearchTable' => 35, и т.д. ? Каждый раз передеплоит сайт ?

Ответить
Дмитрий Елисеев

Да, все изменения через передеплой.

Ответить
Arunas

а где лудшее тогда хранит таких параметров для многократного использования?

Ответить
Дмитрий Елисеев

Часть можно хранить в переменных окружения.

Ответить
Arunas

у Вас на локалке стоит Ubuntu 18 или Debian.? (никак не получается make site error: ERROR! The file hosts.yml is marked as executable, but failed to execute correctly. If this is not supposed to be an executable script, correct this with chmod -x hosts.yml. ERROR! problem running /var/www/projects/auction/provisioning/hosts.yml --list ([Errno 8] Exec format error) ERROR! hosts.yml:6: Expected key=value host variable assignment, got: ssh )

Ответить
Дмитрий Елисеев

На локалке Ubuntu.

Ответить
Arunas

если у меня Ubuntu 16.04.6, то ansible-playbook будет ли коректно действовать?

Ответить
Дмитрий Елисеев

Утилита популярная, так что везде должна работать.

Ответить
Arunas

а будет чат (с centrifugo или под.)?

Ответить
Дмитрий Елисеев

Будут уведомления с Centrifugo.

Ответить
Arunas

:)

Ответить
Arunas

Наконец, сегодня деплоил проект https://demo-auction.skucai.com

Деплой заработал с исключением: для docker login задействовало 2 параметра - Username и Password, а в provisioning/docker-login.yml указанно 3: Registry, Username, Password. (В хостинге делал напрямую docker login). Почему не сработало make docker-login?

Ответить
Ruslan

Я еще не дошел до полного деплоя, не могли бы вы добавить в ДНС www поддомен? Мне кажется, что в скрипте сербота должен быть www поддомен для получения сертификата.

Ответить
Sergei

Т.е. я так понял, что бы сделали образ builder, де факто проинсталлированный композер с вендором, просто чтобы второй + n раз не скачивать/устанавливать?

Ответить
Дмитрий Елисеев

Да, сделали чтобы собирать чистовые образы легковесными без лишнего мусора.

Ответить
Arunas

в каком образе, в каком месте (при быльде для прода) собырается-копируется каталог api/src? Напр. api/public копируется в api/docker/production/nginx/Dockerfile (стр.: COPY ./public ./public), а где есть (COPY ./crc ./src) ни где ненашёл :(...

Ответить
Дмитрий

Какой сервер нужен для работы проекта? Я заказал на vscale самый дешевый за 200 руб. в месяц на убунте. Но похоже он не вывозит. При поднятии контейнеров пишет Killed и докер демон полностью отрубается.

Ответить
Дмитрий

Удалось поднять 3 контейнера на продакшн: gateway, frontend, registry. Реестр контейнеров поднял на этом же сервере заранее, запушил туда свои контейнеры и переподнял вот эти три. Не понятно сейчас с сервером что делать, я вроде видел что у Дмитрия тоже за 200 р. сервер, но на Debian. Перезаказать на Debian?

Ответить
Дмитрий Елисеев

У нас пока Debian за 200. Со временем потребуется наращивание мощности или числа виртуалок для добавления прочего софта.

Чтобы процессы не отваливались из-за нехватки памяти в пиках можно добавить файл подкачки:

dd if=/dev/zero of=/swap bs=1M count=1024
mkswap /swap
swapon /swap
echo '/swap none swap sw 0 0' | tee -a /etc/fstab
Ответить
Дмитрий

Применил. Заработало! Текущий проект поднялся!

Ответить
Олег

Дмитрий, а разве  OPCache не идет по умолчанию в php? Из документации: Это расширение доступно по умолчанию с PHP 5.5.0

Или докер образ alpine его не содержит?

Ответить
Дмитрий Елисеев

В образах его по умолчанию нет. Список встроенных можно вывести командой:

docker run --rm php:7.4-cli-alpine php -m
Ответить
Максим

Огромный минус - ссылка на гитхаб под каждым видео ведёт на некий финальный результат. Полностью не соответствует тому, что происходит на видео. Почему бы не бранчевать результат работы каждого выпуска? В том же мастере хранить актуальный-финальный результат на какой-то момент времени.

Ответить
Дмитрий Елисеев

Ветки здесь не подойдут, так как все коммиты идут друг за другом. Только можно разметить тэгами.

Без разметки неудобно только при просмотре на GitHub или в консоли. Но если использовать любой GUI или пользоваться вкладкой Git/Log в PHPStorm, то смотреть коммиты и переключаться будет удобнее.

Ответить
Максим

Может не совсем корректно описал, мы немного о разном. Предложение было такое: итогом работы в рамках конкретного урока является бранч, а мастер, например, финальный результат. И тут неважно, как были сделаный коммиты, пусть они даже были засквошены, главное, что в бранче лежит результат, достигнутый в рамках урока, который можно скопировать для опытов. Сейчас очень неудобно копаться в истории гита, даже в гуи.

Ответить
Дмитрий Елисеев

Я и пишу, что от бранчей здесь не больше пользы, как от тегов. На тег также мождо сделать checkout.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий