Поиск по сайту:

Докеризация стека LEMP с помощью Docker-Compose в Ubuntu


На этой странице

  1. Шаг 1. Установите Docker
  2. Шаг 2. Установите Docker-Compose
  3. Шаг 3. Создание и настройка среды Docker
  4. Шаг 4. Настройка файла docker-compose.yml
  5. Шаг 5. Запустите Docker-Compose
  6. Шаг 6. Тестирование
    1. Справочник

    Docker-Compose — это инструмент командной строки для определения и управления многоконтейнерными приложениями Docker. Compose — это скрипт Python, его можно легко установить с помощью команды pip (pip — это команда для установки программного обеспечения Python из репозитория пакетов Python). С помощью compose мы можем запускать несколько контейнеров докеров с помощью одной команды. Это позволяет вам создать контейнер как услугу, отлично подходящую для вашей среды разработки, тестирования и подготовки.

    В этом руководстве я пошагово расскажу вам, как использовать docker-compose для создания среды стека LEMP (LEMP=Linux — Nginx — MySQL — PHP). Мы будем запускать все компоненты в разных контейнерах Docker, мы настроим контейнер Nginx, контейнер PHP, контейнер PHPMyAdmin и контейнер MySQL/MariaDB.

    Предпосылки

    • Сервер Ubuntu 16.04 (64-разрядная версия)
    • Привилегии root

    Шаг 1 — Установите Докер

    На этом этапе мы установим Docker. Docker доступен в репозитории Ubuntu, просто обновите репозиторий, а затем установите его.

    Обновите репозиторий Ubuntu и выполните обновление:

    sudo apt-get update
    sudo apt-get upgrade

    Установите последнюю версию Docker из репозитория Ubuntu.

    sudo apt-get install -y docker.io

    Запустите докер и включите его запуск во время загрузки:

    systemctl start docker
    systemctl enable docker

    Службы Docker работают.

    Затем вы можете попробовать использовать докер с командой ниже, чтобы проверить его:

    docker run hello-world

    Привет, мир из докера.

    Шаг 2 — Установите Docker-Compose

    На первом этапе мы уже установили Docker. Теперь установим docker-compose.

    Нам нужен python-pip для установки compose, установите python и python-pip с помощью apt:

    sudo apt-get install -y python python-pip

    Когда установка будет завершена, установите docker-compose с помощью команды pip.

    pip install docker-compose

    Теперь проверьте версию docker-compose:

    docker-compose --version

    Докер-композитор был установлен.

    Шаг 3. Создайте и настройте среду Docker.

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

    Добавьте нового пользователя с именем hakase (выберите свое собственное имя пользователя здесь, если хотите):

    useradd -m -s /bin/bash hakase
    passwd hakase

    Затем добавьте нового пользователя в группу докеров и перезапустите докер.

    usermod -a -G docker hakase
    sudo systemctl restart docker

    Теперь пользователь hakase может использовать docker без sudo.

    Затем от пользователя root войдите под пользователем hakase с помощью su.

    su - hakase

    Создайте новый каталог для среды создания.

    mkdir lemp-compose/
    cd lemp-compose/

    Это наша среда создания докеров, все файлы, которые должны находиться в контейнере Docker, должны находиться в этом каталоге. Когда мы используем docker-compose, нам нужен файл .yml с именем docker-compose.yml.

    В каталоге lemp-compose создайте несколько новых каталогов и файл docker-compose.yml:

    touch docker-compose.yml
    mkdir -p {logs,nginx,public,db-data}

    • logs: каталог для файлов журналов Nginx.
    • nginx: содержит конфигурацию Nginx, такую как виртуальный хост и т. д.
    • public: каталог для веб-файлов, index.html и файла информации PHP.
    • db-data: том каталога данных MariaDB.

    Создайте файлы журнала error.log и access.log в каталоге журналов.

    touch logs/{error,access}.log

    Создайте новый файл конфигурации виртуального хоста nginx в каталоге nginx:

    vim nginx/app.conf

    Вставьте конфигурацию ниже:

    upstream php {
            server phpfpm:9000;
    }

    server {

            server_name 193.70.36.50;

            error_log "/opt/bitnami/nginx/logs/myapp-error.log";
            access_log  "/opt/bitnami/nginx/logs/myapp-access.log";

            root /myapps;
            index index.php index.html;

            location / {

                    try_files $uri $uri/ /index.php?$args;
            }

            location ~ \.php$ {

                    include fastcgi.conf;
                    fastcgi_intercept_errors on;
                    fastcgi_pass php;
            }

            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                    expires max;
                    log_not_found off;
            }
    }

    Сохраните файл и выйдите из vim.

    Создайте новый файл index.html и файл информации PHP в общем каталоге.

    echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
    echo '<?php phpinfo(); ?>' > public/info.php

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

    tree

    Шаг 4. Конфигурация файла docker-compose.yml

    На предыдущем шаге мы создали каталоги и файлы, необходимые для наших контейнеров. На этом этапе мы хотим отредактировать файл docker-compose.yml. В файле docker-compose.yml мы определим наши службы для стека LEMP, базовые образы для каждого контейнера и тома докеров.

    Войдите в систему под пользователем hakase и отредактируйте файл docker-compose.yml с помощью vim:

    su - hakase
    cd lemp-compose/
    vim docker-compose.yml

    - Определить сервисы Nginx

    Вставьте конфигурацию nginx ниже:

    nginx:
        image: 'bitnami/nginx'
        ports:
            - '80:80'
        links:
            - phpfpm
        volumes:
            - ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
            - ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
            - ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
            - ./public:/myapps

    В этой конфигурации мы уже определили:

    • nginx: имя службы
    • изображение: использовались образы докеров bitnami/nginx.
    • ports: открыть порт 80 контейнера для порта 80 хоста.
    • ссылки: связывает сервисный контейнер nginx с контейнером phpfpm.
    • тома: подключение локальных каталогов к контейнеру. Смонтируйте каталог файлов журналов, смонтируйте конфигурацию виртуального хоста Nginx и смонтируйте корневой веб-каталог.

    - Определить службы PHP-fpm

    Вставьте конфигурацию под блоком Nginx:

    phpfpm:
        image: 'bitnami/php-fpm'
        ports:
            - '9000:9000'
        volumes:
            - ./public:/myapps

    Мы определили здесь:

    • phpfpm: определите имя службы.
    • image: определите базовое изображение для службы phpfpm с изображением bitnami/php-fpm.
    • ports: мы запускаем PHP-fpm с TCP-портом 9000 и открываем порт 9000 для хоста.
    • volumes: подключите общедоступный корневой веб-каталог к myapps в контейнере.

    - Определить службу MySQL

    В третьем блоке вставьте приведенную ниже конфигурацию для сервисного контейнера MariaDB:

    mysql:
        image: 'mariadb'
        ports:
            - '3306:3306'
        volumes:
            - ./db-data:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=hakase-labs123

    Здесь вы можете видеть, что мы используем:

    • mysql: в качестве имени службы.
    • image: контейнер основан на образах докеров mariadb.
    • ports: служебный контейнер, использующий порт 3306 для подключения к MySQL, и предоставление его хосту через порт 3306 .
    • тома: каталог db-data mysql
    • environment: установите переменную среды MYSQL_ROOT_PASSWORD для корневого пароля mysql на образы докеров, выполняемые при сборке контейнера.

    - Конфигурация сервисов PHPMyAdmin

    Последний блок, вставьте конфигурацию ниже:

    phpmyadmin:
        image: 'phpmyadmin/phpmyadmin'
        restart: always
        ports:
           - '8080:80'
        links:
            - mysql:mysql
        environment:
            MYSQL_USERNAME: root
            MYSQL_ROOT_PASSWORD: hakase-labs123
            PMA_HOST: mysql

    Мы используем образ докера phpmyadmin, сопоставляем порт контейнера с 80 по 8080 на хосте, связываем контейнер с контейнером mariadb, устанавливаем перезапуск всегда и устанавливаем некоторые переменные среды образа докера, включая набор PMA_HOST.

    Сохраните файл и выйдите из vim.

    Вы можете увидеть полный пример на github.

    Шаг 5 — Запустите Docker-Compose

    Теперь все готово для запуска docker-compose. Примечание: когда вы хотите запустить docker-compose, вы должны находиться в каталоге проекта docker-compose и убедиться, что есть файл yml с конфигурацией компоновки.

    Запустите команду ниже, чтобы раскрутить стек LEMP:

    docker-compose up -d

    -d: работает как демон или в фоновом режиме

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

    docker-compose ps

    Теперь у нас есть четыре контейнера с Nginx, PHP-fpm, MariaDB и PHPMyAdmin.

    Шаг 6 — Тестирование

    Проверка портов, которые использует докер-прокси на хосте.

    netstat -plntu

    Мы видим порт 80 для контейнера Nginx, порт 3306 для контейнера MariaDB, порт 9000 для контейнера php-fpm и порт 8080 для контейнера PHPMyAdmin.

    Получите доступ к порту 80 из веб-браузера, и вы увидите наш файл index.html.

    Убедитесь, что PHP-fpm запущен, откройте его из веб-браузера.

    Получите доступ к контейнеру MySQL в оболочке MySQL.

    docker-compose exec mysql bash
    mysql -u root -p
    TYPE MYSQL PASSWORD: hakase-labs123

    Теперь создайте новую базу данных:

    create database hakase_db;
    exit

    Контейнер оболочки mysql MariaDB доступен, и мы создали новую базу данных hakase_db.

    Затем войдите в PHPMyAdmin через порт 8080: http://serverip-address:8080/.

    Вы увидите страницу входа в PHPMyAdmin, просто введите имя пользователя root и пароль hakase-labs123.

    Вы будете автоматически подключены к контейнеру mysql, определенному в переменной среды PMA_HOST.

    Нажмите «Перейти», и вы увидите панель управления phpmyadmin, которая подключена к контейнеру mysql.

    Успех! Стек LEMP работает в конфигурации docker-compose, состоящей из четырех контейнеров.

    Ссылка

    • https://hub.docker.com/r/bitnami/nginx/
    • https://hub.docker.com/r/bitnami/php-fpm/
    • https://hub.docker.com/_/mariadb/
    • https://hub.docker.com/r/phpmyadmin/phpmyadmin/
    • https://docs.docker.com/compose/
    • https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose
    • https://linux-console.net/tutorial/how-to-create-docker-images-with-dockerfile/