MySQL под dockerом

Совсем недавно, я открыл для себя docker. И надо признать он поразил своей простотой.

Что же попробуем поднять mysql для тестирования на docker.

Но до докера я поднимал тестовый mysql сервер приблизительно так:

mysql_install_db --no-defaults --datadir=/tmp/db
mysqld --pid-file=/tmp/db.pid --socket=/tmp/db.sock \
 --console --datadir=/tmp/db --port=33303
mysql -S /tmp/db.sock -uroot

Ну, да ладно, теперь у нас есть докер:

Установка:

apt-get install docker

Запускает:

$ docker run --name myts -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server
$ docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
  CONTAINER ID        NAMES         STATUS
  46c7abe53d40        myts          Up 17 minutes
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' myts
172.17.0.1

Mysql поднялся в контейнере на 172.17.0.1 IP, осталось что-нибудь такае сдалать.

$ mysql --user=root --host=172.17.0.1 --password=password
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE log(ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, \
             camid VARCHAR(10), number VARCHAR(20));
mysql> INSERT INTO log(number,camid) VALUES ('x1650dx', 'cam1');
mysql> select * from log;

Ладно, побаловались надо и что-то полезное зделать, например снять/залить дамп базы:

$ docker exec -it myts mysqldump -u root --password=password test > /tmp/dump.sql
$ docker stop myts
$ docker rm myts

Собираем дамп и останавливаем, удаляем наш контейнер. А снова создать можно так:

$ docker run --name myts -e MYSQL_ROOT_PASSWORD=password -d mysql/mysql-server
$ docker exec -it myts mysql --user=root --password=password < /tmp/dump.sql
$ docker cp /tmp/dump.sql myts:/root/dump.sql
$ docker exec -it myts /bin/bash
[root@76931e24986b /]# mysql --user=root --password=password -D test < /root/dump.sql

Зачем такие сложности, чтобы показать как использовать команду cp и приаттачиться к containerу ( и да базу данных test все таки придеться создать ручками )

По теме: