利用Dockerfile自定义构建MySQL服务折腾了几天,一直在启动服务上出现错误,如今终于解决了该问题,这里进行记录一下html
本文参考http://iamdavidxie.com/2014/07/21/create-a-mariadb-service-on-centos-with-docker/mysql
这次Dockerfile文件中以centos:latest为基础镜像,在此基础上进行安装MySQL服务(这里以mariadb为例)git
构建的原理:github
一、利用Dockerfile进行安装MySQL服务(yum安装或者以rpm包安装(因为网络问题可将须要安装的包下载到本地进行安装))sql
二、编写shell脚本,将安装好的mariadb进行从新初始化,并启动mariadb,执行须要的sql脚本,关闭mariadb,最后经过前台开启服务docker
三、因为MySQL5.6和MySQL5.7的初始化方式不同,本文介绍的适用于MySQL5.6(后面会有5.7的案例)shell
查看整个构建目录:数据库
[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就okjson
下面介绍Dockerfile文件,并介绍构建过程执行了什么:centos
[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"]
一、构建使用的基础镜像为centos:latest
二、将下载好的rpm包copy到镜像中,而后进行安装
三、将须要执行的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