Перейти к содержимому

Docker php что это

  • автор:

Как поднять сайт в Docker

Александр Менщиков

В данной статье я поделюсь опытом использования Docker-контейнера при развертывании окружения для веб-разработки. Контейнер будет включать в себя Nginx, PHP, MySQL, Redis и PHPMyAdmin. Итак, главный вопрос — зачем использовать Docker?

Наша команда разработки в разное время насчитывает более 10 человек, у каждого из которых должен быть поднят актуальный локальный образ сайта. С учетом того, что у нас есть люди, работающие на Windows, Linux, MacOS, обычно уходит немало времени на то, чтобы помочь всем разобраться с настройкой веб-сервера и другими неочевидными вещами из области работы с окружением.

Docker — это инструмент, позволяющий создавать процессы, изолированные в отдельных контейнерах, некоторых подобиях вирутальных операционных систем. Каждый процесс (php, nginx, mysql и прочие) запускается в отдельном окружении, но связан с другими процессами средствами самого Docker’а.

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

Первые шаги

Установка Docker

На официальном сайте Docker вы можете загрузить программное обеспечение для любой операционной системы. Однако, если вы хотите работать в Windows, будьте готовы к тому, что Docker в ней запускает сервисы в настоящем виртуальном окружении (например, через VirtualBox), что сказывается на производительности.

Установка в Linux

sudo apt-get update sudo  apt-get install apt-transport-https ca-certificates sudo  apt-key adv —keyserver hkp://ha.pool.sks-keyservers.net:80 —recv-keys  58118  E89F3A912897C070ADBF76221572C52609D

sudo apt-get update sudo  apt-get install docker-engine sudo  service docker start

Установка Docker-compose

Мы будем запускать PHP, Nginx и другие сервисы в отдельных контейнерах и настраивать связи между ними, для этого нам понадобится программа Docker-compose . В Windows она поставляется совместно с докером, для Linux вы можете ознакомиться с инструкцией по установке.

Установка в Linux

curl -L «https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)» -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose   docker-compose —version

Загружаем файл конфигурации

После того, как мы установили Docker , нужно скачать заранее подготовленные нашей командой конфиги. Для этого воспользуемся Git и клонируем репозиторий . Данные команды нужно выполнять из той директории, в которой вы желаете хранить все файлы нашего сайта .

git clone [email protected]:codex-team/docker.git codex-docker cd codex-docker

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

docker-compose build docker-compose up

Теперь у вас готов к работе контейнер для работы с любыми сайтами , использующими Nginx, PHP и.т.д. Не закрывайте текущую консоль (в ней будет запущен docker-compose).

В директории www теперь можно начать создавать сайт или клонировать репозиторий и работать над ним. Следующая часть статьи будет посвящена запуску сайта CodeX.

Настройка сайта CodeX

Перейдем к непосредственной настройке сайта команды Codex. Откройте новое окно терминала. Первым делом нужно загрузить в папку www исходные коды .

git clone https://github.com/codex-team/codex www

В вашей папке docker появилась директория www, где расположены все необходимые файлы. Эта папка будет являться «расшаренной», то есть, ее будут использовать одновременно и виртуальные контейнеры и ваша локальная операционная система.

Выполните команду docker ps чтобы узнать имя контейнера db (скорее всего он будет называться codexdocker_db_1).

Перейдите в директорию codex-docker. Для того, чтобы заполнить базу данных mysql, выполните следующую команду (codex docker_db_1 — имя контейнера).

docker exec -i codexdocker_db_1 mysql -uroot -proot < configs/codex-db.sql

Чтобы сайт был доступен по адресу http://codex.dev:8081/ с вашей локальной машины, добавим его в hosts файл. Для Windows необходимо добавить строку 127.0.0.1 codex.dev в файл C:\Windows\System32\drivers\etc\hosts, для Linux достаточно выполнить команду.

echo «127.0.0.1 codex.dev» >> /etc/hosts

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

cp configs/database.php www/application/config/database.php cp configs/oauth.php www/application/config/oauth.php

Для того, чтобы у вас заработала авторизация через GitHub, отредактируйте файл oauth.php, заполнив учетные данные приложения GitHub.

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

