Установку Docker и docker-compose рассматривали здесь и здесь.
Все сервисы для контейнера будем тянуть с
1. Создание рабочей директории:
Первым делом создадим рабочую директорию, в которой будет содержаться docker-compose.yml с правилами для установки контейнера с mysql 5.7.
mkdir /var/www/docker/mysql5.7
2. Создание docker-compose.yml:
В /var/www/docker/mysql5.7 создаем файл docker-compose.yml, в котором будет содержаться правило установки нужной версии mysql.
version: '3.1'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: new_base
ports:
- 3308:3306
version - указывается версия схемы. В предыдущих версиях docker и docker-compose были разные структуры описания сервисов в контейнере. По этому версия указывается для распознания структуры файла yml.
services - описываются сервисы, которые будут в нашем контейнере. Их может быть несколько, сейчас рассматриваем только один.
db - имя сервиса в контейнере.
image - указываем что в этом сервисе. В нашем случае mysql с версией 5.7. Подробнее на
restart - насколько я понял, это действие сервиса после docker-compose down. То есть перезагружается после закрытия контейнера.
environment - думаю тут понятно, пароль и создаваемая автоматом база.
ports - вот тут внимательно! 3308 - порт который будет доступен для подключения к сервису в контейнере, 3306 - стандартный порт mysql, на котором будет работать в контейнере. Если поставить 3306:3306 и если уже локально (не в докере) работает mysql, то будет ошибка, так как порт 3306 уже занят.
3. Поднимаем Docker контейнер:
Напомню, что мы работае в директории /var/www/docker/mysql5.7. Поднять контейнер можно в фоновом режиме и без фонового режима. Используем 1 из способов.
Команда для запуска в фоне (Чтобы дальше работать в окне этой же консоли):
sudo docker-compose up -d
Просто запуск контейнера не в фоне (Будет висеть в консоли выводя логи):
sudo docker-compose up
4. Проверка и подключение:
Если все прошло без ошибок и MySQL 5.7 поднялся, то подключиться к нему уже не составит труда.
mysql -uroot -proot -h127.0.0.1 -P3308
В схеме описаной в пункте (2) испольузется:
-P3308 - порт 3308
-uroot - логин поумолчанию root
-proot - пароль root
-h127.0.0.1 - ip локалоного mysql контейнера.
создана уже автоматически база данных new_base.
Видим версию 5.7 и созданную нами базу.
5. Подключение на Php сайте:
<?php
$mysqli = mysqli_init();
if (!$mysqli) {
die('mysqli_init завершилась провалом');
}
if (!$mysqli->real_connect('127.0.0.1', 'root', 'root', 'new_base', '3308')) {
die('Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
$sql = "CREATE TABLE IF NOT EXISTS `logs` ( ".
"`id` int(11) NOT NULL AUTO_INCREMENT, ".
"`user_id` int(11) NOT NULL, ".
"PRIMARY KEY (`id`)".
") ENGINE=Innodb DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
$mysqli->query($sql);
$result = $mysqli->query("SHOW Tables;");
while ($row = $result->fetch_object()){
var_dump($row);
}
$mysqli->close();
real_connect('127.0.0.1', 'root', 'root', 'new_base', '3308') - само подключение.
Подтверждение удачного подключения то, что var_dump() выдаст созданную нами таблицу.
object(stdClass)#3 (1) { ["Tables_in_new_base"]=> string(4) "logs" }
6. Завершение работы:
Находясь в директории, где docker-compose.yml
sudo docker-compose down
Если не завершить работу контейнера и запустить его снова, будет ошибка.