2015-10-20 12 views
5

Costruisco 2 finestre mobili, una finestra mobile con apache, una finestra mobile con php5 e utilizzo la finestra mobile-compose per iniziare.docker apache link docker php

apache2 Dockerfile in Directoy apache2:

FROM debian:latest 
RUN apt-get update && apt-get install -y apache2 
ADD test.php /var/www/html 

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

e test.php:

<?php 
phpinfo(); 
?> 

PHP5 Dorckerfile nella directory php:

FROM debian:latest 
RUN apt-get update && apt-get install -y php5 

finestra mobile-compose.yml:

apache: 
    build: ./apache2 
    container_name: apache 
    ports: 
     - "80:80" 
    links: 
     - "php5" 

php5: 
    build: ./php 
    container_name: php 

poi corro: assistente

docker-compose up 

apache2 avviato correttamente. Poi ho accedere a questo server da http://server_ip, poi ricevo indice della debian.But quando accedo http://server_ip/test.php, basta verificare questo:

<?php 
phpinfo(); 
?> 

php proprio non work.And non perché lo faccio.

+1

php e apache ora vivono in due diversi contenitori e possono interagire tra loro solo tramite chiamate/collegamenti web/scambio dati ma no semplicemente chiamando l'un l'altro. Potresti voler creare un contenitore combinato php5/apache e assicurarti di usare il modulo php5. –

+0

@WolfgangFahl cosa intendi con "interagire tra loro tramite chiamate/link/scambio dati"? Non riesco a capire – xina1i

+0

Puoi usare i contenitori separati per apache e php ma devi usare 'php-fpm' che gira su alcune porte e quindi devi configurare' php-fpm' nel tuo file di configurazione di apache. –

risposta

1

Direi che non è possibile eseguire contenitori separati per php come modulo apache. Immagino che questo sia ciò che intendeva Wolfgang.

Se si desidera separare apache e php in due contenitori diversi, è necessario eseguire php come fpm.
Date un'occhiata qui per l'ispirazione: How to correctly link php-fpm and Nginx Docker containers together?

Se avete bisogno di eseguire Apache e PHP come apache_mod utilizzare un contenitore combinato come questo: https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile da: https://hub.docker.com/_/php/

4

È possibile separare Apache e PHP con PHP-FPM . È comunque necessario che DocumentRoot sia montato su entrambi i contenitori.

Apache deve essere in grado di accedere ai file localmente (all'interno del suo contenitore) e al server PHP-FPM.

Attualmente sto lavorando sullo stesso, uno sguardo alla mia finestra mobile-compose.yml qui

https://github.com/cytopia/devilbox/blob/master/docker-compose.yml

Entrambi i volumi (in PHP e Apache) sono montati a /shared/httpd

0

Se non è specificamente necessario separare Apache da PHP, quindi potresti essere utile con uno php:5.6-apache image ufficiale fornito con Apache.

Ad esempio, il docker-compose.yml potrebbe essere simile a questa:

version: '3' 
services: 
    web: 
    image: php:5.6-apache 
    ports: 
     - "8080:80" # Map container port 80 to host machine port 8080 
    volumes: 
     - ".:/var/www/html" # Mount current folder as volume to container at /var/www/html 

Oppure, per una più vita reale esempio, se hai bisogno anche di almeno uno dei seguenti:

  • A radice web personalizzato (per laravel, Symfony, ecc)
  • altri moduli di Apache installati
  • Altre estensioni PHP installate

si potrebbe fare qualcosa di più simile a questo:

version: '3' 
services: 
    web: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    ports: 
     - "8080:80" # Map container port 80 to host machine port 8080 
    environment: 
     APACHE_DOCUMENT_ROOT: "/var/www/yourapp.com/public" 
    volumes: 
     - ".:/var/www/yourapp.com" # Mount current folder as volume to container at /var/www/yourapp.com 

E poi il tuo Dockerfile (che abbiamo di riferimento dal docker-compose.yml sopra):

FROM php:5.6-apache 

# Declare an environment variable with a default value for changing Apache's document root 
# We will override this in docker-compose.yml 
ENV APACHE_DOCUMENT_ROOT /var/www/html 

# Configure web root 
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf 
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf 

# Install additional Apache modules 
# This example: mod_rewrite & mod_headers 
RUN a2enmod rewrite headers 

# Install additional PHP extensions 
# This example: memcached & mysqli 
# For other extensions see official docs: 
# https://hub.docker.com/_/php (section: How to install more PHP extensions) 
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \ 
    && pecl install memcached-2.2.0 \ 
    && docker-php-ext-enable memcached \ 
    && docker-php-ext-install -j$(nproc) mysqli