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

此次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]# catDockerfile

FROM centos

MAINTAINER json_hc@163.com

COPY 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

RUNyum remove mysql-libs -y

RUNyum -y install *.rpm

ADD business.sql/root/business.sql

ADD server.cnf/etc/my.cnf.d/server.cnf

ADD setup.sh /root/setup.shRUNyumclean all

RUNchmod +x /root/setup.shEXPOSE3306CMD ["/root/setup.sh"]

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

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

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

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

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

[root@docker mysql]# catserver.cnf

[mysqld]

bind-address=0.0.0.0console=1general_log=1general_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/mysql

mysql_install_db--user=mysql > /dev/nullmysqld_safe--user=mysql &

sleep 5mysql< /root/business.sqlsleep 5

ps -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]# catbusiness.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的dockerfile_Dockerfile构建MySQL相关推荐

  1. mysql的dockerfile_dockerfile构建mysql镜像

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

  2. 远程连接docker中的mysql容器_docker构建mysql容器及Navicat 远程连接

    1. MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像 docker images 1.2创建MySQL容器 首先建立所需要的 文件夹: docker run - ...

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

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

  4. mysql基础搭建_MySql基础-构建MySql数据库:安装MySql-server、MySql-client

    1 构建MySQL服务器 1.1 问题 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 ...

  5. heartbeat+drbd+mysql构建mysql高可用群集

    heartbeat+drbd+mysql构建mysql高可用群集 1. 试验环境: 操作系统:Red Hat Enterprise Linux 5.4 所需的软件包: mysql-5.5.22.tar ...

  6. Dockerfile构建MySQL

    利用Dockerfile自定义构建MySQL服务折腾了几天,一直在启动服务上出现错误,现在终于解决了该问题,这里进行记录一下 本文参考http://iamdavidxie.com/2014/07/21 ...

  7. eclipse连接mysql_专题一、flask构建mysql数据库正确姿势

    每周壹总结,一起共同充电第121篇 应用程序最核心的就是数据,每天我们写程序其实也是在处理数据的过程,那么很有必要系统性的讲讲和梳理python的flask框架是如何进行数据交互操作的. 趁这3天假期 ...

  8. dockerfile 安装mysql_dockerfile构建mysql镜像

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

  9. 如何使用KingShard构建MySQL集群

    1. KingShard的应用场景 现在越来越多的互联网公司仍在大量使用MySQL来存储各种类型的关系数据.随着数据量和流量的增加,开发人员不得不考虑一些与MySQL相关的新问题. 读/写拆分.随着前 ...

最新文章

  1. 11月最热论文Top10、五大学科最热论文Top3!
  2. IIS设定 CORS 跨域请求(跨域)
  3. 算法分析之-渐进记号
  4. android 启动另外一个activity,起动另外一个activity只能在activity里面启动吗
  5. ActiveMQ在windows下启动失败解决方案
  6. mysql权限表_MySQL 数据库赋予用户权限操作表
  7. python java混合编程_详解java调用python的几种用法(看这篇就够了)
  8. 为什么越来越多的人喜欢自驾游?
  9. ostream作为函数返回值_函数的调用(一)
  10. SSM框架原理以及流程
  11. 57个你没有听过的Google产品
  12. Phaser知识点总结
  13. Excel催化剂100+大主题功能梳理导读
  14. 百度wz搜索竞价推广关键词转化成本计算
  15. 25.Linux系统忘记登录密码解决办法(别着急,还能抢救一下)
  16. Dynamodb基础操作
  17. 远程登录Linux系统
  18. Armadillo C++ Library
  19. 2022年“研究生科研素养提升”系列公益讲座在线测评题目与参考答案
  20. 高铁与机场成交通信息化建设的双驾马车

热门文章

  1. SharePoint的WebService的应用
  2. C++ Testing Framework
  3. Error APICloud iOS null is not an object
  4. Android中的windowSoftInputMode属性详解
  5. Laravel源码入门-启动引导过程(四)app/Http/Kernel.php
  6. lduan Exchange 2013 公共文件夹(十)
  7. crontab定时巡检使用
  8. laravel debug,http模式,日志
  9. Cesium中Clock控件及时间序列瓦片动态加载
  10. 【python之路8】python基本数据类型(二)