Skip to content
Snippets Groups Projects
Commit 863095a7 authored by CANALS Gerome's avatar CANALS Gerome
Browse files

ajout de l'image php:7.1-cli

parent df796b1c
No related branches found
No related tags found
No related merge requests found
......@@ -26,17 +26,16 @@ $ docker-compose -f docker-compose.yml start
### machine(s) php
* un ou plusieurs services php/apache
* basés sur les images `canals/php`, les tags `:5.6` et `:7.1` sont utilisables
* un ou plusieurs services php/apache ou php-cli
* basés sur les images `canals/php`, les tags `:5.6`, `:7.1` et `7.1-cli` sont utilisables
* pour plus de détails, voir la [doc](https://hub.docker.com/r/canals/php/)
* conseils : utiliser les vhost et les déclarer dans votre `/etc/hosts`
* attention au nommage des containers lorsque l'on utilise plusieurs services de même type
* attention aux numéros de ports lorsque l'on utilise plusieurs services de même type
* pour transmettre des variables d'environnement aux containers, utiliser le chapitre env_file et définir
les variables dans le fichier web.env - Typiquement : http_proxy et https_proxy pour l'usage derrière un
proxy
####exemple :
####exemple : service php basé sur apache
```
services:
web:
......@@ -48,7 +47,7 @@ services:
ports:
- "5080:80"
- "5543:443"
env_file:
# env_file:
# - ./webenv.env
volumes :
- ./web:/var/www/web
......@@ -61,6 +60,21 @@ services:
# - mailcatcher:mail
# - postgres:pg
```
####exemple : service php-cli avec lancement du serveur embarqué :
```
services:
php:
image: canals/php:7.1-cli
ports:
- "8800:8000"
volumes:
- ./:/var/php
working_dir: /var/php
command: php -S 0.0.0.0:8000 web/index-cli.php
links :
- mysql:db
- mongo:mongo
```
### mysql + adminer
......
version: "3"
networks:
local_network:
driver: bridge
services:
web:
image: canals/php
......@@ -9,13 +14,36 @@ services:
ports:
- "5080:80"
- "5543:443"
env_file:
# - ./webenv.env
# env_file:
# - ./webenv.env
volumes :
- ./web:/var/www/web
- ./src:/var/www/src
- ./html:/var/www/html
- data:/var/www/data
networks:
- local_network
links :
- mysql:db
# - mongo:mongo
# - mail:mail
# - postgres:pg
php:
image: canals/php7.1-cli
container_name: php.local
expose:
- "8000"
ports:
- "8800:8000"
# env_file:
# - ./webenv.env
volumes:
- ./:/var/php
working_dir: /var/php
networks:
- local_network
command: php -S localhost:8000 index.php
links :
- mysql:db
# - mongo:mongo
......@@ -33,7 +61,9 @@ services:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=user
- MYSQL_PASSWORD=user
# - MYSQL_DATABASE=mydatab
- MYSQL_DATABASE=mydatab
networks:
- local_network
ports:
- "3603:3306"
volumes :
......@@ -44,6 +74,8 @@ services:
container_name: adminer.dev.local
ports:
- "8080:8080"
networks:
- local_network
links:
- mysql:db
......@@ -66,6 +98,8 @@ services:
# - ./api:/var/www/api
# - ./src:/var/www/src
# - ./html:/var/www/html
# networks:
# - local_network
# links :
# - mysql:db
......@@ -78,12 +112,16 @@ services:
# environment :
# - POSTGRES_PASSWORD = pgroot
# - POSTGRES_USER = pguser
# networks:
# - local_network
# ports:
# - "5432:5432"
# adminer-pg:
# image: adminer
# container_name: adminer_pg.dev.local
# networks:
# - local_network
# ports:
# - "8088:8080"
# links:
......@@ -96,12 +134,16 @@ services:
## mongo:
# image: mongo:3.4
# container_name: mongo.dev.local
# networks:
# - local_network
# ports:
# - 27017:27017
# - 27017:27017
# mongo-express:
# image: mongo-express:latest
# container_name: mongo_express.dev.local
# networks:
# - local_network
# ports:
# - "8081:8081"
# links:
......@@ -113,6 +155,8 @@ services:
## mail:
# image: schickling/mailcatcher
# container_name: mail.dev.local
# networks:
# - local_network
# ports:
# - "1080:1080"
......
version: "3"
networks:
local_network:
driver: bridge
services:
php:
image: canals/php:7.1-cli
expose:
- "8000"
ports:
- "8800:8000"
volumes:
- ./:/var/php
working_dir: /var/php
networks:
- local_network
command: php -S 0.0.0.0:8000 web/index-cli.php
links :
- mysql:db
- mongo:mongo
# - mail:mail
# - postgres:pg
#############################
# mysql + adminer / can be replaced by mariadb
#############################
mysql:
# image: mysql:5.6
image: mariadb:latest
environment:
- MYSQL_ROOT_PASSWORD=root66
- MYSQL_USER=user
- MYSQL_PASSWORD=user
- MYSQL_DATABASE=mydatab
networks:
- local_network
ports:
- "3603:3306"
volumes :
- ./sql:/var/sql
adminer:
image: adminer
ports:
- "8080:8080"
networks:
- local_network
links:
- mysql:db
##############################################
# A second php service
##############################################
# api:
# image: canals/php
# container_name: api
## environment:
# - VHOST_HOSTNAME=api.local
# - VHOST_DOCROOT=/var/www/api
# ports:
# - "6080:80"
# - "6443:443"
# volumes :
# - ./api:/var/www/api
# - ./src:/var/www/src
# - ./html:/var/www/html
# networks:
# - local_network
# links :
# - mysql:db
##################################
# postgres + adminer
###################################
# postgres:
# image: postgres
# container_name: postgres.local
# environment :
# - POSTGRES_PASSWORD = pgroot
# - POSTGRES_USER = pguser
# networks:
# - local_network
# ports:
# - "5432:5432"
# adminer-pg:
# image: adminer
# container_name: adminer_pg.dev.local
# networks:
# - local_network
# ports:
# - "8088:8080"
# links:
# - postgres:db
#
################################################
# mongodb & mongo-express
###############################################
mongo:
image: mongo:3.4
networks:
- local_network
ports:
- 27017:27017
mongo-express:
image: mongo-express:latest
networks:
- local_network
ports:
- "8081:8081"
links:
- mongo:mongo
##############################################
# mailcatcher
##############################################
## mail:
# image: schickling/mailcatcher
# container_name: mail.dev.local
# networks:
# - local_network
# ports:
# - "1080:1080"
########################################
# shared storage : useful for, e.g. sharing
# uploaded documents (img, others) between multiple services
########################################
volumes:
data:
\ No newline at end of file
......@@ -7,8 +7,8 @@ namespace Composer\Autoload;
class ComposerStaticInit3699d1e5addcaee78662800cf92c71ce
{
public static $files = array (
'3a37ebac017bc098e9a86b35401e7a68' => __DIR__ . '/..',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..',
'3a37ebac017bc098e9a86b35401e7a68' => __DIR__ . '/..' . '/mongodb/mongodb/src/functions.php',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
);
public static $prefixLengthsPsr4 = array (
......@@ -25,11 +25,11 @@ class ComposerStaticInit3699d1e5addcaee78662800cf92c71ce
public static $prefixDirsPsr4 = array (
'test\\' =>
array (
0 => __DIR__ . '/../..',
0 => __DIR__ . '/../..' . '/',
),
'MongoDB\\' =>
array (
0 => __DIR__ . '/..',
0 => __DIR__ . '/..' . '/mongodb/mongodb/src',
),
);
......
<?php
/**
* File: index.php
* Creation Date: 23/06/2017
* description:
*
* @author: canals
*/
require __DIR__ . '/../src/vendor/autoload.php';
require_once __DIR__ . '/../src/sample.php';
print "request uri : " . $_SERVER['REQUEST_URI'] . "<br>";
print "request method " . $_SERVER['REQUEST_METHOD']. "<br><br>";
print "<h2>connexion mysql-mariadb :</h2>" . "<br>";
try {
$pdo = new PDO( 'mysql:host=db;dbname=mysql', 'root', 'root66');
} catch (PDOException $e) {
print 'erreur connexion mysql : ' . $e->getMessage() . '<br>' ;
die();
}
print 'connexion etablie <br>';
foreach ($pdo->query('select host, user from user') as $row) {
print $row['host'] . ' : ' . $row['user'] . '<br>';
};
print "<br><h2>connexion mongo :</h2>" . "<br>";
$client = new MongoDB\Client("mongodb://mongo:27017");
$collection = $client->demo->beers;
$result = $collection->insertOne( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );
echo "Inserted with Object ID '{$result->getInsertedId()}'" . '<br>';
$result = $collection->insertOne( [ 'name' => 'Houblon Chouffe', 'brewery' => 'Brasserie d\'Achouffe' ] );
echo "Inserted with Object ID '{$result->getInsertedId()}'";
\ No newline at end of file
......@@ -8,7 +8,7 @@
*/
try {
$pdo = new PDO( 'mysql:host=db;dbname=mysql', 'root', 'root');
$pdo = new PDO( 'mysql:host=db;dbname=mysql', 'root', 'root66');
} catch (PDOException $e) {
print 'erreur connexion mysql : ' . $e->getMessage() . '<br>' ;
die();
......
# Use an official Python runtime as a base image
FROM php:7.1-cli
RUN apt-get update && \
apt-get install --yes --force-yes \
cron g++ gettext libicu-dev openssl \
libc-client-dev libkrb5-dev \
libxml2-dev libfreetype6-dev \
libgd-dev libmcrypt-dev bzip2 \
libbz2-dev libtidy-dev libcurl4-openssl-dev \
libz-dev libmemcached-dev libxslt-dev git-core libpq-dev
# PHP Configuration
RUN docker-php-ext-install bcmath bz2 calendar dba exif gettext intl soap tidy xmlrpc xsl zip&&\
docker-php-ext-install mysqli pgsql pdo pdo_mysql pdo_pgsql &&\
docker-php-ext-configure gd --with-freetype-dir=/usr --with-jpeg-dir=/usr &&\
docker-php-ext-install gd &&\
docker-php-ext-configure imap --with-kerberos --with-imap-ssl &&\
docker-php-ext-install imap &&\
docker-php-ext-configure hash --with-mhash &&\
pecl install xdebug && docker-php-ext-enable xdebug &&\
pecl install mongodb && docker-php-ext-enable mongodb &&\
pecl install redis && docker-php-ext-enable redis && \
curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/bin/composer
# Apache Configuration
#RUN a2enmod rewrite
# SSL
#RUN mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf &&\
# a2enmod ssl && \
# a2ensite 000-default-ssl &&\
# openssl req -subj '/CN=example.com/O=My Company Name LTD./C=US' -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem
#
#EXPOSE 443
# Imagemagick
RUN apt-get install --yes --force-yes libmagickwand-dev libmagickcore-dev
RUN yes '' | pecl install -f imagick &&\
docker-php-ext-enable imagick
#COPY create_vhost start /usr/local/bin/
COPY php.ini /usr/local/etc/php/
# canals/php:7.1-cli, latest
##Image docker PHP
Basée sur l'iamge officielle `php:7.1-cli`
This diff is collapsed.
......@@ -10,16 +10,17 @@ Le dockerfile s'inspire de [celui-ci](https://hub.docker.com/r/lavoweb/php-5.6/)
[vaprobash](https://github.com/fideloper/Vaprobash)
###tag
+ `7.1`, `latest` : image pour php 7.1, basée sur l'image officielle `php:7.1-apache`
+ `5.6` : image pour php 5.6, basée sur l'image officielle `php:5.6-apache`
+ `7.1-cli` : image pour php 7.1 cli, sans apache, basée sur l'image officielle `php:7.1-cli`
+ `7.1`, `latest` : image pour php 7.1 + apache, basée sur l'image officielle `php:7.1-apache`
+ `5.6` : image pour php 5.6 + apache, basée sur l'image officielle `php:5.6-apache`
###test
Le répertoire [test](test) contient des fichiers docker-compose pour vérifier le fonctionnement de chacune des 2 images
###contenu de l'image
###contenu des images
####apache :
####apache (`7.1`, `latest`, `5.6` ):
+ apache 2.4, modules `mod_rewrite` et `mod_ssl` activés,
+ un vhost par défaut sure le port 80, docroot `/var/www/html`
......@@ -30,7 +31,7 @@ Le répertoire [test](test) contient des fichiers docker-compose pour vérifier
####php :
+ php7.1 ou 5.6 sous forme de module apache (`mod_php7`, `od_php5`)
+ php7.1 ou 5.6 cli et sous forme de module apache (`mod_php7`, `mod_php5`)
+ extensions : `mbstring`, `curl`, `ftp`, `openssl`, `zlib`, `bcmath`, `bz2`, `calendar`, `dba`, `exif`
`gd`, `gettext`, `imap`, `intl`, `mcrypt`, `soap`, `tidy`, `xmlrpc`, `xsl`, `zip`, `imagick`
+ PDO : `pdo`, `pdo_mysql`, `pdo_sqlite`, `pdo_pgsql`
......@@ -67,21 +68,44 @@ allow_url_include = Off
```
###Utilisation de l'image
###Utilisation des images
#### image php-cli
L'image ne démarre aucune commande, et n'expose aucun port. Il est nécessaire de monter
les volumes et de prévoir la commande lors de la création d'un conteneur.
#####exemple : exécution d'un script php dans le répertoire courant :
```bash
$ docker run -it --rm \
-v "$PWD":/var/php \
-w /var/php \
canals/php:7.1-cli \
php prog.php
```
#####exemple : lancement d'un serveur php sur le port 8000 dans le répertoire courant :
```bash
$ docker run --rm -it \
-p 8000:8000 \
-v "$PWD":/var/php \
-w /var/php \
canals/php:7.1-cli \
php -S 0.0.0.0:8000
```
#### image php-apache
Il est conseillé de monter les volumes correspondant aux _docroot_ des vhosts créés : vhost par défaut s'il est utilisé,
vhost spécifique.
####exemple :
#####exemple :
```bash
$ docker run -d --name vhost-php \
-e "VHOST_HOSTNAME=vost.php.local" \
-e "VHOST_DOCROOT=/var/www/vost" \
-p 9080:80 -p 9443:443 \
-v $(PWD)/html:/var/www/html \
-v $(PWD)/api:/var/www/vost \
-v $(PWD)/src:/var/www/src \
-v "$PWD"/html:/var/www/html \
-v "$PWD"/api:/var/www/vost \
-v "$PWD"/src:/var/www/src \
canals/php
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment