Drupal Docker: Dockerfiles
이 게시물에서는 필요한 세 가지 Dockerfile을 살펴봅니다.
마리아DB
먼저 간단한 작업을 수행해 보겠습니다. 데이터베이스용 MariaDB 컨테이너입니다. 이것은 일반적인 공식 MariaDB 이미지를 사용하고 있으며 버전에 대해서도 까다롭지 않습니다. 이것은 전체 파일입니다.
# Use the default MariaDB image, not a specific Oracle Linux one
FROM mariadb:latest
# Expose the MySQL port to be accessible to the web container.
EXPOSE 3306
PHP
이 이미지는 이 특정 호스팅 환경의 요구 사항인 Oracle Linux에서 시작합니다.
FROM oraclelinux:8
USER root
SHELL ["/bin/bash", "-c"]
이 컨테이너에 직접 액세스하지 않기 때문에 실제로는 필요하지 않을 수 있지만 다른 유용한 유틸리티를 추가합니다.
# Install other useful packages
RUN dnf install -y curl wget zip
PHP-FPM을 실행하는 데 필요한 디렉토리를 생성합니다.
# Create required directory
RUN mkdir -p /run/php-fpm
다른 저장소가 필요한 PHP 8.0을 설치합니다(적어도 지금까지는).
# Install PHP 8.0, which needs a different repository
RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
RUN dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
RUN dnf -y module reset php
RUN dnf -y module enable php:remi-8.0
RUN dnf -y install php
Drupal에서 권장하지 않는 몇 가지를 포함하여 여러 PHP 확장을 추가합니다(apcu 및 uploadprogress).
# Install PHP extensions, including PECL with APCU and UploadProgress extensions, recommended by Drupal
RUN dnf install -y php-gd php-pdo php-zip php-mysqlnd gcc make php-devel php-pear php-pecl-apcu php-pecl-uploadprogress
PHP 디버깅 도구인 XDebug를 설치합니다.
# Install XDebug
RUN dnf install -y php-pecl-xdebug
RUN touch /var/log/xdebug.log
COPY /conf/xdebug.ini /etc/php.d/xdebug.ini
성능을 향상시키기 위해 php.ini를 몇 가지 변경합니다.
# Increase resources for PHP
RUN sed -i "s/max_execution_time = 30/max_execution_time = 300/g" /etc/php.ini
RUN sed -i "s/max_input_time = 60/max_input_time = 600/g" /etc/php.ini
RUN sed -i "s/memory_limit = 128M/memory_limit = 2048M/g" /etc/php.ini
RUN sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 128M/g" /etc/php.ini
RUN sed -i "s/post_max_size = 8M/post_max_size = 0/g" /etc/php.ini
RUN sed -i "s/display_errors = Off/display_errors = On/g" /etc/php.ini
RUN echo "# Increase timeout" >> /etc/httpd/conf.d/php.conf
RUN echo "Timeout 1200" >> /etc/httpd/conf.d/php.conf
RUN echo "ProxyTimeout 1200" >> /etc/httpd/conf.d/php.conf
다른 클라이언트(웹 컨테이너)의 수신기를 허용하도록 php-fpm 구성을 업데이트합니다.
# Update PHP-FPM configuration including allowing listeners from other clients, defining the OPCache, and listening on port 9000
RUN sed -i "s/listen.allowed_clients = 127.0.0.1/;listen.allowed_clients = 127.0.0.1/g" /etc/php-fpm.d/www.conf
RUN sed -i "s/;php_value[opcache.file_cache] = \/var\/lib\/php\/opcache/php_value[opcache.file_cache] = \/var\/lib\/php\/opcache/g" /etc/php-fpm.d/www.conf
RUN sed -i "s/listen = \/run\/php-fpm\/www.sock/listen = 9000/g" /etc/php-fpm.d/www.conf
마지막으로 이 컨테이너의 포그라운드에서 실행되는 서비스로 php-fpm을 시작합니다.
# Start PHP-FPM
ENTRYPOINT ["php-fpm"]
CMD ["-F", "-R"]
아파치
마지막 컨테이너인 web은 devcontainer가 연결하여 Apache를 기본 서비스로 실행하는 기본 컨테이너입니다. 이것의 대부분은 PHP 컨테이너를 반복하므로 다시는 다루지 않겠습니다. 다른 점은 다음과 같습니다.
여기에는 몇 가지 더 유용한 패키지가 포함되어 있습니다.
# Install other needed packages
RUN dnf install -y curl wget git zip mod_ssl httpd php-gd openssl which mariadb sudo patch vim
https 브라우징을 위한 자체 서명된 SSL 인증서 생성을 포함하여 Apache를 구성합니다.
# Apache configuration, including SSL certificates and logs
RUN mkdir -p /etc/httpd/certs
COPY /conf/openssl-config.txt /etc/httpd/certs/openssl-config.txt
RUN openssl req -batch -newkey rsa:4096 -nodes -sha256 -keyout /etc/httpd/certs/local.drupal.com.key -x509 -days 3650 -out /etc/httpd/certs/local.drupal.com.crt -config /etc/httpd/certs/openssl-config.txt
RUN openssl req -batch -newkey rsa:4096 -nodes -sha256 -keyout /etc/pki/tls/private/localhost.key -x509 -days 3650 -out /etc/pki/tls/certs/localhost.crt -config /etc/httpd/certs/openssl-config.txt
RUN mkdir -p /var/log/local.drupal.com
COPY /conf/local.drupal.com.conf /etc/httpd/conf.d/local.drupal.com.conf
drupal 사용자를 추가하고 다른 권한을 변경하여 sudo 없이 웹 폴더를 직접 편집하고 필요할 때 sudo를 수행할 수 있습니다.
# Add drupal user within the apache group
RUN useradd drupal
RUN usermod -aG apache drupal
# Change default permissions to 775 instead of 755, so that the drupal user can write to the web root
RUN umask 0002
# Create sudo group, add drupal user to it, and allow those users to sudo without password
RUN groupadd sudo
RUN usermod -aG sudo drupal
RUN sed -i "s/# %wheel ALL=(ALL) NOPASSWD: ALL/%sudo ALL=(ALL) NOPASSWD: ALL/g" /etc/sudoers
Drupal 관리에 필수적인 작곡가를 설치합니다.
# Install latest composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --install-dir /usr/bin --filename composer
RUN php -r "unlink('composer-setup.php');"
ENV COMPOSER_PROCESS_TIMEOUT=9999
접근성 테스트를 위해 pa11y를 설치합니다.
# Install pa11y accessibility testing tool, including NodeJS
RUN dnf install -y nodejs pango.x86_64 libXcomposite.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 nss libdrm libgbm xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc libxshmfence
RUN npm install pa11y -g --unsafe-perm=true --allow-root
이것은 이후 게시물에서 자세히 설명할 postCreateCommand 스크립트에 실행 권한을 추가합니다.
# Scripts for further actions to take on creation and attachment
COPY ./scripts/postCreateCommand.sh /postCreateCommand.sh
RUN ["chmod", "+x", "/postCreateCommand.sh"]
마지막으로 기본 포그라운드 프로세스로 Apache를 실행합니다.
# Start Apache
ENTRYPOINT ["/usr/sbin/httpd"]
CMD ["-D", "FOREGROUND"]
Reference
이 문제에 관하여(Drupal Docker: Dockerfiles), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ryanlrobinson/drupal-docker-the-dockerfiles-gkb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)