Перейти к содержимому
Главная страница » LAMP в Docker

LAMP в Docker

В этой инструкции мы пошагово создадим стек LAMP с помощью Docker и устраним некоторые ошибки, которые могут возникнуть в процессе.

Способы развертки LAMP в Docker

LAMP — это программный стек, на котором, вероятно, работает большинство веб-сайтов. Linux представляет собой основу стека, а традиционная реализация включает Apache в качестве веб-сервера, базу данных MySQL и PHP в качестве языка программирования на стороне сервера.

Однако существует множество возможных вариаций: MariaDB, например, часто используется вместо MySQL, от которого она является ответвлением, а вместо PHP можно использовать другие языки программирования, такие как Python или Perl.

В этой статье мы рассмотрим, как реализовать базовый стек LAMP в Docker тремя способами:

  1. C помощью готового файла docker-compose.yml из репозитория sprintcube;
  2. Используя готовый Dockerimage стека LAMP;
  3. Разработаем собственный файл docker-compose.yml, используя готовые образы: apache, mysql, php.

Не буду долго рассказывать почему предпочтительнее разворачивать LAMP в Docker, а не на чистом Linux или Windows, об этом на нашем и других сайтах рассказано много раз, основное это скорость развертки и переноса соответствующего стека. Приступим к делу.

Перед началом, удостоверьтесь, что на сервере или локальном компьютере установлен Docker и GIT. Использовать инструкцию, как для Windows так и для linux.

Развертка 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.

Если вам требуется несколько разных сборок на вашем компьютере, например разные версии PHP, то скопируйте папку docker-compose-lamp/ со всем содержимым и задайте другое имя этой папке, например docker-compose-lamp-php5/ и выполните шаги заново.

Развертка 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 в новом контейнере.

Как пользователь root контейнера, запустите Apache:

service apache2 start

Запустить MySQL:

service mysql start

Выйдите из контейнера, оставив его запущенным, нажав ctrl + p затем ctrl + q.

Введите IP-адрес в веб-браузере, чтобы протестировать сайт.

Корневой каталог веб-сайта /var/www/example.com/public_html/

Для доступа к приложению перейдите по адресу 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 контейнеров

Быстрый запуск популярных Docker контейнеров

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

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