Docker für PHP-Entwickler: Grundkenntnisse

               In Abschnitt 8.13 („PHP-FPM einrichten“) und Abschnitt 9.13 („Docker Logs“) haben wir die Anweisung CMD in unserer                Dockerfile-Datei benutzt um festzulegen, welcher Standardbefehl ausgeführt werden soll, wenn ein Docker-Behälter von                einem Docker-Bild gestartet wird.

               Es ist möglich, CMD zu verwenden, um Parameter zu setzen, die von von Docker-Bildern verwendet werden, wenn ein                bestimmter Docker-Behälter ausgeführt wird.

               Die Anweisung ENTRYPOINT sollte verwendet werden, wenn der Docker-Behälter immer denselben Basisbefehl                               verwenden soll UND/ODER (!) der Benutzer zusätzliche Befehle an das Ende der Befehlszeile anhängen darf.

               In unserem Fall erstellen wir das folgende Bash-Skript start-container.sh.

               Bei diesem Skript muss der Benutzer einen beliebigen Befehl eingeben. Wenn er das nicht tut, wird supervisord                                  standardmäßig gestartet.

               Wir fügen start-container.sh zu unserer Dockerfile Datei unten als unser ENTRYPOINT Skript hinzu.

               Das Docker-Bild wird dann neu aufgebaut.

start-container.sh
#!/usr/bin/env bash

##
# Stellt sicher, dass /.composer existiert und beschreibbar ist
#
if [ ! -d /.composer ]; then
    mkdir /.composer
fi

chmod -R ugo+rw /.composer

##
# Einen Befehl ausführen oder supervisord starten
#
if [ $# -gt 0 ];then
    # Wenn wir einen Befehl übergeben haben, führen Sie ihn aus
    exec "$@"
else
    # Andernfalls supervisord starten
    /usr/bin/supervisord
fi

Dockerfile Datei
FROM ubuntu:18.04

LABEL maintainer="Kâmi Barut-Wanayo"

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y gnupg tzdata \
    && echo "UTC" > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata

RUN apt-get update \
    && apt-get install -y curl zip unzip git supervisor sqlite3 \
       nginx php7.2-fpm php7.2-cli \
       php7.2-pgsql php7.2-sqlite3 php7.2-gd \
       php7.2-curl php7.2-memcached \
       php7.2-imap php7.2-mysql php7.2-mbstring \
       php7.2-xml php7.2-zip php7.2-bcmath php7.2-soap \
       php7.2-intl php7.2-readline php7.2-xdebug \
       php-msgpack php-igbinary \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
    && mkdir /run/php \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && echo "daemon off;" >> /etc/nginx/nginx.conf

RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

ADD default /etc/nginx/sites-available/default
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ADD php-fpm.conf /etc/php/7.2/fpm/php-fpm.conf
ADD start-container.sh /usr/bin/start-container
RUN chmod +x /usr/bin/start-container

ENTRYPOINT ["start-container"]

                 Wiederherstellung unseres Docker-Behälter-Bilders mit demselben Befehl, den wir in den vorherigen Abschnitten                  verwendet haben:

$ docker build -t  kbarut/app:latest -f docker/app/Dockerfile docker/app
							

Kâmi Barut-Wanayo © 2024 - 2025