Установку 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 . Підняти контейнер можна у фоновому режимі та без фонового режиму. Використовуємо один із способів .
Команда для запуску у фоні (Щоб далі працювати у вікні цієї ж консолі):
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
Якщо не завершити роботу контейнера та запустити його знову, буде помилка.