也许有小伙伴还不太清楚docker 是什么东西,那么可以先去了解一下,传送门:docker入门
由于最近要做mysql的集群,那么需要提前做一些测试,可是手头并没有那么多的服务器,只有一台自己的阿里云服务器,windows下的虚拟机又不想用,在了解了docker之后,决定使用docker来快速部署几台服务器的环境,快速搭建几个mysql环境,理由是体积更小,占用资源更少。
安装EPEL
rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/6Server/x86_64/epel-release-6-8.noarch.rpm
docker的安装:
直接yum下载就可以了
yum install -y docker-io
启动docker并设置开机自启动
service docker start
chkconfig docker on
查看docker状态
service docker status
可以看到docker已经启动了:
到此 Docker完成,很简单吧。
接下来,我们要启动docker需要一个linux镜像,镜像可以从网上直接下载,非常方便。
这里我选择的是centos6.8的版本
这里直接使用docker pull 镜像名称:tags
docker pull centos:6.8
可以看到成功拉取镜像
查看本地镜像:
docker images
镜像下载好了我们就要利用镜像创建容器:
docker run -i -t -d --name mysql1 -p 33061:3306 centos:6.8
docker run 镜像名称:tags 利用镜像创建容器
-d 容器后台运行
--name 给容器命名
-p 本地端口:容器端口
指定端口映射 使得可以通过访问宿主机端口来访问容器端口(这里一定要指定,否则后面会很麻烦)
这里要启用端口映射,我们宿主机本身就得开放33061端口
怎么开放端口这里不做讲解,可以手动度娘
创建完容器如下:
查看本地容器列表:
docker ps -a
ports 是端口映射,这个时候指定的是由宿主机的33061端口映射到mysql1容器的3306端口
容器创建完了,我们进入容器里边看看
docker attach 容器名称/ID 进入容器
docker attach mysql1
可以看到当前已经进入到容器里边了,容器本身也是一台独立的linux服务器
接下来我们就要给容器安装mysql服务了
如何安装mysql 还不会的同学可以看我之前的博客
lamp环境搭建 注意安装编译工具 以及mysql编译工具cmake
在我们安装完后,测试mysql一切正常使用时,我们的任务是将这个构建好的容器,复制多一份
那么我们就需要把当前这个容器 生成一个镜像,然后再利用镜像生成另外一个容器
类似
a1 -> image1 -> a2
docker commit 容器名称 镜像名称
docker commit mysql1 mysql_image;
然后查看镜像列表:
docker images;
发现多了一个镜像:
然后我利用镜像来生成另外一个容器:
容器名称定义为mysql2 宿主机端口33062映射到容器端口3306,使用宿主机mysql_image镜像的最新版本
注意一定要开启 iptables
docker run -i -t -d --name mysql2 -p 33062:3306 mysql_image:latest
然后查看镜像列表,可以看到多生成了一个mysql2的容器
docker ps -a
接下来我们进行测试:
我们用navicat数据库管理工具来连接mysql1,这里我们需要借助宿主机的端口映射,这需要保证2条线路是通的
1 外网可以请求宿主机的33061端口
2 宿主机可以请求mysql1的3306端口
我们通过请求宿主机的33061端口,来映射到mysql1的3306端口
先验证1 :
有返回则代表端口是通的
如果没有返回则端口不通,需要关闭防火墙iptables或者像我是阿里云服务器的话就去安全组添加对应的端口:
接着验证2:
进入宿主机shell面板,尝试请求mysql1的3306端口
返回即请求通了,不通的话同样可以进入mysql1容器关闭防火墙iptables
确保外部跟宿主机是通的,宿主机跟mysql1容器是通的,然后我们用mysql管理工具来连接
账户是密码是mysql1的账户密码,宿主机负责把请求映射到mysql数据库,最终是请求到mysql1数据库
可以看到我们已经才成功连接上mysql1数据库了
常见问题汇总
1 创建了容器 但是端口映射没有成功
解决方法:
1 删掉原来的容器 docker rm -f 容器名称
2 启动iptables service iptables statrt
3 重新创建容器 指定端口映射 docker run -i -t -d --name mysql2 -p 33062:3306 mysql_image:latest
2 为什么安装软件的时候总是提示少了这个库,少了那个库,并且yum install 还下不到
解决方法
yum update 之后 根据提示看少了什么库,对应装上,不懂的就百度,注意centos版本是6.8 是没有apt-get命令的
这个版本对应的是yum install 命令 来安装软件。
3 为什么启动容器之后 下载一些软件一直卡在那里不动?
解决办法
这种情况下大多数是因为没有网络,可以尝试 ping www.baidu.com 如果无法访问外网,那么可以尝试关闭容器再次重新启动,大部分情况下可以解决问题
关闭容器:
docker stop mysql1;
启动容器:
docker start mysql1;