利用Dockerfile自定义构建MySQL服务折腾了几天,一直在启动服务上出现错误,现在终于解决了该问题,这里进行记录一下

本文参考http://iamdavidxie.com/2014/07/21/create-a-mariadb-service-on-centos-with-docker/

此次Dockerfile文件中以centos:latest为基础镜像,在此基础上进行安装MySQL服务(这里以mariadb为例)

构建的原理:

1、利用Dockerfile进行安装MySQL服务(yum安装或者以rpm包安装(由于网络问题可将需要安装的包下载到本地进行安装))

2、编写shell脚本,将安装好的mariadb进行重新初始化,并启动mariadb,执行需要的sql脚本,关闭mariadb,最后通过前台开启服务

3、由于MySQL5.6和MySQL5.7的初始化方式不一样,本文介绍的适用于MySQL5.6(后面会有5.7的案例)

查看整个构建目录:

[root@docker mysql]# tree
.
├── business.sql
├── Dockerfile
├── MariaDB-10.0.33-centos7-x86_64-client.rpm
├── MariaDB-10.0.33-centos7-x86_64-common.rpm
├── MariaDB-10.0.33-centos7-x86_64-compat.rpm
├── MariaDB-10.0.33-centos7-x86_64-server.rpm
├── mariadb.repo
├── server.cnf
├── setup.sh
└── setup.sh.bak

目录中有下载好的mariadb安装的包,当然如果你网络好,只需要配置repo就行,然后将Dockerfile中的安装rpm的过程换成替换repo就ok

下面介绍Dockerfile文件,并介绍构建过程执行了什么:

[root@docker mysql]# cat Dockerfile
FROM centosMAINTAINER json_hc@163.comCOPY MariaDB-10.0.33-centos7-x86_64-client.rpm /root/MariaDB-10.0.33-centos7-x86_64-client.rpm
COPY MariaDB-10.0.33-centos7-x86_64-common.rpm /root/MariaDB-10.0.33-centos7-x86_64-common.rpm
COPY MariaDB-10.0.33-centos7-x86_64-compat.rpm  /root/MariaDB-10.0.33-centos7-x86_64-compat.rpm
COPY MariaDB-10.0.33-centos7-x86_64-server.rpm  /root/MariaDB-10.0.33-centos7-x86_64-server.rpm
WORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpm
ADD business.sql /root/business.sql
ADD server.cnf /etc/my.cnf.d/server.cnf
ADD setup.sh /root/setup.shRUN yum clean all
RUN chmod +x /root/setup.sh
EXPOSE 3306CMD ["/root/setup.sh"]

1、构建使用的基础镜像为centos:latest

2、将下载好的rpm包copy到镜像中,然后进行安装

3、将需要执行的sql、配置文件,最后执行的shell脚本也copy到镜像中

在执行setup.sh脚本之前mariadb服务已经安装完毕,基本的数据目录还是/var/lib/mysql

将配置文件拷贝到了镜像中,查看配置文件:

[root@docker mysql]# cat server.cnf
[mysqld]
bind-address=0.0.0.0
console=1
general_log=1
general_log_file=/dev/stdout
#log_error=/dev/stderr
collation-server=utf8_unicode_ci
character-set-server=utf8

里面的内容可以进行修改或者添加更多

查看setup.sh的内容:

[root@docker mysql]# cat setup.sh
#!/bin/sh
chown -R mysql:mysql /var/lib/mysqlmysql_install_db --user=mysql > /dev/nullmysqld_safe --user=mysql &sleep 5mysql < /root/business.sqlsleep 5ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9mysqld_safe --user=mysql

由于需要重新将安装好的mariadb服务进行初始化,所以避免出错可以将数据目录进行权限授予

MySQL5.6的初始化为mysql_install_db加上一些参数

初始化数据库后,后台开启mariadb服务,然后将sql进行执行:

[root@docker mysql]# cat business.sql
create database wordpress DEFAULT CHARACTER SET utf8;USE mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;UPDATE user SET password=PASSWORD("root") WHERE user='root';
FLUSH PRIVILEGES;

sql内容就是创建的库和设置root账号的密码

sql执行完成后setup.sh脚本后面就是将mariadb进程杀掉,最后由前台运行mariadb服务,如果在启动容器中遇见了错误,请利用docker logs container_name/container_id

进行查看,根据错误提示进行解决

