Docker 有没有好点的 docker 解坑博客

hellohell · 2018年12月05日 · 最后由 hellohell 回复于 2018年12月08日 · 1397 次阅读
  • Q: docker mysql 咋用?
  • A: docker run -d --name mysql -p 3306:3306 -e MY_ROOT_PASSWORD mysql,然后根据情况可以挂载目录,能翻出一大堆...;

然后我发现: 最简单的那种使用 ,解决不了

  • utf-8 编码
  • 远程登陆授权 (8.0 和和 5.6 的授权代码还有点不一样...)

可以起来后进容器修改,但不是需要一键完成么. 如果使用挂载的方式,编码可以解决,控制权限在容器的/var/lib/mysql/mysql/,如果是测试环境,
测试数据无需保留,相当于一部分挂载一部分数据还无需保留...

在 github 上找了找,
根据 https://github.com/ibusybox/mysqlutf8
我篡出了这个 https://github.com/mixure/mysqlutf8/

这样 docker run -d --name mysql -p 3306:3306 mysqlutf8 确实是个 utf8,能远程登陆的容器

然后篡出了这个 (我确实不知道那个延时为什么要必须加,大概是马上运行第二句容器反应不过来,而且加短了还不成....)

init_mysql.sh

docker run -d -p 3307:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysqlutf8
sleep 10  
docker exec -i mysql mysql -uroot -p123456<<EOF
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
exit
EOF

然后以上花了我差不多 2 小时时间...
我的问题是 有没有相关 docker 的干货贴,能节省点时间; 如此下去,岂不是哪个镜像都要摸索一遍
有可靠是石头能摸着过河么?

共收到 7 条回复 时间 点赞

自己写个 Dockerfile,想怎么搞就怎么搞

首先,官方的 mysql 镜像已经支持很多初始化的参数配置,在 run 的时候把 env 带进去就行了.可以参考https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html
其次,其实不是需要去摸索每一个镜像,而是先弄清楚 docker 的原理,根据自己的需求去定制或者使用自己的镜像.
官方镜像如果不能满足你的要求,或者有所谓的 bug,可以自己制作一个镜像,免去以后安装的烦恼.

hub.docker.com

其实 docker 本身并不复杂,但是包含特定应用的镜像都有不同的参数配置和配制方法,你要定制这些官方的镜像使其满足你的需求,肯定就要熟悉这个镜像本身的构建过程和其预定义的一些配置参数,而不同的镜像包含的应用可能还不一样,还得去熟悉这些应用的配制方法,这个就不是一篇博客就能够搞定的了。只能是自己遇见一个熟悉一个

按 docker 的最佳实践,一般是不推荐把 mysql 也做到镜像里面的,尤其是线上系统。国内有很多社区比如 dockerone.io。获取镜像通常有两种方式:通过 docker hub 等获取,一般开源项目的官方都在里面有维护镜像。另外一个是自制:比如通过 dockerfile 来生成,如果觉得学习成本,也是支持手工 commit 的。

之前也做过一次 docker 搭建 mysql ,整理了相关的问题,可以参考下:
https://testerhome.com/topics/16772

感谢以上的人回帖

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册