返回 登录
0

Mac上使用Docker快速启动MySQL测试

原文:Quick Start MySQL Testing Using Docker
作者: Jay Janssen
译者:孙思
责编:孙思,关注数据库领域,寻求报道或者投稿请发邮件sunsi@csdn.net,另有「CSDN 高级数据库技术群」,内有诸多知名互联网公司的大牛,欢迎加微信sunlovesi申请入群,备注姓名+公司+职位。

本文主要讨论如何使用Docker快速启动 MySQL 测试,包括Mac环境。

近来业界有很多对Docker的讨论,其生态系统发展得很快,然而,从简单的“入门”或“引导”类的文章中能容易地找到成熟的技术,但Docker不然。我在Mac上试玩过Docker,但Mac绝对是Docker界的二等公民。当我在Giuseppe的博客上看到关于在Mac上使用新Docker beta《Docker for Mac beta and MySQL》一文时,决定自己来尝试下。这些步骤适用于Mac(Windows也可能),亦能适配Linux环境(GA版本,Docker 1.11.1)。

首先,在Mac上注册新的Docker测试版程序,接着从Docker中获得下载代码。此过程我耗时一天,但应该不久就会发布完整版。安装完成后,我需要为常见的MySQL版本设置一些Docker容器,沙箱也就有了。方法如下:

jayj@~ [510]$ docker network create test

90005b3ffa9fef1f817ee4965e794a567404c9a8d5bf07320514e7d848d59ff9

jayj@~ [511]$ docker run --name=mysql57 --net=test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:5.7

6c80fa89610dbd5418ba474ad7d5451cd061f80a8a72ff2e718341827a08144b

jayj@~ [512]$ docker run -it --rm --net=test -e MYSQL_HOST=mysql57 mysql/shell init

Creating a Classic Session to root@mysql57:3306

Enter password:

No default schema selected.

enableXProtocol: Installing plugin mysqlx...

enableXProtocol: done

一些经验总结:

  1. 我为我的容器创建了一个名为“测试”的网络以共享,本质是容器之间一个专用的私有网络。我喜欢这个是因为在相关的端口是监听多个容器,也不必设置主机操作系统的端口。
  2. 我将Oracle的官方MySQL Docker容器启动一个MySQL 5.7的镜像,在绑定到该测试网络。
  3. 我使用了MySQL /shell镜像(来自Oracle)来初始化MySQL 5.7服务器上的mysqlx插件。需要注意的是,我并没有输入密码,因为我没有创建一个服务器(不安全,但它是一个沙箱)。

这个里面的Shell使用了运行后删除的临时容器,所以并不会破坏Docker ps-a输出。
所以,现在我希望能够使用标准的MySQL命令行或新的MySQL shell来访问这个容器。让它看起来很干净,因此我添加了一些bash别名:

alias mysqlsh='docker run -it --rm --net=test mysql/shell'

alias mysql='docker run -it --rm -e MYSQL_ALLOW_EMPTY_PASSWORD=yes --net=test --entrypoint="mysql" mysql/mysql-server:5.7'

这些以后,我可以直接调用他们并通过正常的命令行选项来连接我的MySQL 5.7镜像,就像使用的是一个原生的MySQL CLI binary。从MySQL 5.7镜像中使用MySQL CLI:

jayj@~ [524]$ mysql -h mysql57

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 4

Server version: 5.7.12 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> show schemas;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.01 sec)

使用MySQL shell:

jayj@~ [527]$ mysqlsh -h mysql57 -u root --session-type=node

Creating a Node Session to root@mysql57:33060

Enter password:

No default schema selected.

Welcome to MySQL Shell 1.0.3 Development Preview

Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help', 'h' or '?' for help.

Currently in JavaScript mode. Use sql to switch to SQL mode and execute queries.

mysql-js> sql

Switching to SQL mode... Commands end with ;

mysql-sql> show schemas;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.00 sec)

mysql-sql>

现在,如果为了一些事情想要运行检查MySQL 5.5,可以这样做:

jayj@~ [530]$ docker run --name=mysql55 --net=test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:5.5

Unable to find image 'mysql/mysql-server:5.5' locally

5.5: Pulling from mysql/mysql-server

a3ed95caeb02: Already exists

ffe36b360c6d: Already exists

646f220a8b5d: Pull complete

ed65e4fea7ed: Pull complete

d34b408b18dd: Pull complete

Digest: sha256:12f0b7025d1dc0e7b40fc6c2172106cdf73b8832f2f910ad36d65228d9e4c433

Status: Downloaded newer image for mysql/mysql-server:5.5

6691dd9d42c73f53baf2968bcca92b7f4d26f54bb01d967be475193305affd4f

jayj@~ [531]$ mysql -h mysql55

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 1

Server version: 5.5.49 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> show schemas;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

+--------------------+

3 rows in set (0.00 sec)

或者,Percona Server:

jayj@~ [534]$ docker run --name=ps57 --net=test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d percona/percona-server:5.7

Unable to find image 'percona/percona-server:5.7' locally

5.7: Pulling from percona/percona-server

a3ed95caeb02: Pull complete

a07226856d92: Pull complete

eee62d87a612: Pull complete

4c6755120a98: Pull complete

10eab0da5972: Pull complete

d5159a6502a4: Pull complete

e595a1a01d00: Pull complete

Digest: sha256:d57f0ce736f5403b1714ff8d1d6b91d5a7ee7271f30222c2bc2c5cad4b4e6950

Status: Downloaded newer image for percona/percona-server:5.7

9db503852747bc1603ab59455124663e8cedf708ac6d992cff9b43e2fbebd167

jayj@~ [537]$ mysql -h ps57

Welcome to the MySQL monitor. Commands end with ; or g.

Your MySQL connection id is 2

Server version: 5.7.10-3 Percona Server (GPL), Release 3, Revision 63dafaf

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>

所以,这一切都很好,一旦镜像被本地缓存,上下调整新的容器可以实现无痛和快速。所有这一切的工作都是与我的操作系统工作站分离的。可能还有其他事情可以使用这种设置,但还没找到方法(如加载数据文件、运行代码来连接这些容器等),但将来我会解决。

评论