mkdir www/application/cache mkdir www/application/logs сhmod  777  www/application/logs/ www/application/cache/

Теперь вы можете зайти на сайт по адресу http://codex.dev:8081/.

Управлять базой данных можно в PHPMyAdmin по адресу http://codex.dev:8082/. (server — db, username — root, password — root).

If you like this article, share a link with your friends

Read more

We talk about interesting technologies and share our experience of using them.

Среда разработки PHP на базе Docker

Решение, которое позволит создать на локальном компьютере универсальную среду разработки на PHP за 30 — 40 минут.

Оглавление

Структура проекта

Рассмотрим структуру проекта.

14K открытий
4 комментария

Когда ошибся сайтом %)

Развернуть ветку

Чет контейнер с postgres выдает в логах
initdb: error: superuser name «pg_user» is disallowed; role names cannot begin with «pg_»
гуглил ничего не нашел полезного 🙁

Развернуть ветку

Ну там же в ошибке и написано, что нельзя использовать пользователя с префиксом pg_ нужно в .env поменять имя POSTGRES_USER=postgres
там может быть и другие ошибки с контейнером postgres:
1 — \docker-php-workspace\postgres\data нужно удалить .gitkeep
2 — environment добавить PGDATA: /tmp

Развернуть ветку

что-то postgres не хочет запускаться((

Что такое Docker: для чего он нужен и где используется

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

Изображение записи

В первую очередь эта статья будет полезна тем, кто вообще не знаком с контейнерами или Docker. Мы расскажем самые базовые вещи, а наш пример по созданию приложения будет довольно простым. Но это позволит вам понять основы Docker и затем двигаться дальше — изучать более сложные материалы.

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

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

Что такое контейнеры

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

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

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

Docker — это платформа для разработки, доставки и запуска контейнерных приложений. Docker позволяет создавать контейнеры, автоматизировать их запуск и развертывание, управляет жизненным циклом. Он позволяет запускать множество контейнеров на одной хост-машине.

Контейнеризация похожа на виртуализацию, но это не одно и то же. Виртуализация запускает полноценный хост на гипервизоре со своим виртуальным оборудованием и операционной системой. При этом внутри одной ОС можно запустить другую ОС. В случае контейнеризации процесс запускается прямо из ядра основной операционной системы и не виртуализирует оборудование. Это означает, что контейнеризованное приложение может работать только в той же ОС, что и основная. Контейнеры не виртуализируют оборудование, поэтому потребляют меньше ресурсов.

Преимущества использования контейнеров Docker

Контейнеры упрощают работу как программистам, так и администраторам, которые развертывают эти приложения.

Docker решает проблемы зависимостей и рабочего окружения

Контейнеры позволяют упаковать в единый образ приложение и все его зависимости: библиотеки, системные утилиты и файлы настройки. Это упрощает перенос приложения на другую инфраструктуру.

Например, разработчики создают приложение в системе разработки — там все настроено, приложение работает. Когда оно готово, его нужно перенести в систему тестирования, а затем в продуктивную среду. Если в одной из них нет нужной зависимости, приложение не будет работать. Программистам придется отвлечься от разработки и совместно с командой поддержки разобраться в ситуации.

В контейнерах такой проблемы нет, так как они содержат в себе все необходимое для запуска приложения. Специалисты занимаются разработкой, а не решением инфраструктурных проблем.

Изоляция и безопасность

Контейнер — это набор процессов, изолированных от основной операционной системы. Приложения работают только внутри контейнеров и не имеют доступа к основной операционной системе. Это повышает безопасность приложений:они не смогут случайно или умышленно навредить основной системе. Если приложение в контейнере завершится с ошибкой или зависнет, это никак не затронет основную ОС.

Ускорение и автоматизация развертывания приложений и масштабируемость

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

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

Контейнеры приближают к микросервисной архитектуре

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

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

Docker compose — одновременно развернуть несколько контейнеров

Docker-compose позволяет разворачивать и настраивать несколько контейнеров одновременно. Например, для веб-приложения нужно развернуть стек LAMP: Linux + Apache, MySQL, PHP. Каждое из приложений — это отдельный контейнер для ОС Linux. Но в этой ситуации нам нужны именно все контейнеры вместе, а не отдельно взятое приложение. Docker-compose позволяет развернуть и настроить все приложения одной командой, а без него пришлось бы разворачивать и настраивать каждый контейнер отдельно.

Хранение данных в Docker

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

Это хорошо подходит для приложений или сервисов, которые не сохраняют результаты своей работы. Например, функции расчета или преобразования данных: им на вход поступил один набор данных, они его преобразовали или рассчитали и вернули результат. Все, ничего никуда сохранять не нужно.

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

Тома (Docker volumes)

Это способ, при котором Docker сам создает директории для хранения данных. Их можно сделать доступными для разных контейнеров, чтобы они могли обмениваться данными. По умолчанию эти директории создаются на хост-машине, но можно использовать и удаленные хранилища: файловый сервер или объектное хранилище.

Монтирование каталога (bind mount)

В этом случае директория сначала создается на хост-машине а уже потом монтируется в контейнеры.

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

Архитектура (компоненты) Docker

Теперь расскажем подробнее про компоненты, из которых состоит Docker.

Docker daemon

Это некоторый резидентный процесс, который запущен на хост-машине постоянно. Он владеет всей инфраструктурой, а также предоставляет интерфейс взаимодействия с контейнерами, включающего создание и удаление, запуск и остановку.

В ранних версиях платформы Docker можно встретить упоминание о dockerd, но на текущий момент демоны уже успели разбиться на отдельные проекты. Все чаще можно встретить его современника — containerd.

Docker client (клиент)

Это интерфейс командной строки для управления Docker daemon. Мы пользуемся этим клиентом, когда создаем и разворачиваем контейнеры, а клиент отправляет эти запросы в Docker daemon.

Docker image (образ)

Это неизменяемый файл (образ), из которого разворачиваются контейнеры. Приложения упаковываются именно в образы, из которых потом уже создаются контейнеры. В технической литературе можно также встретить описание image как шаблона запуска процесса.

Приведем аналогию на примере установки операционной системы. В дистрибутиве (образе) ОС есть все, что необходимо для ее установки. Но этот образ нельзя запустить, для начала его нужно «развернуть» в готовую ОС. Так вот, дистрибутив для установки ОС — это образ, а установленная и работающая ОС — это контейнер. Но контейнеры обычно разворачиваются одной командой — это намного проще и быстрее, чем установка ОС.

Docker container (контейнер)

Это уже развернутое из образа и работающее приложение.

Docker Registry

Это репозиторий с образами. Разработчики создают образы своих программ и выкладывают их в репозиторий, чтобы их можно было скачать и воспользоваться ими. Распространенный публичный репозиторий — Docker Hub. В нем собраны образы множества популярных программ или платформ: базы данных, веб-серверы, компиляторы, операционные системы и так далее. Также можно создать свой приватный репозиторий, например внутри компании. Разработчики будут размещать там образы, которые будут использоваться всей компанией.

Dockerfile

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

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

FROM python:3 COPY main.py / CMD [ "python", "./main.py" ]

Первая строчка означает, что за основу мы берем образ с названием python версии 3 это называется базовый образ. Docker найдет его в docker registry, скачает и будет использовать за основу. Вторая строчка означает, что нужно скопировать файл main.py в корень файловой системы контейнера. Третья строчка означает, что нужно запустить python и передать ему в качестве параметра название файла main.py.

Далее рассмотрим примеры нескольких команд докер и что происходит, когда мы их выполняем.

Все эти команды выполняются в Docker client, который отправляет их в Docker daemon:

  • Команда docker build (зеленая стрелка) читает dockerfile и собирает образ.
  • Команда docker pull (красная стрелка) скачивает образ из docker registry. По умолчанию docker скачивает образы из публичного репозитория Docker Hub. Но можно создать свой репозиторий и настроить докер, чтобы он работал с ним.
  • Команда docker run (черная стрелка) берет образ и запускает из него контейнер.

Создаем виртуальную машину для работы с Docker

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

В панели управления заходим в раздел «Облачная платформа» — «Серверы», нажимаем кнопку «Создать сервер».

На следующем экране выбираем параметры сервера: имя, регион, ОС, параметры производительности и так далее. Сейчас для нас важны параметры «Источник» — выбираем ОС Ubuntu 20.04 и «Конфигурация» — выбираем 2 vCPU и 8 ГБ оперативной памяти.

Далее обратите внимание на разделы Сеть и Доступ. В разделе Сеть нужно выбрать подсеть с публичным адресом, чтобы к виртуальной машине можно было подключаться из интернета. В разделе Доступ будет указан пароль для root-пользователя, а также необходимо загрузить SSH-ключ, чтобы подключаться к виртуальной машине. Подробную инструкцию о подключении смотрите в базе знаний.

После этого внизу страницы нажимаем кнопку «Создать». Виртуальная машина создается за несколько минут, и после того, как она перейдет в статус ACTIVE, к ней можно подключаться по SSH.

Установка Docker

Мы рассмотрим установку докера на примере Ubuntu. Если у вас другой дистрибутив Linux или операционная система — ищите соответствующую инструкцию на официальном сайте.

Для начала синхронизируем пакетную базу apt и установим нужные зависимости:

sudo apt-get update
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release

Далее импортируем GPG-ключ для репозитория docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Теперь добавим новый репозиторий в список apt:

echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Теперь можно устанавливать докер:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

По умолчанию, доступ к docker daemon есть только у пользователя root. Чтобы с докером могли работать и другие пользователи, их нужно добавить в специальную группу — docker. Выполните эту команду из под обычного пользователя:

sudo usermod -aG docker $USER

После этого необходимо перелогиниться, чтобы изменение вступило в силу.

Запуск контейнера

Теперь попробуем запустить какое-нибудь готовое приложение. Выполните команду:

docker run ubuntu echo 'hello from ubuntu'

Команда docker run создает и запускает контейнер из образа. В этом примере мы создаем контейнер из образа ubuntu, затем выполняем в нем команду echo ‘hello from ubuntu’. Но так как у нас чистая установка докера и мы не скачали ни одного образа, докер сначала найдет этот образ в публичном репозитории Docker Hub, скачает, а потом создаст из него контейнер. В следующий раз, когда нам понадобится образ ubuntu, докер уже не будет его скачивать.

После выполнения команды в терминале появится строка hello from ubuntu, и контейнер сразу остановится. Теперь выполним другую команду:

docker run -it ubuntu

Эта команда запустит контейнер в интерактивном режиме, то есть контейнер запустится и будет ждать дальнейших команд. При этом мы окажемся внутри операционной системы контейнера: запустится оболочка (bash), и мы сможем выполнять какие-то команды внутри контейнера. Чтобы выйти из контейнера, введите команду exit.

Создание собственного образа и запуск контейнера

Теперь создадим HelloWorld-приложение на Python, обернем его в образ и запустим.

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

mkdir first-docker-app
cd first-docker-app

Создадим файл main.py и запишем в него одну строчку кода:

echo 'print("Hello from python");' >> main.py

Проверим, что наша программа работает. Для этого выполним команду:

python main.py

В консоли должно выйти сообщение Hello from python. Это и есть наше простое приложение. Теперь нужно обернуть его в докер-образ. Для этого создадим файл Dockerfile и напишем в нем три строчки:

FROM python:3 COPY main.py / CMD [ "python", "./main.py" ]

В первой строке мы указываем образ, который берем за основу. Так как мы пишем приложение на Python, нужно чтобы в нашем образе он уже был установлен. Самый простой способ это сделать — использовать готовый официальный образ с Docker Hub. Цифра 3 — это тег. Он означает, что нужно использовать третью версию Python. Вместо этого можно было бы использовать тег latest, который означает самую последнюю версию, или можно было указать номер конкретной версии, например 3.8.8.

Во второй строчке мы копируем наш файл main.py в корневую директорию образа.

Третья строчка — запускаем python и передаем ему в качестве параметра имя нашего файла.

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

docker build -t first-docker-app .

Параметр -t обозначает имя нашего образа, мы назвали его first-docker-app.

Так как у нас еще нет скачанного образа python, то докер сам скачает его из Docker Hub и затем будет использовать его в качестве основы для создания нашего образа.

Проверим список установленных у нас образов:

docker images

Мы увидим, что у нас установлено три образа:

REPOSITORY TAG IMAGE ID CREATED SIZE first-docker-app latest 649cceb4dfd2 4 seconds ago 885MB python 3 b1aa63f57d3c 2 days ago 885MB ubuntu latest 8e428cff54c8 4 days ago 72.9MB

first-docker-app — это наш образ, который мы только что создали. python — это образ python, который докер автоматически скачал чтобы собрать наш образ. ubuntu — образ, который мы пробовали для запуска готового приложения.

Теперь создадим контейнер из нашего образа и запустим его:

docker run first-docker-app

В результате нам выведется результат: Hello from python.

Итог: Мы создали свое приложение, упаковали его в докер-образ и запустили. Конечно, это очень простой пример. Наша программа состоит всего из одной строчки, а dockerfile из трех. Но это позволяет понять базовые принципы работы докера, как он устроен, как создавать свои образы и запускать контейнеры.

Готовые кластеры Kubernetes с GPU

Создайте за несколько кликов.

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

В этой статье описывается как собрать минимальную локальную среду для разработки на 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-compose.yml и добавим в него следующее содержание (я постарался его прокомментировать чтобы не возникало вопросов):

# Файл docker-compose должен начинаться с указания версии. version: '3' # Сети networks: internal: # Ниже список наших сервисов (контейнеров). NGINX, PHP, MySQL, phpMyAdmin services: nginx: # Какую версию образа nginx из официального хранилища DockerHub используем image: nginx:stable-alpine container_name: nginx # Ниже прокидываем порты. NGINX в контейнере работает на дефолтном 80, а мы возьмем 8000 ports: - "80:80" # Монтируем директории, слева директории на основной системе, справа - куда они монтируются в контейнере volumes: - ./sites:/var/www - ./config/nginx:/etc/nginx/conf.d - ./data/logs:/var/log/nginx/ # Зависимости depends_on: - php - mysql networks: - internal php: build: context: ./config/php dockerfile: Dockerfile container_name: php volumes: - ./sites:/var/www - ./config/php/php.ini:/usr/local/etc/php/php.ini ports: - "9000:9000" networks: - internal mysql: image: mysql:5.7 container_name: mysql restart: unless-stopped command: --default-authentication-plugin=mysql_native_password command: --innodb_use_native_aio=0 ports: - "3306:3306" volumes: - ./data/mysql:/var/lib/mysql # Задаем пароль для root пользователя environment: MYSQL_ROOT_PASSWORD: secret networks: - internal

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

Поэтому переходим в папку config/php и создадим файлы Dockerfile и php.ini .

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

# Для начала указываем исходный образ, он будет использован как основа FROM php:7.3-fpm # RUN выполняет идущую за ней команду в контексте нашего образа. # В данном случае мы установим некоторые зависимости и модули PHP. # Для установки модулей используем команду docker-php-ext-install. # На каждый RUN создается новый слой в образе, поэтому рекомендуется объединять команды. RUN apt-get update && apt-get install -y \ curl \ wget \ git \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ libzip-dev \ && docker-php-ext-install -j$(nproc) iconv mbstring mysqli pdo_mysql zip \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd # Ставим Composer'а. RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer USER www-data:www-data # Указываем рабочую директорию для PHP WORKDIR /var/www # Запускаем контейнер CMD ["php-fpm"]

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

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

server < index index.php; server_name hello.loc; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/hello; location ~ \.php$ < try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; >>

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

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

docker-compose up -d

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

Сборка нашей среды разработки php с помощью Докер

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

Сборка нашей среды разработки php с помощью Докер завершена без ошибок

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

Сборка нашей среды разработки php с помощью Докер работает

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

docker exec -it php bash

Запускаем bash в Докер контейнере

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

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

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

UPD:

На 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 не будет опубликован. Обязательные поля помечены *