l3ftoverz
@l3ftoverz
Туды сюды

На основе какого дистрибутива Linux работает PHP-FPM в Docker? И как не иметь в production среде всякий мусор от сборки PHP расширений?

В документации хаба не нашёл информации, зашёл в контейнер:
uname -a
Linux 60022484c077 4.15.0-55-generic #60-Ubuntu SMP Tue Jul 2 18:22:20 UTC 2019 x86_64 GNU/Linux
Делаю следом:
cat /etc/issue.net
Debian GNU/Linux 10


И чёт я так и не понял, дебиан там или убунта.
Вопрос возник из-за того, что мне нужен пакет php7.2-dev, но его никак найти apt не может, хотя он есть в репах убунты.

Второй вопрос: как быть с production средой.
Мне для PHP контейнера нужно собрать 2 расширения: php-psr и Phalcon.
Для сборки этих расширений приходится в контейнере ставить зависимости для сборки: gcc, make, php-dev, etc, ладно бы они были в development среде, но вот в production они мне кажутся лишними.

В связи с чем вопросы:
1. Нормально ли сорить зависимостями в production среде?
2. Если нет - что с ними делать? Собирать PHP расширения в отдельном контейнере? Или достаточно просто удалить пакеты после сборки?

Dockerfile

FROM php:7.2-fpm
MAINTAINER d0kur0

RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        gcc \
        make \
        automake \
        autoconf \
        php7.2-dev \
        libjpeg62-turbo-dev \
        git \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv pdo_mysql \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

# Build PHP-PSR
RUN git clone https://github.com/jbboehr/php-psr.git \
    && ( \
        cd php-psr \
        && phpize \
        && ./configure \
        && make -j "$(nproc)" \
        && make install \
    ) \
    && rm -r php-psr \
    && docker-php-ext-enable psr

ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini
WORKDIR /var/server

CMD ["php-fpm"]

  • Вопрос задан
  • 555 просмотров
Решения вопроса 3
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
На основе какого дистрибутива


https://github.com/docker-library/docs/blob/master...

Копайте исходники
FROM debian:buster-slim

И т.д. пока не найдете то что вы хотите(непонятно что вы хотите найти)

И чёт я так и не понял, дебиан там или убунта.

То что в докере работает за систему можно вообще не принимать, там вполне себе может быть всё вырезано кроме того же php.

Все пакеты собираются под личные нужны в ваш Dockerfile
https://phpdocker.io/generator
Выглядит как-то так https://github.com/wpengine/php-docker/blob/master...

1. Нормально ли сорить зависимостями в production среде?

это надо постараться чтоб прям намусорить одним пакетом.

2. Если нет - что с ними делать? Собирать PHP расширения в отдельном контейнере? Или достаточно просто удалить пакеты после сборки?

собрать отдельный контейнер для разработки если очень хочется именно в докере разрабатывать что-то, а не просто на локальном сервере по старинке с любыми расширениями.
Ответ написан
@ProFfeSsoRr
Сис.админ по Linux
uname вызывать в контейнере нет смысла - он показывает инфу ядра, а ядро - в хосте. Так что этой командой ты узнаешь немного про хост, но ничего про свой контейнер. Чтобы узнать "на базе чего" открой исходный Dockerfile и посмотри строку FROM.

Зачем собирать что-то прямо на продакшене? Должен быть какой-то инструмент, который из исходников в репозитории получает готовый контейнер для деплоя на прод, и в этом готовом контейнере уже нет никакого мусора. Допустим Gitlab, Jenkins, Bamboo... много их.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@caballero
в продакшен среде мусором является прежде всего сам докер
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
20 авг. 2019, в 12:31
500 руб./в час
20 авг. 2019, в 11:47
3000 руб./за проект
20 авг. 2019, в 11:35
3000 руб./за проект