利用docker部署mysql数据库

前面两篇博客中,我们讨论了如何安装和使用docker,以及如何在docker中部署一个apache服务器,并在外部电脑中访问这个服务器

下面我们来讨论下如何利用docker来部署一个mysql数据库,并在外部电脑中访问这个数据库:

注意:如果你对以下某些命令不了解,请看我的第一篇博客


上面安装的xampp中已经包含了mysql数据库了,所以我就不重新安装mysql了。

首先按照上面教程在本机电脑中安装好xampp,并配置好.bashrc;

然后启动刚才新建的那个镜像ubuntu2,并将本机电脑的8080端口映射到容器的3306端口(mysql默认监听3306端口):

sudo docker run –i –t –p 8080:3306 ubuntu2 /bin/bash
技术分享

执行上述命令后,可进入到容器的命令行。

接着在容器命令行中输入以下命令来启动mysql:

/opt/lampp/lampp start
<img src="http://img.blog.csdn.net/20150529120907846?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amFuNTExNTM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

接着进入到mysql中

mysql –u root

查看mysql中有哪些数据库:

show databases;

打开本机电脑的另一个命令行终端,启动本机电脑mysql(本机电脑也要安装xampp)

/opt/lampp/lampp start

连接到上述容器中的mysql数据库:

mysql  -h 0.0.0.0 –P 8080  -u root
<img src="http://img.blog.csdn.net/20150529121214120?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1amFuNTExNTM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
(这里可以用sudo docker ps来看下容器的端口映射)


参数h表示要进入哪台机器上的msyql(host),P(大写)表示端口号。

不出意外的话,此时就可以连接上容器中mysql了;

查看有哪些数据库:

show databases;

可比较下这次返回的结果和刚才的结果是否一样。

接着新建一个数据库:

create database helloworld;

回到容器命令行中,再次查看有哪些数据库:

show databases;

此时就可以看到在本机电脑中新建的那个数据库helloworld了。

其余对数据库的操作也是一样的。

到这里,就讲完了如何在docker中部署一个mysql数据库,并在外部电脑中访问这个数据库。



常见问题:

1. 出现 lost connection to mysql server的错误:

解决方法:

首先进入到目录(如果你的mysql是通过xampp安装的)/opt/lampp/etc:


cd /opt/lampp/etc

然后用vim 打开my.cnf,找到这一行:

bind-address = 127.0.0.1

将它注释掉,如果没有这行则忽略。

然后找到[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:

skip-name-resolve
保存并退出。

接着重启xampp:

/opt/lampp/lampp restart

到这里应该就解决了。

如果你的Mysql不是通过xampp安装的,则my.cnf一般在一般只会存放在/etc/my.cnf或者/etc/mysql/my.cnf下;

对my.cnf的修改跟上面的一样,然后重启mysql:

/etc/init.d/mysql restart

2. Host ip is not allowed to connet to this mysql server之类的错误

解决方法:

进入mysql:

mysql -u root

然后对其他用户授权:


GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

到这里应该就解决了。

如果还解决,请参考这里:http://joinyo.iteye.com/blog/1489380




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。