docker php pdo mysql

How to enable pdo_mysql in the php docker image [duplicate]

I have a basic Dockerfile with the following in:

I have a docker-compose.yml file

docker php pdo mysql

Are there any steps I am missing?

4 Answers 4

The docker file I use is.

Note the mysqli and pdo in there as well to allow the PDO/mysql bit.

As it turn out that I need to remove the old images and rebuild them again.

Cause I downloaded the image, then edit it. So I need to remove the old image and rebuild it in order to apply the change.

docker rm only removes containers. Make sure you remove your image as well before.

Also check if a Dockerfile like this one might be more robust/complete:

to enabled PHP PDO and mysqli extensions to connect with MySQL add in Dockerfile :

More Information to how to create that visit this Page

docker php pdo mysql

I am using this and works fine for me.

If its not working for your. Please attache docker build output for review.

docker php pdo mysql

Not the answer you’re looking for? Browse other questions tagged php mysql docker or ask your own question.

Linked

Related

Hot Network Questions

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.16.40232

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

How can I add pdo_mysql? #331

Comments

yousan commented Nov 16, 2016 •

I have an error when running Laravel5.

I checked which PDO driver is installed and found sqlite.

How can I add pdo_mysql?

The text was updated successfully, but these errors were encountered:

We are unable to convert the task to an issue at this time. Please try again.

The issue was successfully created but we are unable to update the comment at this time.

mathroc commented Nov 16, 2016

you have a to build a new image based on this one, and use this command in the Dockerfile:

RUN docker-php-ext-install pdo_mysql

take a look at more detailed documentation there : https://hub.docker.com/_/php/

yousan commented Nov 17, 2016

tghelere commented Feb 21, 2018

mathroc commented Feb 21, 2018

@tghelere you could do that without a Dockerfile, but it’s going to be a pain: you’d need to write a command that install the modules and then starts apache. and it would need to do so each time you start the container..

wajdijurry commented Feb 10, 2019

you have a to build a new image based on this one, and use this command in the Dockerfile:

RUN docker-php-ext-install pdo_mysql

take a look at more detailed documentation there : https://hub.docker.com/_/php/

I wasted alot of time trying to install pdo_mysql using apt-get, and forget that docker phalcon offers an easy way to do this by using docker-php-ext-install pdo_mysql

nuvoletta8 commented Aug 29, 2019

RUN docker-php-ext-install pdo_mysql

Solved my problem!! Thanks

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Источник

Разработка под Docker. Локальное окружение. Часть 2 — Nginx+PHP+MySql+phpMyAdmin

Для лучшего понимания нижеследующего материала сначала рекомендуется ознакомится с Предыдушим постом

Рассмотрим пример развертки локального окружения состоящего из связки Nginx+PHP+MySql+phpMyAdmin. Данная связка очень популярна и может удовлетворить ряд стандартных потребностей рядового разработчика.

Как и в прошлом посте акцент будет смещен в сторону утилиты docker-compose, чем докера в чистом виде.

Итак, поехали!

Начнем вот с такого docker-compose.yml, который лежит в отдельной папке proxy:

В представленном файле описана конфигурация для создания одного контейнера с именем proxy на базе образа image: jwilder/nginx-proxy и создание сети с одноименным именем. Директива networks указывает к каким сетям подключен контейнер, в данном примере, это наша сеть proxy.

При создание сети директиву driver: bridge можно было бы и не указывать. Драйвер типа «мост» является драйвером по умолчанию. Данный контейнер будет связываться по сети с прочими контейнерами.

Образ jwilder/nginx-proxy является базовым и взят и Docker Hub там же представлено довольно обширное и подробное описание по его использованию. Принцип работы nginx-proxy довольно простой, он через пробрасываемый сокет докера получает доступ к информации о запущенных контейнерах, анализирует наличие переменной окружения с именем VIRTUAL_HOST и перенаправляет запросы с указанного хоста на контейнер, у которого данная переменная окружения задана.

Данный вывод информирует нас о том, что в начале была создана сеть proxy_proxy, а затем был создан контейнер proxy_proxy_1. Имя сети получилось из названия папки, в которой размещался файл docker-compose.yml, у меня это proxy и одноименного имени сети.

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

Имя контейнера строиться по аналогичному принципу имя папки плюс название сервиса и число, которое позволяет, чтобы контейнеры со схожими именами не дублировались. Через директиву container_name можно задать имя контейнера явно, но я считаю это довольно бесполезной функцией. Подробнее пойдет речь об этом в следующих постах.

Создаем второй docker-compose.yml следующего содержания:

