将数据的初始化放到docker中的整个工作过程(问题记录)

由于是打算作为个人博客,所以对于install这个步骤,我从一开始就打算删掉的,前面一个多星期一直在修bug,到前天才开始做这个事情. 过程中也是碰到了各种问题,花了整整三天时间才完整的解决并实现了这个过程.

1.首先是思路的整理,如何去实现install过程的docker化.

由于原来是直接用的mysql5.7官方镜像,所以mysql数据的导入就不好实现,因此需要在原官方镜像的基础上重新创建镜像

实现方法及所需文件都在在mysql文件夹下.

2.数据导入与mysql权限问题.

设想是通过shell脚本来实现数据导入工作,用了好几种方法都无法绕过mysql的认证步骤.

通过shell脚本对mysql进行操作时是无法实现输入密码,因此用了最不安全的方法,在启动mysql镜像时通过免密方式.

通过这种方式实现了数据导入.

3.mysql容器启动问题.

由于是新建的Dockerfile,这一个问题也花费了大量时间,在容器启动时一直报mysql未启动的错误

因此setup脚本大概重写了十多个版本,最终将此问题解决(详见mysql/setup.sh文件)

4.设置mysql的root用户密码

由于需要实现数据导入,因此mysql权限设置为免密方式,但是这种方式不安全,因此想要解决掉此问题,重新设置root用户密码.

这一过程就不细讲了,尝试了各种方法,最终没有实现,由于浪费时间过多,因此放弃这一方案.(也许可以实现,但不想再去尝试了)

5.针对免密方式的补充

由于花费了太多时间在root用户的设置上,但是最终无法实现,因此选择了另外一种方案.

用户问题的方案是,新增tale数据库的管理用户并授权.(详见mysql/editpassword.sql文件)

安全问题是修改了docker-compose文件,不再将mysql容器端口暴露在宿主机中(平常测试时最好还是暴露端口,上线时删除即可).

6.mysql远程登录问题

其实改到第5步的时候,感觉功能已经差不多完成了,在联合启动时,又报了数据源无法连接的问题,原因就是容器中mysql未开启远程连接.

再次修改启动脚本.

7.blog容器无法连接连接mysql容器

本以为第6步中已经将连接问题解决,但是启动blog时还是报了同样的错误,通过本地客户端进行连接是正常的,证明了远程连接是没问题的.多次重复这一过程,发现还是无法连接.修改了各种参数,也进入到blog容器中查看host文件是否正常,都没有发现问题,也就是说配置都是正常的,但是每次报错都是同样的错,最后发现问题的原因出在初始化的时间差上,blog容器启动依赖mysql容器,mysql容器启动成功之后,才会执行blog容器启动,这一过程并没有问题,问题在mysql容器中还有一步初始化过程,可参考setup.sh脚本,这一过程需要时间,如果blog容器在这个过程中启动的话,由于权限问题还没有处理完成,因此无法连接mysql容器.因此修改了blog镜像的Dockerfile文件,并重写启动方法,将启动过程延迟执行,最终解决了这个问题(详见docker/startup.sh文件).

8.总结

问题解决了固然开心,但是也不能忘记了处理问题的过程带给自己的成长.当然,过程中也有一些非技术的失误,比如目录设置错误,镜像选择问题, 这些都是粗心导致的,过程中也花费了大量的时间,因为网上关于docker的资料实在有些少,只能自己去鼓捣,所以也是很心累,焦躁和烦闷导致了各种粗心,以后需注意.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

IIS 7.0的六大安全新特性为你的Web服务器保驾护航

文章来自:WindowsITPro  2009年2月期 当你启用一台Web服务器的时候,你就把你公司的一部分完全展现给了公众,任凭他人摆布。Web服务器上的那些...

247100
来自专栏蘑菇先生的技术笔记

WSL与Windows交互实践

94470
来自专栏Linux启动过程

基于Linux的pc启动过程

作为一个Android开发者,了解整个系统架构是必须的,所以这篇就总结一下Android手机从按下开机键到启动这一过程发生了什么。

22600
来自专栏菩提树下的杨过

windows系统中eclipse C开发环境的架设

虽然c有很多经典的开发环境,但是大多数是linux或unix下的,对于windows的忠实用户来讲,可能并不习惯。 windows环境中,有一个dev-c++可...

20060
来自专栏CodeSheep的技术分享

利用TICK搭建Docker容器可视化监控中心

性能监控是容器服务必不可少的基础设施,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息。...

35840
来自专栏张戈的专栏

Nexus3最佳实践系列:搭建Docker私有仓库

容器仓库是容器化管理中非常重要的一环,相当于 SVN 在程序研发、运维发布中的地位。因此,一个稳定、可靠的容器仓库尤为重要。

1.1K30
来自专栏cloudskyme

红帽的PAAS平台openshift

什么是paas PaaS是Platform-as-a-Service的缩写,意思是平台即服务。 把服务器平台作为一种服务提供的商业模式。通过网络进行程序提供的服...

62170
来自专栏Rainbond开源「容器云平台」

【Docker】Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程

26160
来自专栏自由而无用的灵魂的碎碎念

最近几天玩freebsd奋斗成果总结

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

13620
来自专栏CodeSheep的技术分享

Docker容器可视化监控中心搭建

293100

扫码关注云+社区

领取腾讯云代金券