- Saved searches
- Use saved searches to filter your results more quickly
- License
- ineat/docker-php-nginx-postgres-composer
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Php fpm docker postgres
- Введение в проблему
- Контейнеризация и docker-контейнер
- Установка
- Сразу в бой!
- Создание собственных docker-образов
- Простое веб-приложение
- Заключение
Saved searches
Use saved searches to filter your results more quickly
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. You switched accounts on another tab or window. Reload to refresh your session.
Docker Compose configuration to run PHP7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer.
License
ineat/docker-php-nginx-postgres-composer
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Docker Compose configuration to run PHP 7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer.
This Docker Compose configuration lets you run easily PHP 7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer. It exposes 4 services:
The PHP image comes with the most commonly used extensions and is configured with xdebug. The UUID extension for PostgreSQL has been added. Nginx default configuration is set up for Symfony 4 (but can be easily changed) and will serve your working directory. Composer is run at boot time and will automatically install the vendors.
For now the project has been tested on Linux only but should run fine on Docker for Windows and Docker for Mac.
Checkout the repository or download the sources.
Simply run docker-compose up and you are done.
Nginx will be available on localhost:80 and PostgreSQL on localhost:5432 .
docker-compose run composer
Where cmd is any of the available composer command.
docker-compose exec db psql -U postgres
Using .env file default parameters:
docker-compose exec db psql -U dbuser dbname
If you want to connect to the DB from another container (from the php one for instance), the host will be the service name: db .
You can execute any command on the php container as you would do on any docker-compose container:
docker-compose exec php php -v
To change PHP’s configuration edit .docker/conf/php/php.ini . Same goes for .docker/conf/php/xdebug.ini .
You can add any .ini file in this directory, don’t forget to map them by adding a new line in the php’s volume section of the docker-compose.yml file.
Any .sh or .sql file you add in ./.docker/conf/postgres will be automatically loaded at boot time.
If you want to change the db name, db user and db password simply edit the .env file at the project’s root.
If you connect to PostgreSQL from localhost a password is not required however from another container you will have to supply it.
To avoid typing over and over again the same commands you can add two useful aliases in your shell’s configuration ( .bashrc or .zshrc for instance):
alias dcu="docker-compose up" alias dcr="docker-compose run" alias dce="docker-compose exec"
It then becomes way faster to execute a composer command for instance:
dcr composer require —dev phpunit/phpunit
About
Docker Compose configuration to run PHP7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer.
Php fpm docker postgres
Представьте что вы приходите в качестве разработчика в новую компанию у которого есть веб-сайт. Для его работы нужны допустим nginx, php-fpm и postgres, вот схематично как работает веб-сайт компании:
- Вы вводите в браузере адрес веб-сайта, браузер запрашивает html-страницу с котиками по указанному адресу
- http-сервер nginx принимает ваш запрос и делегирует создание страницы php-fpm
- php-fpm запрашивает данные о котиках из базы postgres, строит html-страницу и отдает обратно его nginx-у, а тот в свою очередь клиенту-браузеру и вы видите красивых котиков
Введение в проблему
Перед началом работы над сайтом, вам придется развернуть проект — это значит:
- установить nginx
- установить php-fpm и все нужные расширения
- настроить совместную работу nginx и php-fpm
- установить postgres, создать пользователей и создать нужные базы и схемы
Зачастую это сделать не так просто и не так быстро, также сложности добавляют различия в операционных системах (далее ОС), один коллега предпочитает Mac OS, а другой Ubuntu или Windows.
Неплохо было бы автоматизировать эти рутинные действия и иметь одну магическую команду “установи мне всё, и где угодно и настрой как надо”, верно?
Передав такой инструмент коллеге, он сможет развернуть проект за считанные минуты, причём, его приложение будет работать в точности как и ваше. Всему этому есть решение — docker!
В этой статье мы разберёмся с основами работы docker, docker compose узнаем о контейнеризации и docker-контейнере, научимся скачивать готовые docker-образы и создавать свои, в конце развернём простое веб-приложение с использованием php-fpm + nginx + postgres.
Контейнеризация и docker-контейнер
В основе программы Docker лежит технология контейнеризации.
Контейнеризация (виртуализация на уровне ОС) — это технология, которая помогает запускать приложения изолированно от ОС. Приложение упаковывается в специальную оболочку-контейнер, внутри которой — среда, необходимая для работы.
Простыми словами контейнер — это некая изолированная песочница для запуска ваших приложений
Приложение 1 и приложение 2 изолированы друг от друга и от операционной системы.
Docker — это программа, которая является наиболее популярной реализацией технологии контейнеризации, она позволяет запускать docker-контейнеры с приложениями из заранее заготовленных шаблонов — docker-образов (Docker image)
Для чего вам может понадобиться docker:
- запуск изолированных приложений, и управление ими
- ускорение и автоматизация развертывания приложений
- доставка этих приложений до серверов
- масштабирование
- запуск на одном компьютере разных версий одной программы
Установка
Для начала нам нужно установить:
Сразу в бой!
Концепцию docker легче понять на практике. Например, давайте попробуем запустить http-сервер nginx на нашем компьютере.
docker run -p 8080:80 nginx:latest
Идём в браузер, открываем 127.0.0.1:8080 . И уже видим страницу приветствия nginx! И всё!
Теперь разберёмся подробнее, что тут происходит.
Команда docker run -p 8080:80 nginx:latest делает следующее:
- Скачивает docker-образ nginx:latest (если ранее не скачивался) из Docker Hub
- Запускает docker-контейнер используя этот docker-образ
- Ранее уже упоминалось, что процессы в docker-контейнерах запускаются в изоляции от ОС, то есть все порты между ОС и docker-контейнером закрыты. И для того чтобы мы смогли обратиться к nginx, нужно пробросить порт. Как раз для этого служит опция -p 8080:80 , 80 — порт nginx-а внутри контейнера, 8080 — порт в локальной сети ОС.
Docker-образ (Docker image) — шаблон для создания docker-контейнеров. Представляет собой исполняемый пакет, содержащий все необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и файлы конфигурации.
Docker Hub — это публичный репозиторий docker-образов, куда может любой желающий загрузить его или скачать. На странице nginx в Docker Hub как раз можно найти тот самый наш docker-образ nginx:latest, latest — это tag который ссылается на самый свежий docker-образ
Создание собственных docker-образов
А давайте попробуем создать свой docker-образ, взяв за основу nginx:latest ?
Docker умеет создавать docker-образ читая текстовые команды записанный в файл, этот файл называется Dockerfile
Пример простейшего Dockerfile:
Давайте разбираться что тут происходит и посмотрим на рисунок.
Каждый сервис у нас находится внутри docker-контейнера. Точкой входа в наше приложение как и в случае с веб-сайтом компании, является NGINX. Пользователи веб-сайта делают запросы к NGINX у которого проброшен порт 80.
- test-network . Мы помним что каждое приложение в docker-контейнере находится в изоляции. test-network объединяет все docker-контейнеры в одну сеть, и это позволяет обращаться к нужному контейнеру по имени сервиса.
- Volumes — это механизм для хранения данных вне docker-контейнера, т.е в файловой системе нашей ОС. И решает проблему совместного использования файлов.
Все примеры, а так же исходники dockerFile-ов можно взять из репозитория на https://github.com/ildarsaitkulov/docker-for-kids
Простое веб-приложение
Создадим самое простое веб-приложение, которое показывает нам сообщение об успешном подключении к базе данных. Вместо адреса базы данных мы используем host= postgres , такое же имя нашего сервиса как и в YAML-файле, помним что эта возможность появилась благодаря общей сети test-network
try $pdo = new \PDO("pgsql:host=postgres;dbname=postgres", 'postgres', 'mysecretpass'); echo "Подключение к базе данных установлено!
"; return; > catch (PDOException $exception) echo "Ошибка при подключении к базе данных
$exception->getMessage()>
"; >
PDO — это интерфейс для доступа к базам данных в PHP, подробнее.
Теперь, для того чтобы создать все docker-образы и запустить docker-контейнеры нужно выполнить:
Увидим успешное соединение с базой данных!
Заключение
Как и обещал одной лишь командой мы развернули все сервисы, и это можно сделать где угодно, нужен только docker, и везде у вас будет единое окружение!
Придя на новую работу, вместо долгой и сложной подготовки проекта к работе, вам стоит лишь выполнить одну команду.
В этой статье мы разобрались с основами работы docker, docker compose узнали о контейнеризации и docker-контейнере, научились скачивать готовые docker-образы и создавать свои, развернули простое веб-приложение с использованием php-fpm + nginx + postgres.
Docker отличный инструмент для быстрого развертывания приложений, доставки до серверов, тестирования. Подробнее можно почитать на официальном сайте.