2016-09-24 5 views
3

I in Verbindung mit drei getrennten Behältern zusammen:Docker komponieren php-fpm, nginx, MySQL und Verwendung wp-cli auf nginx

mein Ziel ist, wp-cli-Installation vor dem Quellcode auszuführen, der in den nginx-Container kopiert wird.

Fragen:

  1. versuchen Installationsskript von wp-cli von Dockerfile (my-nginx Bild) funktioniert gut, aber wenn ich irgendwelche wp-cli Befehle es gibt Fehler ausgeführt wird versuchen zu laufen: env: can't execute 'php': No such file or directory
  2. wp-cli Installationsskript (mit der rechten Abhängigkeit) funktioniert auch auf dockerfile.php-fpm (my-php Bild), es gibt auch einen Fehler: Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under. und bietet mir diesen Befehl mit der Flagge --allow- root, das ist in diesem Fall schlecht, weil ich wp Benutzerberechtigungen verwenden möchte. oder um diesen Befehl als einen anderen Benutzer auszuführen.

Kern configuretions

Andockfensters-compose.yml:

version: '2' 
services: 

my-nginx: 
    build: . 
    volumes: 
     - .:/var/www/html 
    ports: 
     - "8080:80" 
    links: 
     - my-php 
     - my-mysql 
    my-php: 
    build: 
     context: . 
     dockerfile: Dockerfile.php-fpm 
    volumes: 
     - .:/var/www/html 
    ports: 
     - "9000:9000" 
    my-mysql: 
    image: mariadb:5.5 
    volumes: 
     - /var/lib/mysql 

nginx.conf: https://github.com/conetix/docker-wordpress-wp-cli

Option:

server { 
    server_name _; 
    listen 80 default_server; 

    root /var/www/html; 
    index index.php index.html; 

    access_log /dev/stdout; 
    error_log /dev/stdout info; 

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

    location ~ .php$ { 
    include fastcgi_params; 
    fastcgi_pass my-php:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 
} 

wp-cli Integration von geklont 1

Dokerfile:

FROM nginx:1.10-alpine 

# add root dir 
RUN mkdir -p /var/www/html 
WORKDIR /var/www/html 
ENV WP_ROOT /var/www/html 

# Install requirements for wp-cli support 
RUN apk update \ 
    && apk add less mysql-client sudo curl 


# copy nginx configuration 
COPY nginx.conf /etc/nginx/conf.d/default.conf 


# Add WP-CLI 
RUN curl -o /bin/wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 
COPY wp-su.sh /bin/wp 
RUN chmod +x /bin/wp-cli.phar \ 
    && sudo mv /bin/wp-cli.phar /usr/local/bin/wp 

RUN wp core download --allow-root 

# copy all files for current dir (should be theme or plugin folder) 
COPY . ./ 

Dockergile.php-fpm

FROM php:7.0.6-fpm-alpine 

VOLUME /var/www/html 
RUN docker-php-ext-install -j $(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) iconv gd mbstring fileinfo curl xmlreader xmlwriter mysqli 

Option 2

Dokerfile:

FROM nginx:1.10-alpine 

# add root dir 
RUN mkdir -p /var/www/html 
WORKDIR /var/www/html 

RUN apk update \ 
    && apk add less mysql-client sudo 


# copy nginx configuration 
COPY nginx.conf /etc/nginx/conf.d/default.conf 


# copy all files for current dir (should be theme or plugin folder) 
COPY . ./ 

Dockergile.php-fpm

FROM php:7.0.6-fpm-alpine 

VOLUME /var/www/html 
RUN docker-php-ext-install -j $(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) iconv gd mbstring fileinfo curl xmlreader xmlwriter mysqli 

# Install requirements for wp-cli support 
RUN apk update \ 
    && apk add curl sudo less 
ENV WP_ROOT /var/www/html 

# Add WP-CLI 
RUN curl -o /bin/wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 
COPY wp-su.sh /bin/wp 
RUN chmod +x /bin/wp-cli.phar \ 
    && sudo mv /bin/wp-cli.phar /usr/local/bin/wp 

RUN wp core download 

allgemeine Fragen:

  1. was ist die beste Praxis für die Benutzer premissions innerhalb dockers?
  2. wp-cli integration von https://github.com/conetix/docker-wordpress-wp-cli/blob/master/wp-su.sh verwendet www-data user - soll ich diesen benutzer zu meinem docker hinzufügen, und wenn ja - zu welchem? ngnix oder php-fpm und warum.
  3. laufenden wp donlow Core von php-fpm Container appaers, als ob es die Dateien herunterladen, aber wenn ich versuche, beim Ausführen ausführen, keine dieser Dateien unter/var/www/html angezeigt. Gibt es eine bestimmte Möglichkeit, Bilder zu mounten?
  4. Warum ist 'PHP' nicht verfügbar Befehl von My-Nginx, wenn ich Volumen
    my-php Bild? Ich muss PHP auch auf diesem Bild installieren?

Antwort

6

PHP ist nicht in Ihrem Nginx-Container installiert. Ich würde argumentieren, dass es auch dort nicht installiert werden sollte. Verwenden Sie Ihren php fpm Container, um WP CLI auszuführen. Hier ist, wie ich WP CLI bekommen läuft ein ähnliches Setup mit:

Docker-compose.yml:

version: '2' 
services: 
    mysql: 
    image: mysql:latest 
    volumes: 
     - "../.data/db:/var/lib/mysql" 
    restart: always 
    environment: 
     MYSQL_ROOT_PASSWORD: password 
     MYSQL_DATABASE: my_database 
     MYSQL_USER: my_user 
     MYSQL_PASSWORD: password 
    phpfpm: 
    depends_on: 
     - mysql 
    image: my/phpfpm:latest 
    build: ./docker/php-fpm 
    volumes: 
     - ".:/var/www/html" 
     - "./docker/php-fpm/php.ini:/usr/local/etc/php/php.ini" 
     - "./docker/php-fpm/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini" 
    links: 
     - mysql 
    restart: always 
    extra_hosts: 
     - "mysite.dev:172.18.0.1" # Use the gateway address for your docker network for the ip address. This is so that PHP FPM can find nginx for the postback to do things like cron jobs with WordPress 
    nginx: 
    depends_on: 
     - phpfpm 
    ports: 
     - "80:80" 
    image: nginx:latest 
    volumes: 
     - ".:/var/www/html" 
     - "./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf" 
    links: 
     - phpfpm 
    restart: always 

Docker/php-fpm/Dockerfile:

FROM php:5.5-fpm 

ARG INSTALL_XDEBUG=true 
ENV INSTALL_XDEBUG ${INSTALL_XDEBUG} 
RUN if [ ${INSTALL_XDEBUG} = true ]; then \ 
    pecl install xdebug && \ 
    docker-php-ext-enable xdebug \ 
;fi 

RUN apt-get update && apt-get install -y libz-dev libmemcached-dev libjpeg-dev libpng-dev \ 
    && pecl install memcached \ 
    && docker-php-ext-enable memcached \ 
    && docker-php-ext-install -j$(nproc) pdo pdo_mysql mysqli gd \ 
    && docker-php-ext-enable pdo pdo_mysql mysqli gd 

RUN docker-php-ext-install zip \ 
    && docker-php-ext-enable zip 

RUN curl https://getcomposer.org/download/1.2.0/composer.phar > /tmp/composer.phar \ 
    && chmod +x /tmp/composer.phar \ 
    && mv /tmp/composer.phar /usr/local/bin/composer \ 
    && apt-get update && apt-get install -y less \ 
    && curl https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar > /tmp/wp-cli.phar \ 
    && chmod +x /tmp/wp-cli.phar \ 
    && mv /tmp/wp-cli.phar /usr/local/bin/wp 

CMD ["php-fpm"] 

EXPOSE 9000 

Ich benutze auch ein Memcached Behälter Aus diesem Grund installiert die Dockerdatei auch die Memcached-Erweiterung. Die wichtigen Teile sind, wo es WP CLI installiert und es an Ort und Stelle bewegt. Sie können auch die installierte Version von PHP ändern, indem Sie diese in der Dockerdatei ändern. Sobald Sie Ihren Cluster und läuft mit WP CLI installiert PHP haben, können Sie den folgenden Befehl ausführen, um wp cli Befehle im Inneren des Behälters laufen:

docker exec -u www-data <container_name> wp ... # whatever command after that 

Ich habe Aliase für verschiedene Projekte, die bereits die Containernamen:

alias mywp="docker exec -u www-data mysite_phpfpm_1 wp" 

und das lässt mich laufen wp wie diese Befehle:

mywp core update-db --network 
mywp post meta list 2119 
+0

wo www-data Benutzer definiert ist? –

+0

Es existiert einfach in der PHP FPM-Box. Die PHP-Box hat es zuvor als Benutzer definiert, der die fpm-Prozesse ausführt. –