В этой инструкции мы пошагово создадим стек LAMP с помощью Docker и устраним некоторые ошибки, которые могут возникнуть в процессе.
Способы развертки LAMP в Docker
LAMP — это программный стек, на котором, вероятно, работает большинство веб-сайтов. Linux представляет собой основу стека, а традиционная реализация включает Apache в качестве веб-сервера, базу данных MySQL и PHP в качестве языка программирования на стороне сервера.
В этой статье мы рассмотрим, как реализовать базовый стек LAMP в Docker тремя способами:
- C помощью готового файла docker-compose.yml из репозитория sprintcube;
- Используя готовый Dockerimage стека LAMP;
- Разработаем собственный файл docker-compose.yml, используя готовые образы: apache, mysql, php.
Не буду долго рассказывать почему предпочтительнее разворачивать LAMP в Docker, а не на чистом Linux или Windows, об этом на нашем и других сайтах рассказано много раз, основное это скорость развертки и переноса соответствующего стека. Приступим к делу.
Развертка LAMP в Docker с помощью docker-compose.yml
Рассмотрим первый и самый быстрый способ развертки стека LAMP, используя готовый файл docker-compose.yml из репозитория sprintcube.
В интернете есть множество подобных сборок, но эта самая распространенная, а значит максимально рабочая. После развертки мы получим виртуальное Linux-окружение в Docker со следующими компонентами:
- Redis
- PHP (5.4 — 8.3)
- Apache
- MySQL
- phpMyAdmin
Выполним следующие команды:
git clone https://github.com/sprintcube/docker-compose-lamp.git
cd docker-compose-lamp/
cp sample.env .env
// modify sample.env as needed
docker compose up -d
// visit localhost
Здесь мы клонируем этот репозиторий на сервер или свой локальный компьютер и выполняем сборку и запуск докер контейнеров командой docker compose up -d
.
На этом мы развернули стек LAMP в Docker, для доступа перейдем по адресу localhost или откроем IP-адрес сервера. Далее читаем документацию по использованию сборки https://github.com/sprintcube/docker-compose-lamp.
Развертка LAMP в Docker с помощью готового Dockerimage
Лучше всего разные сервисы запускать в разных контейнерах, для упрощения их администрирования, именно так реализовано в предыдущем примере. Если вам необходимо развернуть все компоненты LAMP в одном контейнере, то вы можете использовать готовый образ Docker или собрать собственный.
Загрузка LAMP Doсkerimage
Для загрузки Docker образа LAMP выполним команду:
sudo docker pull mattrayner/lamp
Запуск контейнера Docker
Запустим контейнер с загруженным образом:
docker run -d --name lamp -p "80:80" -p "3306:3306" -v ~/app:/app mattrayner/lamp:latest-1804
Как пользователь root контейнера, запустите Apache:
service apache2 start
Запустить MySQL:
service mysql start
Выйдите из контейнера, оставив его запущенным, нажав ctrl + p
затем ctrl + q
.
Введите IP-адрес в веб-браузере, чтобы протестировать сайт.
Для доступа к приложению перейдите по адресу http://127.0.0.1/
MySQL доступен на порту 3306, пользователь по умолчанию admin. Пароль для пользователя находится в логе запуска контейнера. Прочитать командой
docker logs [container-id] | grep uadmin
Собственный docker-compose.yml для LAMP
Для начала создайте файл docker-compose.yml в каталоге вашего проекта. Этот файл имеет решающее значение, так как он управляет настройкой стека LAMP, определяя, как должен быть создан и взаимодействовать каждый сервис.
version: '3'
services:
web:
build: .
container_name: apache-php
ports:
- "80:80"
volumes:
- ./www:/var/www/html
db:
image: mysql:8
container_name: mysql-server
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: secure_password
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
В этой конфигурации описаны два основных сервиса: web для Apache и PHP и db для MySQL. Обратите внимание на директиву build: .
в разделе web, которая указывает, что Docker должен использовать Dockerfile в текущем каталоге для создания этого сервиса.
Настройте PHP с помощью Dockerfile
Чтобы включить дополнительные модули PHP и Composer, создайте файл Dockerfile в том же каталоге, что и файл docker-compose.yml. Этот файл Dockerfile будет указывать Docker, как подготовить вашу пользовательскую среду PHP.Реклама
FROM php:8.3-apache
# Install additional PHP modules
RUN docker-php-ext-install pdo_mysql mysqli
# Install Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
php -r "unlink('composer-setup.php');"
# Enable Apache mod_rewrite
RUN a2enmod rewrite
Этот Dockerfile расширяет образ php:8.3-apache, добавляя расширения pdo_mysql и mysqli для взаимодействия с базой данных и глобально устанавливая Composer.
Создание и запуск контейнеров
Теперь, когда файл docker-compose.yml готов, вы можете запустить стек LAMP. Откройте терминал, перейдите в каталог проекта, где находится файл docker-compose.yml, и выполните следующую команду:
docker-compose up -d
Флаг -d
запускает ваши контейнеры в автономном режиме, освобождая ваш терминал. Docker-Compose загрузит необходимые образы из Docker Hub, создаст указанные службы и настроит сеть и тома в соответствии с заданными параметрами.Реклама
Доступ к вашему стеку LAMP
Как только контейнеры будут запущены, вы сможете получить доступ к серверу Apache, открыв http://localhost в веб-браузере. Вы увидите страницу Apache по умолчанию или содержимое каталога ./www, если вы добавили какие-либо HTML- или PHP-файлы.
Чтобы взаимодействовать с базой данных MySQL, вы можете использовать следующую команду для доступа к командной строке MySQL:
docker-compose exec db mysql -uroot -proot
При необходимости замените root паролем, который вы указали в своем docker-compose.yml
файле.
Управление стеком LAMP
Docker-Compose позволяет легко останавливать, запускать и восстанавливать службы. При необходимости используйте следующие команды:
- Чтобы остановить ваши контейнеры:
docker-compose down
- Чтобы снова запустить ваши контейнеры:
docker-compose up -d
- Для восстановления ваших сервисов после внесения изменений:
docker-compose up -d --build
Ссылки
Настройка стека Lamp с помощью Docker Compose
Разворачиваем быстро и просто LAMP сервер с использованием Docker контейнеров