Haotic
@Haotic
Full stack web developer

Как из контейнера php получить доступ к mysql и выполнять миграции?

Хочу перейти на docker, вопрос в том, как им правильно и продуктивно пользоваться? Пытаюсь развернуть проект на laravel в docker'e вот docker-compose.yml

# Версия docker-compose
version: '2'
# Список наших сервисов (контейнеров)
services:
    nginx:
    # используем последний стабильный образ nginx
        image: nginx:latest
        # маршрутизируем порты
        ports:
            - "80:80"
            - "443:443"
        # монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере
        volumes:
            - ./hosts:/etc/nginx/conf.d
            - ./www:/var/www
            - ./logs:/var/log/nginx
        # nginx должен общаться с php контейнером
        links:
            - php
    php:
        # у нас свой образ для PHP, указываем путь к нему и говорим что его надо собрать
        build: ./images/php
        # этот образ будет общаться с mysql
        links:
            - mysql
        # монтируем директорию с проектами
        volumes:
            - ./www:/var/www
    mysql:
        image: mysql:8
        ports:
            - "3306:3306"
        volumes:
            - ./mysql:/var/lib/mysql
        # задаем пароль для root пользователя
        environment:
            MYSQL_ROOT_PASSWORD: secret


вот образ PHP Dockerfile

# Для начала указываем исходный образ, он будет использован как основа
FROM php:7.1-fpm

# RUN выполняет идущую за ней команду в контексте нашего образа.
# В данном случае мы установим некоторые зависимости и модули PHP.
# Для установки модулей используем команду docker-php-ext-install.
# На каждый RUN создается новый слой в образе, поэтому рекомендуется объединять команды.
RUN apt-get update && apt-get install -y \
        curl \
        wget \
        git \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    && docker-php-ext-install -j$(nproc) iconv mcrypt mbstring mysqli pdo_mysql zip \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd
    
# Куда же без composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Добавим свой php.ini, можем в нем определять свои значения конфига
ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini

# Указываем рабочую директорию для PHP
WORKDIR /var/www

# Запускаем контейнер
# Из документации: The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, 
# or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
CMD ["php-fpm"]


запускаю
>docker-compose up -d
>docker ps

теперь чтобы установить зависимости composer подключаюсь к контейнеру:
sudo docker exec -t -i b88e4e4815f2 /bin/bash

пакеты поставил теперь пытаюсь выполнить миграции
НООО они не выполняются т.к mysql не коннектится к базе.
конфиг подключения к БД указан верно. (в контейнере mysql подключается к БД)

как достучаться из контейнера php в контейнер mysql?

как из одного контейнера иметь доступ к: php, nginx, mysql, composer чтобы постоянно не переключать между контейнерами в зависимости от операции и не плодить консоли?
  • Вопрос задан
  • 727 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы