由于是打算作为个人博客,所以对于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的资料实在有些少,只能自己去鼓捣,所以也是很心累,焦躁和烦闷导致了各种粗心,以后需注意.

将数据的初始化放到docker中的整个工作过程(问题记录)的更多相关文章

  1. [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)

    原文地址CodeProject 目录 介绍 “二进制-十进制”相互转换 十进制->二进制 二进制->十进制 OR运算符(按位或|) OR运算符工作方式 FlagsAttribute AND ...

  2. 利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...

  3. 让docker中的mysql启动时自动执行sql文件

    本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...

  4. 在Docker中体验数据库之MySql

    在上一篇在Docker中体验数据库之Mongodb之后,这次记录一下在docker中安装mysql.过程要比Mongodb麻烦一点…… 参考网址: https://dev.mysql.com/doc/ ...

  5. 在Docker中体验数据库之Mongodb

    本文记录一下,在docker中安装Mongodb的过程. 环境:物理机 ubuntu18.04 因为环境变了,我在一台物理机上直接安装了ubuntu(非虚拟机和双系统),制作U盘镜像.安装参考:htt ...

  6. docker中管理数据

    到目前我们介绍了一些Docker的基础概念, 知道了如何使用Docker的image, 也知道了如何在多个container间通过网络通讯. 在这章里我们将介绍如何在docker的container内 ...

  7. 在Docker中安装配置Oracle12c并实现数据持久化

    在Docker中安装配置Oracle12c并实现数据持久化 选定镜像,并pull到系统中,一定要先配置加速,不然超级慢 eric@userver:~$ docker pull sath89/oracl ...

  8. 从docker中备份oracle和mongo数据

    从docker中导出Oracle数据 这里推荐先把脚本文件放到容器里面(这里没有) #!/bin/sh # 进入容器 # 本机备份位置 /root/oracleData/dist/temp # 当前日 ...

  9. Docker中数据卷(Volume)的使用

    数据卷有两种形式,一种是容器中的某个目录,它可以被别的容器引用,只要有一个容器引用了这个数据卷,数据就不会被删除:另一种数据卷是将容器中的数据卷和宿主机的目录进行挂载. 数据卷可以在多个容器之间共享, ...

随机推荐

  1. Jquery一些实用函数

    1.jQuery.parseJSON( json )第一个参数json的类型是字符串: var obj = jQuery.parseJSON( '{ "name": "J ...

  2. npm详解

    一.npm介绍及安装 对于npm,大家多多少少都用过,作为一门技术,我想写篇博客记录一下,一起分享,一起学习. npm,是Node Package Manager的缩写,node的模块管理器,它是随同 ...

  3. StringBuilder的实现

    先看看MS给出的官方解释吧 (http://msdn.microsoft.com/zh-cn/library/system.text.stringbuilder(VS.80).aspx) String ...

  4. CF IndiaHacks 2016 F Paper task 后缀数组

    题目链接:http://codeforces.com/problemset/problem/653/F 大意是给出一个只包含'('和')'的括号串,求有多少不同的子串是合法的括号串 解法:对于每一个后 ...

  5. js里变量的作用域

    一.在js中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域.也就是说,如果变量是在某个函数中定义的,那么,它在函数以外的地方是不可见的.但是,如果该变量是定义在if或者for这样的代码块 ...

  6. 微信小程序后台音乐播放注意事项

    wx.seekBackgroundAudio(OBJECT) 作用:控制音乐播放进度. 注意: 该事件 会触发 wx.onBackgroundAudioPlay(CALLBACK) 事件 ,也就是相当 ...

  7. split()方法

    split()方法用于把一个字符串分隔成字符串数组. 它有两个参数: separator:从参数指定的地方分隔字符串,必需: howmany:该参数可指定返回的数组的最大长度.如果设置了该参数,返回的 ...

  8. [ext4]09 磁盘布局 - superblock备份机制

    如果sparse_super特性flag被设置(即开启了sparse_super特性),那么super_block和组描述符的副本只会保存在group索引为0或3.5.7的整数幂. 如果没有设置spa ...

  9. Laravel 中使用 Redis 数据库

    一.前言 Redis 是一个开源高效的键值对存储系统,它通常用作为一个数据结构服务器来存储键值对,它可以支持字符串.散列.列表.集合.有序集合. 1. 安装 predis/predis 在 Larav ...

  10. 关于制作C语言头文件的思考

    我们接触的第一个c语言代码是这个: #include<stdio.h> main() { printf("Hello World"); } 这是最简单的c代码,然而,它 ...