Настройка PHP-FPM, Nginx, Mariadb на CentO с использованием докера - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь перейти от использования VirtualBox в качестве среды разработки к докеру.

В VirtualBox я в основном устанавливаю PHP-FPM, Nginx и Mariadb, но в Docker я не могу копировать один и тот же стек, несмотря на попытки в течение нескольких дней.

Из всех руководств по установке стека LEMP / LAMP, только эта chentex / docker-nginx-centos работает для меня:

Вот код из Dockerfile

FROM centos:centos7
LABEL maintainer="Vicente Zepeda <chente.z.m@gmail.com>"

ENV nginxversion="1.12.2-1" \
    os="centos" \
    osversion="7" \
    elversion="7_4"

RUN yum install -y wget openssl sed &&\
    yum -y autoremove &&\
    yum clean all &&\
    wget http://nginx.org/packages/$os/$osversion/x86_64/RPMS/nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
    rpm -iv nginx-$nginxversion.el$elversion.ngx.x86_64.rpm &&\
    sed -i '1i\
    daemon off;\
    ' /etc/nginx/nginx.conf

CMD ["nginx"]

Это работает прямо из коробки, и я вижу страницу по умолчанию на http://localhost

Единственная проблема в том, что она не содержит PHP-FPM иMariaDB.

Я пытался изменить файл и добавить PHP-FPM и Mariadb, но я обнаружил на Reddit, что каждый контейнер должен иметь на службе, как в одном контейнере для nginx, а другой для php ... и яЯ заблудился о том, как сделать это

Ответы [ 4 ]

0 голосов
/ 01 мая 2019

Здесь есть несколько ответов, предлагающих две очень точные вещи:

  1. Каждый сервис должен иметь свой собственный контейнер Docker (как вы обнаружили)
  2. Популярные методы включают пользовательские docker-compose файлы или добавление еще одного слоя в ваш стек с помощью таких инструментов обеспечения, как Vagrant, Laravel, Lando, LaraDock и другие ...

Но более важно то, что если вы испытываете этомного трудностей и разочарований при попытке настроить несколько Docker-контейнеров для каждой службы для такого простого стекового сервера LEMP (который сложен независимо от вашего подхода), возможно, стоит рассмотреть возможность отказа от всего подхода с использованием контейнеров.

Предполагая, что по вашему профилю вынастраивая серверы WordPress, есть такие опции, как Roots Trellis, которые поддерживают PHP Composer, или EasyEngine v4 с уже интегрированным Docker.

Еще более легким вариантом является SlickStack * 1015 моей команды, в котором нет нулевых контейнеров.и требует только базовых знаний команд Bash дляразверните сервер стека LEMP.

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

0 голосов
/ 02 октября 2018

Docker-compose хорош, но не самый простой в использовании.Вам действительно стоит взглянуть на Lando , так как это делает среду разработки абсолютно удобной в настройке.По сути, это слой удобства использования по сравнению с Docker, и он, безусловно, гладкий.

Прежде чем идти дальше, я должен отметить, что Lando на самом деле не работает с Windows 10 Home, потому что версия Docker для Windows использует Hyper-V, который поставляется только с Win10 Pro.Mac и Linux работают нормально.

У Lando есть «рецепты», которые являются отправными точками, которые уменьшают объем конфигурации, которую вы должны написать.Если вы разрабатываете сайт на Drupal или WordPress, для этого есть рецепты.Или, если вы пишете что-то с нуля, есть также рецепты LAMP и LEMP.

Все, что вам нужно сделать после установки Lando, это создать файл конфигурации для вашего приложения и запустить его.Существует команда lando init, которая генерирует конфигурацию, задавая вам несколько вопросов, но я предпочитаю просто написать файл конфигурации .lando.yml вручную, так как это не сложно.

Так что если вы хотите установить LEMPваш конфиг будет выглядеть примерно так:

name: put-your-site-name-here
recipe: lemp
config:
  php: '7.1'        # optional; defaults to the latest version
  webroot: web      # optional; defaults to the same directory as this file
  database: mariadb # technically optional but you did say you wanted this
  xdebug: true      # optional
  conf:             # optional; specify your own configs for nginx and/or php as follows
    server: my-config-path/nginx.conf
    php: my-config-path/php.ini

