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");

results matching ""

    No results matching ""