Обмен технологиями

【Docker-compose】Создание среды PHP

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Оркестровка контейнеров с помощью Docker-compose

1. Что такое

Compose — это инструментальное программное обеспечение, выпущенное компанией Docker, которое может управлять несколькими контейнерами Docker для формирования приложения. Вам необходимо определить файл конфигурации docker-compose.yml в формате YAML и написать отношения вызовов между несколькими контейнерами.Затем с помощью всего лишь одной команды вы можете запустить/остановить эти контейнеры одновременно.

  • · Docker-Compose — это официальный проект Docker с открытым исходным кодом, отвечающий за реализацию быстрой оркестровки контейнерных кластеров Docker.

2. Что ты можешь сделать?

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

Если мне нужно развернуть несколько сервисов одновременно, нужно ли мне писать отдельный Dockerfile для каждого сервиса, а затем создавать образ и контейнер? Это утомительно, поэтому docker официально предоставляет нам инструмент развертывания нескольких сервисов с помощью docker-compose? .

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

Compose позволяет пользователям определять набор связанных контейнеров приложений как проект с помощью отдельного файла шаблона docker-compose.yml (формат YAML).

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

3. Куда пойти

  • Официальный сайт · https://docs.docker.com/compose/compose-file/compose-file-v3/
  • https://docs.docker.com/compose/install/

Адрес ускоренной загрузки

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 1

Добавить разрешения на исполняемый файл

chmod +x /usr/local/bin/docker-compose
  • 1

Проверьте, прошла ли установка успешно

docker-compose --version
  • 1
  • удалить

    sudo rm / usr/ local/ bin/docker-compose
    
    • 1

4. Сформулируйте основные концепции

  • Три шага для использования Compose

    Напишите Dockerfile, чтобы определить каждое приложение микросервиса и создать соответствующий файл образа.

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

    Наконец, выполните команду docker-compose up, чтобы запустить все приложение, завершить развертывание одним щелчком мыши и выйти в Интернет.

  • Составляйте общие команды

    docker-compose -h # Посмотреть справку

    docker-compose up # Запустить все службы docker-compose

    docker-compose up -d # Запустить все службы docker-compose и запустить их в фоновом режиме

    docker-compose down # Остановить и удалить контейнеры, сети, тома и изображения.

    Идентификатор службы в docker-compose exec yml # Введите внутри экземпляра контейнера

    docker-compose exec файл docker-compose.yml, записанный идентификатор службы /bin/bash

    docker-compose ps # Отобразить все запущенные контейнеры, управляемые в данный момент docker-compose

    docker-compose top # Отобразить текущие процессы контейнера, управляемые docker-compose

    Идентификатор службы в журналах docker-compose yml # Просмотр журнала вывода контейнера

    docker-compose config # Проверить конфигурацию

    docker-compose config -q # Проверяйте конфигурацию и вывод только в случае возникновения проблем

    docker-compose restart # Перезапустить службу

    docker-compose start # Запустить службу

    docker-compose stop # Остановить службу

установка команды docker-machine

 base=https://get.daocloud.io/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
  • 1
  • 2
  • 3

5. Практический бой: настроить DNS-сервер в Linux и собрать среду lemp (Nginx + MySQL (MariaDB) + PHP)

Требовать

1) В виртуальной машине Linux настройте IP-адрес 192.168.90.215 (x — последние 3 цифры вашего студенческого билета, y указывается вами), и виртуальная машина сможет нормально выходить в Интернет;

2) Настройте DNS-сервер, домен cr.com (abc — инициалы вашего имени), после завершения настройки с помощью nslookup проверьте прямое и обратное разрешение;

3) Настройте LEMP (т. е. Nginx + MySQL (MariaDB) + PHP) и зайдите на сайт www.cr.com (abc — ваши инициалы) через реальный хост для доступа к встроенному LEMP. (Вы не можете изменить файл хостов для локального разрешения, но должны использовать свой собственный настроенный DNS)

6. Настройте разрешение DNS

Сначала настройте статический IP для Linux http://alleniverrui.top/archives/linux-pei-zhi-jing-tai-ip (если его невозможно открыть, измените адрес ниже)

//делать

Отредактируйте файл /etc/named.conf.

vim /etc/named.conf
  • 1

Измените значения прослушивания и запроса на любые

Настройте DNS для разрешения cr.com до 192.168.90.215.

vim /etc/named.rfc1912.zones 
  • 1

Добавьте в конец файла

zone "cr.com" IN {
   type master;
   file "cr.com.zone";
  allow-update { none; };
};
zone "215.90.168.192.in-addr.arpa" IN {
        type master;
        file "com.cr.loop";
        allow-update { none; };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

:wq, чтобы сохранить

Отредактируйте соответствующий файл конфигурации vim /var/named/com.cr.loop.

Добавьте следующее

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     cr.com.
        NS      ns.cr.com.
ns      A       192.168.90.215
201     PTR     www.cr.com.
201     PTR     email.cr.com.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Отредактируйте vim /var/named/cr.com.zone.

Добавьте следующее

$TTL 1D
@       IN SOA  cr.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.90.215
        AAAA    ::1
        NS      ns.server.com.
ns      IN A    192.168.90.215
www     IN A    192.168.90.215
email   IN A    192.168.90.215
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Перезапустить DNS

systemctl restart named
  • 1

Посмотреть статус DNS

systemctl status named
  • 1

Началось успешно

Прямой анализ nslookup cr.com

Обратный анализ nslookup 192.168.90.215

Настроить лемп

Запишите файл docker-compose.yml в /mydocker/lemp.

vim /mydocker/lemp/docker-compose.yml заполните следующее содержимое

nginx:
    build: ./nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app

php:
    build: ./php/
    expose:
        - 9000
    links:
        - mysql
    volumes_from:
        - app

app:
    image: php:7.0-fpm
    volumes:
        - .:/var/www/html
    command: "true"

mysql:
    image: mysql:latest
    volumes_from:
        - data
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: bookmarks
        MYSQL_USER: cr
        MYSQL_PASSWORD: cr123

data:
    image: mysql:latest
    volumes:
        - /var/lib/mysql
    command: "true"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql
    environment:
        PMA_HOST: mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

Создайте файл nginx/Dockerfile в /mydocker/lemp/.

заполнять

FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf
  • 1
  • 2
  • 3

Создать default.conf

Заполните следующее содержимое

 

server {

  listen 80 default_server;

  root /var/www/html;

  index index.html index.php;

 

  charset utf-8;

 

  location / {

try_files $uri $uri/ /index.php?$query_string;

  }

 

  location = /favicon.ico { access_log off; log_not_found off; }

  location = /robots.txt  { access_log off; log_not_found off; }

 

  access_log off;

  error_log  /var/log/nginx/error.log error;

 

  sendfile off;

 

  client_max_body_size 100m;

 

  location ~ .php$ {

  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_intercept_errors off;

fastcgi_buffer_size 16k;

 fastcgi_buffers 4 16k;

  }

 

  location ~ /.ht {

 deny all;

  }

}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

Создайте файл php/Dockerfile в /mydocker/lemp/.

заполнять

FROM php:7.0-fpm

RUN docker-php-ext-install mysqli

 
  • 1
  • 2
  • 3
  • 4
  • 5

Оркестрация докер-контейнеров

 docker-compose up -d 
  • 1

Docker ps для просмотра статуса работы контейнера

Успешно началось

Эта машина получает доступ к среде php и среде nginx через IP.

Доступ успешен

Настройте локальный DNS-сервер как виртуальную машину с адресом 192.168.90.215.

Откройте окно cmd и выполните пинг-тест на cr.com.

Пинг успешно выполнен

Доступ к встроенной среде PHP через доменное имя

Изменить файл конфигурации nginx

Окончательное доменное имя напрямую ведет на сайт.