и все!Запишите это в файл .lando.yml, запустите lando start, и у вас сразу же будет запущено приложение.

В настоящее время последняя бета-версия является наиболее стабильной, но не о чем беспокоиться.Я использую это на работе каждый день. Загрузите его с GitHub.

0 голосов
/ 03 октября 2018

Вы можете использовать мой docker-compose файл (mariadb, php-fpm, nginx)

https://github.com/matchish/skeleton

Просто запустите

docker-compose up -d

, и вы увидите «Hello world» на http://localhost Вы можете редактировать переменные окружения в файле .env

Также я рекомендую https://laradock.io/

Вы можете запустить терминал в любом сервисе

docker-compose exec db bash
docker-compose exec php-fpm bash
docker-compose exec nginx bash 

Также вы можете добавить файл инициализации базы данных.Прочитайте руководство в этом файле https://github.com/matchish/skeleton/blob/master/mariadb/docker-entrypoint-initdb.d/createdb.sql.example

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

docker-compose stop nginx 
docker-compose up -d nginx

, если вам нужно отредактировать nginx conf, вам нужно перестроить образ

docker-compose build nginx 
docker-compose up -d

Если вам нужен phpmyadmin, вы можете добавить его для создания файла

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  environment:
    PMA_HOST: db
    PMA_PORT: 3306
  ports:
    - '8181:80'

Теперь вы можете получить к нему доступ http://localhost:8181

Самый простой способ использовать compose в производстве - это просто скопировать каталог проекта врабочий сервер и запустить docker-compose up -d.Вы можете исключить каталог logs.Рекомендуется иметь несколько составных файлов (https://docs.docker.com/compose/production/)

. Не забудьте сохранить права доступа к файлам при развертывании в рабочей среде

.
0 голосов
/ 27 сентября 2018

Контейнеры Docker разработаны так, чтобы в них работала одна служба, а не как целая виртуальная система (как вы можете видеть с виртуальными ящиками и виртуальными машинами).

В идеале это означает, что вам нужен один контейнер длякаждый:

  • Nginx
  • PHP
  • Mariadb

Кроме того, изображение докера Centos разработано в качестве основы для наследования от других.или для выполнения конкретной задачи ОС (например, вызовов cURL или оболочки), которая на самом деле не является тем, что вам нужно.

Я бы порекомендовал для вашего случая использовать docker-compose, который позволит вам легконастройте промежуточные контейнеры и управляйте ими как одним проектом.

Я бы порекомендовал docker-compose.yml настроить файл следующим образом:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./src:/(nginx config root folder)
      - ./config/site.conf:/etc/nginx/conf.d/site.conf
    links:
      - php
      - mariadb

  php:
      image: php:7-fpm
  mariadb:
      image: mariadb
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: example

После этого в вашей папке будет /config/Папка проекта, для которой вам понадобится файл site.conf для настроек nginx.

Вам также понадобится папка /src/ в папке проекта, которая будет содержать весь php / веб-код для вашегопроект.

Тома, монтируемые в файле docker-compose.yml, загрузят их в контейнер для вас.Монтирование томов работает путем сопоставления host folder path: container folder path, когда что-то меняется в одном, оно обновляется в другом, почти как при копировании / вставке.Имейте в виду, что вам может потребоваться обновить права доступа к файлам.

Для Mariadb вы можете добавить еще volume для сопоставления файлов данных в контейнере с вашей папкой хоста.Кроме того, вы можете открыть порт mysql, чтобы опросить базу данных с помощью такого инструмента, как mysql workbench, добавив раздел ports для порта 3306, как показано в разделе web.Значение mysql_root_password установит пароль пользователя root.

Вы можете запустить его с помощью команды docker-compose up из каталога вашего проекта.

Когда вам нужно вручную перезапустить nginx (илидругие услуги) вы бы остановили и запустили контейнеры.Вы можете сделать это с помощью команд:

  • docker-compose up - Запуск контейнеров
  • docker-compose down - Останов контейнеров

Если вы хотите отправитьзапустив контейнер в фоновом режиме (чтобы он не занимал окно терминала), вы бы использовали: docker-compose up -d

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

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