自定义构建MySQL服务的项目可以在github查看:https://github.com/jsonhc/docker_project/tree/master/docker_dockerfile/lnmp/mysql

Dockerfile构建MySQL相关推荐

  1. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化

    前一段时间就在研究用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化,但被一些无关紧要的事儿给耽误了,经过查阅<dockerfile最佳实践>及MyS ...

  2. Dockerfile 构建mysql镜像

    Dockerfile 构建mysql镜像 1,建立文件 2,构建my.cnf文件 3,构建Dockerfile文件 4,构建镜像 5,构建容器 6,进入容器给权限 7,登录mysql 8,在宿主机yu ...

  3. Dockerfile构建mysql镜像,并初始化数据库数据

    2019独角兽企业重金招聘Python工程师标准>>> 参考:https://www.jb51.net/article/115422.htm 1)在CentOS7环境中进行操作, 创 ...

  4. dockerfile构建mysql镜像并初始化数据库

    dockerfile: FROM mysql:5.7 WORKDIR /docker-entrypoint-initdb.d ENV LANG=C.UTF-8 ADD my.sql . 注意:sql语 ...

  5. dockerfile 安装mysql_dockerfile构建mysql镜像

    使用dockerfile构建mysql,镜像构建完成后,运行容器后,启动mysql服务总是报错 Fatal error: Can't open and lock privilege tables: T ...

  6. mysql的dockerfile_dockerfile构建mysql镜像

    使用dockerfile构建mysql,镜像构建完成后,运行容器后,启动mysql服务总是报错 Fatal error: Can't open and lock privilege tables: T ...

  7. 使用Dockerfile构建Nginx,Tomcat,MySQL镜像

    实验环境说明 本机IP地址:192.168.10.157 构建mysql镜像时,验证的主机IP:192.168.10.149 构建Nginx镜像 1.下载基础镜像--centos镜像 docker p ...

  8. 这就是你日日夜夜想要的docker!!!---------Dockerfile构建nginx、Tomcat、MySQL镜像

    文章目录 构建nginxDockerfile镜像 构建DockerfileTomcat 构建Dockerfile MySQL镜像 构建nginxDockerfile镜像 这里的nginx软件包使用ng ...

  9. docker mysql 生产环境_Docker构建MySQL环境

    一.运行 MySQL 容器 根据镜像说明可知: 默认的配置文件是:/etc/mysql/my.cnf 默认的数据目录是:/var/lib/mysql 最简单的启动方式: docker run -d - ...

最新文章

  1. android xUtils的使用
  2. ubuntu安装protobuf
  3. Ubuntu的which、whereis、locate和find命令
  4. GridView列表数据的添加
  5. 原码一位乘法器设计_对原码、反码和补码的加深理解
  6. k8s 查看mysql 日志_k8s 使用 Init Container 确保依赖的服务已经启动
  7. jQuery 源码分析笔记(3)
  8. 第二章. node中的模块和require
  9. MPEG2、H.263、H.264协议效率对比
  10. Python2和Python3中raw_input( )和input( )区别(附代码)
  11. 开课吧:Java开发常用技术基础部分有哪些?
  12. Django模板-模板标签
  13. React Hook 写 Timer时钟
  14. numpy.zeros(np.zeros)
  15. Udacity也弃用React Native了 !
  16. Go官方依赖包管理工具dep的安装及使用
  17. 用foobar2000播放云服务器文件,foobar2000英文版怎么用 foobar2000怎么播放音频
  18. pscc2018更新内容
  19. Vue 事件绑定与解绑
  20. TI RTOS BLE CC2642 看门狗 Watcdog

热门文章

  1. php识别名片,用户信息名片怎么利用PHP实现自动生成
  2. android adb 环境,Android安卓环境搭建及ADB常用命令
  3. 跳转语句_C/C++中的goto语句
  4. python日志模块_Python之日志处理(logging模块)
  5. C/C++内存分配与Linux内存管理进程所涉及到的五个数据段 .
  6. php队列会停止执行吗,php – Laravel Artisan CLI安全地停止守护程序队列工作者
  7. java程序中可以如何异常处理?_如何处理罗茨鼓风机在运行过程中出现异常噪音和叶片的运行特性...
  8. 锐起无盘服务器安装教程,锐起无盘安装方法 图文教程
  9. python编译成class_django为Form生成的label标签添加class方式
  10. tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I