Что тут у нас объявлено?

Перечислены четыре сервиса: nginx, php, mysql и phpmyadmin. И две сети. Одна сеть прокси с именем frontend, объявлена как внешняя сеть и новая внутренняя сеть backend. Драйвер для нее не указан, как и писал ранее, будет использоваться драйвер по умолчанию типа bridge.

nginx

Тут примерно должно быть все понятно. Используем базовый образ с докер хаб. Переменная окружения необходима для работы прокси и сообщает ему, по какому адресу должен быть доступен контейнер. Опция depends_on указывает, на зависимость данного контейнера от контейнера php. Это означает, что вперед будет запущен контейнер php, а после него будет выполнен запуск зависимого от него контейнера nginx. Далее пробрасываем конфигурацию для нашего nginx. Она будет чуть ниже и монтируем папку с html. Так же замечаем, что контейнер имеет доступ сразу к двум сетям. Он должен связываться и прокси из сети frontend и с php из сети backend. В принципе, можно было бы все контейнеры и в одну сеть frontend попихать, но я придерживаюсь, что подобное разделение более верное.

default.nginx — это конфиг для nginx, который пробрасывается в контейнер. Ключевой момент тут директива fastcgi_pass php:9000. Она задает адрес FastCGI-сервера. Адрес может быть указан в виде доменного имени или IP-адреса, и порта.

php:9000 — имя сервиса это и есть адрес FastCGI-сервера. Nginx обращаясь по адресу php будет получать IP-адрес контейнера, в котором работает php. Порт 9000 это стандартный порт, он объявлен при создание базового контейнера. Данный порт доступен для nginx по сети, но не доступен на хостовой машине, так как не был проброшен.

Тут необычно то, что не указан образ. Вместо этого происходит сборка собственного образа прямо из compose-файла. Директива context указывает на папку, в которой находится Dockerfile.

В Dockerfile указано, что для сборки используется базовый образ php:7.3.2-fpm, далее выполняется запуск команд для установки php-расширений. Далее копируется composer из другого базового образа и устанавливается рабочая директория для проекта. Детальнее вопросы сборки рассмотрю в других постах.

Также во внутрь контейнера пробрасывается файл php.ini и папка html с нашим проектом.

Заметим, что php находится в сети backend и к примеру прокси к нему доступ получить уже не может.

mysql

База находится в сети backend, что позволяет ей держать связь с php. В базовом образе используется стандартный порт 3306. Он доступен по сети докера для php, но не доступен на хостовой машине. Если выполнить проброс для данного порта, то можно к нему коннектиться к примеру из того же PHPSTORM. Но если вам достаточно интерфейса phpmyadmin, то этого можно и не делать.

phpmyadmin

Официальный образ phpmyadmin. В переменных окружения используется VIRTUAL_HOST для взаимодействия с прокси, аналогично nginx. PMA_USER и PMA_PASSWORD доступ к базе. И PMA_HOST сам хост базы. Но это не localhost, как обычно бывает, а mysql. Т.е. связь с базой доступна по имени ее сервиса, т.е. mysql. Контейнер phpmyadmin может связаться с базой, т.к имеет подключение к сети backend.

Видим следующий вывод:

Видим, что в начале происходит создание сети lesson2_backend, затем сборка образа php, потом может происходить скачивание образов, которых еще нет в системе (pull) и собственно запуск описанных сервисов.

Последний штрих, чтобы все заработало это добавление в hosts или доменов site.local и phpmyadmin.local.

Содержимое index.php может быть следующим:

Тут мы проверяем корректность подключения расширения php — mysqli, которое было добавлено при сборке Dockerfile.

И заметим, что для связи с контейнером используется название сервиса — mysql.

Структура всего проекта получилась следующей:

Источник

Начало работы с Docker. Часть пятая

Взаимодействие служб apache и mysql

Теперь запускаем наши службы

И смотрим ini-файлы внутри контейнера

Вроде все в порядке, так что можем поработать из php-скрипта с базой данныx:

docker php pdo mysql

Три службы: Apache+PHP, MySQL и phpMyAdmin

Давайте отредактируем файл

/www/docker-compose.yml и добавим еще один контейнер:

Открываем браузер и набираем в адресной строке http://localhost:8080 :

docker php pdo mysql

Взаимодействие контейнеров по сети

Сеть Docker построена на Container Network Model (CNM), которая позволяет любому желающему создать свой собственный сетевой драйвер. Таким образом, у контейнеров есть доступ к разным типам сетей и они могут подключаться к нескольким сетям одновременно. Помимо различных сторонних сетевых драйверов, у самого Docker-а есть 4 встроенных:

Сети типа мост (bridge)

Чтобы проинспектировать ее свойства, запустим команду

Также можно создать свои собственные bridge-сети при помощи команды

Bridge-интерфейсы хоста

Можно получить больше данных о статусе моста при помощи утилиты brctl (должен быть установлен пакет bridge-utils ):

Как только мы запустим контейнеры и привяжем их к этой сети, интерфейс каждого из этих контейнеров будет выведен в списке в отдельной колонке. А если включить захват трафика в bridge-интерфейсе, то можно увидеть, как передаются данные между контейнерами в одной подсети.

Виртуальные интерфейсы Linux

Container Networking Model дает каждому контейнеру свое собственное сетевое пространство. Если запустить команду ip addr внутри контейнера, то можно увидеть его интерфейсы такими, какими их видит сам контейнер:

Откроем еще один терминал на хосте и запустим контейнер:

Теперь опять выполним на хосте команды

Источник

Локальная среда для PHP разработки с помощью Docker

docker php pdo mysql

В этой статье описывается как собрать минимальную локальную среду для разработки на PHP используя Docker (Докер) и Docker-compose.

Здесь мы не будем изучать «Что такое Docker и как его установить?», подробная инструкция есть на официальном сайте.

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.

Docker Compose — это инструментальное средство, входящее в состав Docker. Оно предназначено для решения задач, связанных с развёртыванием проектов.

Для чего?

Многие веб разработчики используют в своей работе такие «сборки» как OpenServer, XAMMP и подобные. Для простых зачать, типа создания блога на Вордресс, использование такой сборки вполне допустимо и позволяет выполнить все задачи. В OpenServer даже есть возможность менять версию PHP, MySQL, Apache.

Но иногда возникает необходимость быстро поднять идентичную среду разработки на другом компьютере для вашего коллеги или добавить к среде разработки определенную версию Node.js, или Redis, как быть в этом случае? Тут нам и поможет Докер.

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

В нашей среде для разработки будут следующие компоненты:

В будущем добавить/убрать/изменить любой компонент очень просто с помощью конфигурационных файлов Docker и Docker-compose.

Приступаем

Создадим основную папку, например docker-lamp, которая будет корневой, а внутри создадим следующую структуру:

sites — тут будут лежать наши проекты

data
mysql — тут будут храниться файлы наших баз данных
logs — сюда будут записываться все логи

config
php — все настройки контейнера и php.ini
nginx — — все настройки контейнера и конфигурационные файлы

docker php pdo mysql

Создаем в корневой папке файл docker-compose.yml и добавим в него следующее содержание (я постарался его прокомментировать чтобы не возникало вопросов):

Образы nginx и mysql прекрасно работают из коробки, а вот официальный образ php совсем пустой и в него не включены никакие расширения, еще мы хотели чтобы в нашей среде разработки был Composer.

Php.ini пока оставим пустым, если нам понадобиться в будущем настраивать PHP то воспользуемся им, а пока добавим в Dockerfile следующий код:

Теперь в папке sites для теста создадим тестовый проект Hello, для этого создадим папку hello и поместим туда единственный файл index.php который будет выводить информацию о php:

Остается только сконфигурировать NGINX, для этого добавим в /config/nginx файл hello.conf:

Не забываем в файле HOSTS добавить:

Запускаем терминал, переходим в нашу папку и запускаем команду:

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

docker php pdo mysql

Если при сборке не было никаких ошибок:

docker php pdo mysql

Переходим по адресу http://hello.loc/ и видим, что все работает.

docker php pdo mysql

Можно зайти в Docker-контейнер php и запустить bash, и проверить работает ли git и composer, для этого введем команду:

docker php pdo mysql

Завершаем работу командой:

Мы разобрали один из вариантов конфигурации, вы все можете настроить под себя. Может показаться, что это сложно и тратиться много времени, но настроив все один раз, вы и коллеги будите использовать это постоянно, разворачивая всю среду разработки одной строкой.

В начале я написал что в сборке будет присутствовать phpМyAdmin но, как вы заметили, его нет. Для тренировки попробуйте добавить его сами, а если не получится, то позже подготовлю инструкцию.

На Windows 10 у меня возникла ошибка при запуске контейнера MySQL, в логах было что то такое:

…..
[Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
…..

Гугление показало — это означает, что используемая файловая система не поддерживает aio. Для этого в docker-compose добавим команду:

В статье, в описание файла docker-compose, я это добавил.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *