Ejemplos docker-compose
Crea container con PHP, MySQL, PhpMyAdmin, lo he probado en local y funciona.
version: '2'
services:
mysql:
build: ./constructor/mysql
environment:
MYSQL_ROOT_PASSWORD: pass
ports:
- "3306:3306"
php:
build: ./constructor/php56
ports:
- '80:80'
volumes_from:
- data
depends_on:
- mysql
data:
image: busybox
container_name: data
volumes:
- .:/var/www/html
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
PMA_HOST: mysql
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: pass
restart: always
ports:
- 8100:80
depends_on:
- mysql
volumes:
data:
networks:
front:
driver: bridge
Los Dockerfile asociados son....
mysql/Dockerfile
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/
php56/Dockerfile
FROM php:5.6-apache
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y \
bzip2 curl git less mysql-client sudo unzip zip \
libbz2-dev libfontconfig1 libfontconfig1-dev \
libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libzip-dev && \
rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install bz2 && \
docker-php-ext-configure gd \
--with-freetype-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ && \
docker-php-ext-install gd && \
docker-php-ext-install iconv && \
docker-php-ext-install opcache && \
docker-php-ext-install pdo_mysql && \
docker-php-ext-install zip
RUN curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_DOCUMENTROOT=/var/www/html/web
ADD apache-config.conf /etc/apache2/sites-available/default
php56/apache-configu.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/web
<Directory /var/www/html/web>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
phpmyadmin/Dockerfile
FROM alpine:3.5
# Install dependencies
RUN apk add --no-cache php7-session php7-mysqli php7-mbstring php7-xml php7-gd php7-zlib php7-bz2 php7-zip php7-openssl php7-curl php7-opcache php7-json php7-ctype nginx php7-fpm supervisor
# Include keyring to verify download
COPY phpmyadmin.keyring /
# Copy configuration
COPY etc /etc/
# Copy main script
COPY run.sh /run.sh
RUN chmod u+rwx /run.sh
# Calculate download URL
ENV VERSION 4.8+snapshot
ENV URL https://files.phpmyadmin.net/snapshots/phpMyAdmin-${VERSION}-all-languages.tar.gz
LABEL version=$VERSION
# Download tarball, verify it using gpg and extract
RUN set -x \
&& GNUPGHOME="$(mktemp -d)" \
&& export GNUPGHOME \
&& apk add --no-cache curl gnupg \
&& curl --output phpMyAdmin.tar.gz --location $URL \
&& apk del --no-cache curl gnupg \
&& rm -rf "$GNUPGHOME" \
&& tar xzf phpMyAdmin.tar.gz \
&& mv phpMyAdmin-$VERSION-all-languages /www \
&& rm -rf /www/setup/ /www/examples/ /www/test/ /www/po/ /www/composer.json /www/RELEASE-DATE-$VERSION \
&& sed -i "s@define('CONFIG_DIR'.*@define('CONFIG_DIR', '/etc/phpmyadmin/');@" /www/libraries/vendor_config.php \
&& chown -R root:nobody /www \
&& find /www -type d -exec chmod 750 {} \; \
&& find /www -type f -exec chmod 640 {} \;
# Add directory for sessions to allow session persistence
RUN mkdir /sessions
# We expose phpMyAdmin on port 80
EXPOSE 80
ENTRYPOINT [ "/run.sh" ]
CMD ["phpmyadmin"]
Cómo conectar la Base de datos al servicio PHP
Docker-compose...
version: '2'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: element03
ports:
- '3307:3306'
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
mysql_db_server: db
restart: always
ports:
- 8100:80
depends_on:
- db
php:
image: pinuaga/damm:php70
ports:
- '8050:80'
volumes:
- .:/var/www/html
depends_on:
- db
Este docker-compose crea un sistema de Multi-Servicios donde quedan separados : MySQL, PHPMyAdmin, PHP. Los datos de la Base de datos permanecen en el container db. Sera necesario hacer una exportación de la base de datos y guardarla en algun lugar de la aplicación, para que esta viaje con el repositorio y otros colegas puedan usara, haciendo una importación.
Los archivos de la aplicación permanecen en la máquina local y estos se han de ir actualizando en el servidor de versipnes.
En el container de db que corresponde a la Base de datos se le pasa como volúmenes, un volumen con las base de datos locales así como la configuración local de la base de datos.
Luego en el PHP se ha de realizar con los siguientes parámetros ....
Normalmente me encontraba que, la conexión que realizaba en los archivos de PHP con la base de datos, no se conectaba con éxito. Daba errores de conexión.
La solución es configurar correctamente los parámetros de conexión, se ha de llamar al host de la conexión con el nombre que se le dio en el docker-compose. Un ejemplo en caso con conexión exitosa:
$mysqli = new mysqli("db", "root", "example", "mysql", "3306");
El tema esta en que NO hay que poner ni Localhost, ni la IP solamente el nombre con el cual se nombro al contenedor. en este caso db.
Teniendo en cuenta que ..
$mysqli = new mysqli("HOST", "USUARIO", "PASSWORD", "NOMBRE_BD", "PUERTO");