Dockerfile构建MySQL
转自:https://www.cnblogs.com/jsonhc/p/7807931.html
利用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 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
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.sh RUN yum clean all
RUN chmod +x /root/setup.sh
EXPOSE 3306 CMD ["/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/mysql mysql_install_db --user=mysql > /dev/null mysqld_safe --user=mysql & sleep 5 mysql < /root/business.sql sleep 5 ps -wef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 mysqld_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的更多相关文章
- Dockerfile构建mysql数据库
dockerfile文件: FROM centos:centos6 MAINTAINER admin "admin@topsec.com.cn" RUN yum insta ...
- 利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置
本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...
- 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置
本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...
- 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像
Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...
- docker:Dockerfile构建LNMP平台
docker:Dockerfile构建LNMP平台 1.dockerfile介绍 Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...
- 利用Dockerfile构建一个基于CentOS 7镜像
利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像. Dockerfile内容如下: FROM centosMAINTA ...
- 用Docker构建MySQL镜像
构建MySQL镜像 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过D ...
- 使用dockerfile构建镜像(docker build)
Docker buidl . 找出当前文件夹下的Docker build文件名的文件 Docker build -t centos(镜像名) . 在当前目录下找centos的镜像文件 Docker ...
- Dockerfile构建私有镜像
构建第一个镜像 镜像的定制实际上就是定制每一层所添加的配置,文件.我们可以把每一层修改,安装,构建,操作的命令都写入一个脚本,这个脚本就是Dockerfile.Dockerfile是一个文本文件,其内 ...
随机推荐
- java打印实心10*10正方形, 空心10*10正方形
public class PrintSquare { public static void main(String[] args) { printSolidSquare(10); System.out ...
- jQuery对象的获取与操作方法总结
一.文章概述: 众所周知,jQuery 是一个 JavaScript 库,包含多个可重用的函数,用来辅助我们简化javascript开发,它极大地简化了 JavaScript 编程.但是需要注意的一点 ...
- Mysql 之分库分表方案
Mysql分库分表方案 为什么要分表 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. mysq ...
- 舞蹈链(DLX)
舞蹈链(DLX) Tags:搜索 作业部落 评论地址 一.概述 特别特别感谢这位童鞋His blog 舞蹈链是一种优美的搜索,就像下面这样跳舞- 舞蹈链用于解决精确覆盖或者重复覆盖的问题 你可以想象成 ...
- 用最通俗的话解释AJAX是什么东西
直白地说,就是没用AJAX的网页,你点一个按钮就要刷新一下页面,尽管新页面上只有一行字和当前页面不一样,但你还是要无聊地等待页面刷新. 用了AJAX之后,你点击,然后页面上的一行字就变化了,页面本身不 ...
- 搭建(WSTMart)php电商环境时缺少fileinfo函数
搭建WSTMart环境步骤: 第一步:安装phpstudy,一键安装即可 第二步:把下好的系统源码,放到一个文件夹中,并放到刚刚安装好的phpstudy下WWW文件夹下,如WWW>WSTMart ...
- solr系统query检索词特殊字符的处理
solr是基于 lucence开发的应用,如果query中带有非法字符串,结果很可能是检索出所有内容或者直接报错,所以你对用户的输入必须要先做处理.输入星号,能够检索出所有内容:输入加号,则会报错. ...
- three.js学习:性能监视器stats.js的用法
用法一: var stats = new Stats(); stats.setMode(0); stats.domElement.style.position = 'absolute'; stats. ...
- 01-spark基础
1.定义 Spark是一个由scala语言编写的实时计算系统 Spark支持的API包括Scala.Python.Java .R 2.功能 Spark Core: 将分布式数据抽象为弹性分布式数据集( ...
- WPF圆角按钮与触发颜色变化
<Button x:Name="button1" Content="按钮1" Margin="10,10,0,0" Cursor=&q ...