Хочу перейти на 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 чтобы постоянно не переключать между контейнерами в зависимости от операции и не плодить консоли?