Из-за изменений в моих привычках развертывания я решил переместить все в контейнер Docker.
Чтобы сравнить «голое железо» и Docker, я арендовал идентичный сервер в Contabo, настроил и развернул мой контейнер. Все получилось.
Но что-то было странно. Более высокая задержка, ощутимая задержка при загрузке – незначительная, но все же достаточная, чтобы спрашивать себя каждый раз, когда я загружаю страницу: есть ли у меня проблема?
Покопавшись глубже, я проверил этот инструмент: ab из Apache Foundation.
Результаты были шокирующими: (
Код: Выделить всё
ab -n 1000 -c 100 - собственное развертывание: полных запросов: 1000, невыполненных запросов: 0
- Docker: завершенных запросов : 1000, Неудачных запросов: 996 (+/- 200)
- 4 контейнер: mariadb, php, apache, traefik
- 3 контейнер: mariadb, php-apache, traefik
2 контейнер: mariadb, php-apache< /li>
Теперь я начинаю задаваться вопросом, могут ли Docker иметь недостатки, вызывающие эти проблемы.
Я дважды проверил конфигурацию php-fpmn, попытался ее оптимизировать. .. никаких изменений. Все, что я делал, по сути было пустой тратой времени.
Это содержимое моего файла compose.yml:
Код: Выделить всё
services:
myapp-db:
image: mariadb:11.5.2
container_name: myapp-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USER}
TZ: Europe/Berlin
volumes:
- myapp-dbdata:/var/lib/mysql
ports:
- "3306:3306"
myapp-apache-php:
build:
context: ./
dockerfile: .docker/Dockerfile-prod-ssl
container_name: myapp-apache-php
restart: unless-stopped
working_dir: /var/www/html
ports:
- "80:80"
- "443:443"
depends_on:
- myapp-db
volumes:
- myapp-webdata:/var/www/html
volumes:
myapp-dbdata:
myapp-webdata:
Код: Выделить всё
FROM ubuntu:24.04
# No tty
ENV DEBIAN_FRONTEND noninteractive
# Add repository for PHP 8.3 and Apache
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:ondrej/php
RUN add-apt-repository -y ppa:ondrej/apache2
RUN apt-get update
# Apache 2.4.xx and PHP
RUN apt-get update && apt-get -y install \
curl \
zip \
unzip \
php8.3-fpm \
libapache2-mod-php8.3 \
apache2 \
nano \
git \
certbot \
python3-certbot-apache
# Copy Certificate Script
COPY ./.docker/enable-ssl.sh /etc/apache2/enable-ssl.sh
# Install PHP extensions
RUN apt-get update && apt-get install -y \
php8.3-cli \
php8.3-fpm \
php8.3-common \
php8.3-pdo \
php8.3-mysql \
php8.3-zip \
php8.3-gd \
php8.3-mbstring \
php8.3-curl \
php8.3-xml \
php8.3-bcmath \
php8.3-intl \
php8.3-opcache
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Apache Configuration
COPY ./.docker/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN a2ensite 000-default.conf
# PHP Configuration
COPY ./.docker/custom-php.ini /etc/php/8.3/fpm/conf.d/custom-php.ini
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Disable Mod to switch to mpm_event
RUN a2dismod php8.3 && a2dismod mpm_prefork
# Copy root to WorkDir
COPY . /var/www/html
# Set working directory
WORKDIR /var/www/html
# Enable necessary Mods
RUN a2enmod mpm_event headers rewrite proxy_fcgi setenvif ssl expires
# Copy startscript
COPY ./.docker/start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh
# Starting Apache and PHP-FPM
CMD ["/usr/local/bin/start.sh"]
Подробнее здесь: https://stackoverflow.com/questions/793 ... -baremetal
Мобильная версия