LINUX.ORG.RU

Использовал webdevops/php-nginx – удобная конфигурация через переменные окружения. Отделять вебсервер от php-fpm не вижу большого смысла, пусть будет одним контейнером:

FROM webdevops/php-nginx:5.6

# тут еще надо установить Oracle Instant Client SDK
RUN docker-php-ext-install pdo_oci 
MaZy ★★★★★
()
Ответ на: комментарий от MaZy

Отделять вебсервер от php-fpm не вижу большого смысла

На каждую веб-приложуху по серверу?

Версию php нужно 5.6

https://hub.docker.com/_/php?tab=tags&page=1&ordering=-last_updated

Предлагаю официальный образ и отдельным контейнером nginx.

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

На каждую веб-приложуху по серверу?

универсальное решение, можно использовать traefik, минусов не вижу

в K8s для ingress-nginx можно напрямую использовать php-fpm указав:

nginx.ingress.kubernetes.io/backend-protocol: "FCGI"

тогда веб-сервер внутри и правда не нужен

Предлагаю официальный образ и отдельным контейнером nginx.

конфигурировать конфигами придется, а так норм

MaZy ★★★★★
()
Ответ на: комментарий от vvn_black

А какой тег официального образа нужно использовать? 5.6-fpm Заглянул туда, там Debian Stretch, в котором php установлен не из репозитория, а просто скопирован засунут в /usr/local, а в репозитории версия - 7.0. Чтобы установить pdo_oci при помощи pecl нужно дополнительные пакеты, а у них версии не те, у меня за 2 дня так и не получилось pdo_oci собрать в этом контейнере.

sunny1983 ★★★★★
() автор топика

Честно говоря я вообще не знаю как правильно готовить docker-контейнеры. 1 раз это делал для ruby-приложения, но там совсем другое было.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

ты можешь pdo_oci собрать через multi-stage docker и подложить его в контейнер с 5.6-fpm. На выходе получить контейнер, в котором только собранные модули и без всякого мусора.

v9lij ★★★★★
()
Ответ на: комментарий от sunny1983

Оракловский клиент установлен? Что docker-php-ext-configure pdo_oci говорит?

amm
()
Ответ на: комментарий от v9lij

Я беру php:5.6-fpm, вношу изменения, потом комичу, чтобы получить новый образ, а потом уже запускаю контейнер из этого образа, так?

Кстати никак не пойму, вот пробрасывать порты можно опцией -p, а как удалять проброс портов из образа?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

Кстати никак не пойму, вот пробрасывать порты можно опцией -p, а как удалять проброс портов из образа?

в образе нет проброса портов. Порты пробрасываются в контейнере (это другая сущность).

Я беру php:5.6-fpm, вношу изменения, потом комичу, чтобы получить новый образ, а потом уже запускаю контейнер из этого образа, так?

В общем - да. Другой вопрос как ты это организовываешь. Идеально, если ты собираешь всё, что надо отдельно, а потом просто подкладываешь в контейнер и пушишь его (то есть берешь основной контейнер как FROM, далее через ADD/COPY докладываешь нужные тебе артефакты, потом пушишь и используешь уже запушенный тобой контейнер).

v9lij ★★★★★
()
Ответ на: комментарий от v9lij

В контейнере, который я запустил из образа проброшен порт 9000, я создал на его основе новый образ, но он унаследовал проброс 9000 порта. Как это убрать? А пушить образ на докерхаб мне ведь совсем не обязательно, если я собираюсь его использовать для себя, правильно?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

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

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

По поводу проброса портов, смотри в чем дело - сам образ ничего не знает про порты. Да, у него есть инструкция EXPOSE, но она уже очень давно чисто информативная и ни к чему не обязывает сам докер. Поэтому сам образ никак не влияет на порты. Другой вопрос - это сам контейнер. Он при запуске получает инструкцию на проброс порта (если через cmd, то ключ -p) и пробрасывает порты как ты укажешь. Есть еще финт, что можно отказаться от сети докера и использовать хостовую сеть --net=host, тогда там вообще нет никаких форвардов трафика, все порты, что есть внутри софтов контейнера становятся видны и на хосте.

v9lij ★★★★★
()
28 января 2022 г.
Ответ на: комментарий от v9lij

На днях к админском паблике кинули хороший видос по docker https://www.youtube.com/watch?v=QF4ZF857m44 Посмотрел - многое для себя узнал, теперь я во всяком случае знаю зачем нужен Dockerfile и как его готовить.

А вот как сделать то, что ты посоветовал «pdo_oci собрать через multi-stage docker и подложить его в контейнер с 5.6-fpm» я до сих пор не представляю.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

вот быстро набросал драфт

FROM php:8.1 as building

# Install packages
RUN apt-get update && apt-get install -y unzip libaio1

ENV INSTANTCLIENT_BASIC_VERSION x64-21.5.0.0.0dbru
ENV INSTANTCLIENT_SDK_VERSION x64-21.5.0.0.0dbru

# Oracle instantclient
ADD https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-basic-linux.${INSTANTCLIENT_BASIC_VERSION}.zip /tmp/
ADD https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-sdk-linux.${INSTANTCLIENT_SDK_VERSION}.zip /tmp/
RUN unzip /tmp/instantclient-basic-linux.${INSTANTCLIENT_BASIC_VERSION}.zip -d /usr/local/
RUN unzip /tmp/instantclient-sdk-linux.${INSTANTCLIENT_SDK_VERSION}.zip -d /usr/local/
RUN mv /usr/local/instantclient_21_5 /usr/local/instantclient

ENV LD_LIBRARY_PATH=/usr/local/instantclient

RUN docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr/local/instantclient
RUN docker-php-ext-install pdo_oci

FROM php:8.1
COPY --from=building ПУТЬ_К_pdo_oci.so ПУТЬ_ГДЕ_ЛЕЖАТ_СОШНИКИ_ДЛЯ_PHP

Этот докерфайл не соберется, там надо доразобраться почему сборка pdo_oci падает на ld, но это не проблема должна быть. Ну и так же тебе надо под 5.6, то есть придется подставить правильные версии для sdk, потому что указанная версия не работает на 5.6

По драфту видно, что вначале у тебя работает билд для сборки pdo_oci, устанавливая для этого все зависимости. По итогу у тебя получается собранный so, который ты просто копируешь в новую секцию при сборке. В итоге у тебя получается ванильный php:8.1 с докерхаба + 1 .so

Ну и так же надо не забыть конфиг подложить php, чтобы он узнал про pdo (ну это ты и без меня знаешь, думаю).

Если будут вопросы - задавай, помогу.

v9lij ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.