Заметьте, в fastcgi_pass php-fpm
В docker-compose.yml будет отсылка к образу с этим именем links: - php-fpm
Создадим файлы для логов nginx:
touch /data/web/logs/nginx-error.log
touch /data/web/logs/nginx-access.log
Создадим тестовый файл php:
Создадим compose файл для объединения образов nginx и php:
Образ nginx использует образы с именами tutum/nginx и линковку на образ php-fpm:
tutum/nginx
php-fpm
Пробрасываем файлы, инча после каждого перезапуска контейнера все будет очищаться
В контейнер:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-access.log:/var/log/nginx/access.log
- ./logs/nginx-error.log:/var/log/nginx/error.log
Образ php-fpm использует порт из конфига nginx 9000
Сам образ использует образ php:fpm volumes: - ./public:/application/public - это root из конфига nginx
Т.е. из каталога на машине с докером мы пробрасываем папку веб-проекта в контейнер
Собираем проект:
cd /data/web/
docker-compose up -d
Проверяем:
docker ps CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES 97d8b54f1145 tutum/nginx "/usr/sbin/nginx" Up 2 minutes 0.0.0.0:80->80/tcp web_nginx_1 401891b69b07 php:fpm "docker-php-entrypoi…" Up 2 minutes 0.0.0.0:9000->9000/tcp, 9000/tcp web_php-fpm_1
Если какой-либо из контейнеров не запускается, смотрим логи:
docker logs 97d8b54f1145
Столкнулся с проблемой, которую так и не понял, как решить толком, как сделал
Если столкнетесь с ошибкой: nginx: [emerg] invalid number of arguments in "fastcgi_param" directive in /etc/nginx/sites-enabled/default:11
Это про сторку:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Как я вокруг нее не плясал, все бестолку, контейнер не собирался
Удаляем ее из конфига, собираем контейнеры - docker-compose up -d
Далее заходим в контейнер и добавляем ее в конфиг ручками и перезапускаем nginx, после контейнер пересобирался нормально
Управление проектом compose:
docker-compose stop
docker-compose start
Теперь добавим MySQL
Дополним compose файл:
Тут мы добавили образ MySQL версии 8
Задали учетные данные для подключения volumes: - /var/lib/mysql:/var/lib/mysql - сделано для того, чтоб данные сохранялись
Если этого не сделать, то при каждом перезапуске проектов данные будут пропадать depends_on: - mysql - указали зависимость от образа
Еще нам нужно установить драйверы для php для подключения к MySQL
Это делается в Dockerfile (Поэтому мы убрали image)
Подключимся и создадим тестовые данные в MySQL:
docker exec -it c2de120b6e7f bash
Пароль вводим указанный в файле docker-compose.yml:
mysql -u root -p
Выбираем базу данных из файла docker-compose.yml:
show databases; +--------------------+ | Database | +--------------------+ | dbname | | information_schema | | mysql | | performance_schema | | sys | +--------------------+
USE dbname;
Создаем тестовые данные:
CREATE TABLE test
(
id INT NOT NULL auto_increment,
name VARCHAR(30) NOT NULL DEFAULT '',
PRIMARY KEY (id)
);
INSERT INTO test (name) VALUES ("testname1");
INSERT INTO test (name) VALUES ("testname2");
INSERT INTO test (name) VALUES ("testname3");
А эта строка, чтоб не вылезла ошибка Uncaught PDOException: PDO::__construct():
The server requested authentication method unknown to the client [caching_sha2_password]:
alter user 'root'@'%' identified with mysql_native_password by '32167';
\q
exit
Приводим файл к такому виду:
vi /data/web/public/index.php