#Dockerfile for mysql5.7
FROM centos COPY ["src","/src"] RUN groupadd -g 1003 mysql \
&& useradd -u 1003 -g mysql -s /sbin/nologin mysql ;\
yum install -y gcc \
gcc-c++ \
cmake \
make \
readline-devel \
libcurl libcurl-devel \
zlib zlib-devel \
&& yum clean all ;\
cd /src/ \
&& tar xf percona-server-5.7.23-24.tar.gz \
&& mv boost_1_59_0.tar.gz percona-server-5.7.23-24/ \
&& mkdir percona-server-5.7.23-24/build \
&& cd percona-server-5.7.23-24/build \
&& CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=nocona -O2 -pipe" CXXFLAGS="-march=nocona -O2 -pipe" \
cmake .. \
-DMYSQL_USER=mysql \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DSYSCONFDIR:PATH=/usr/local/mysql \
-DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql \
-DENABLED_PROFILING:BOOL=ON \
-DENABLE_DEBUG_SYNC:BOOL=OFF \
-DMYSQL_DATADIR:PATH=/data/database/mysql \
-DMYSQL_MAINTAINER_MODE:BOOL=OFF \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_BIG_TABLES:BOOL=ON \
-DWITH_FAST_MUTEXES:BOOL=ON \
-DENABLE-PROFILING:BOOL=ON \
-DWITH_SSL:STRING=bundled \
-DWITH_UNIT_TESTS:BOOL=OFF \
-DWITH_ZLIB:STRING=bundled \
-DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON \
-DWITH_PLUGINS=heap,csv,partition,innodb_plugin,myisam \
-DEFAULT_COLLATION=utf8_general_ci \
-DEFAULT_CHARSET=utf8 \
-DENABLED_ASSEMBLER:BOOL=ON \
-DENABLED_LOCAL_INFILE:BOOL=ON \
-DENABLED_THREAD_SAFE_CLIENT:BOOL=ON \
-DENABLED_EMBEDDED_SERVER:BOOL=OFF \
-DWITH_CLIENT_LDFLAGS:STRING=all-static \
-DINSTALL_LAYOUT:STRING=STANDALONE \
-DCOMMUNITY_BUILD:BOOL=ON \
-DWITH_SAFEMALLOC=OFF \
-DENABLE_DTRACE=0 \
-DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
-DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BOOST=.. \
&& make -j`grep -c processor /proc/cpuinfo` \
&& make install ;\
cd / ;\
cp /src/mysql_init.sh / ;\
cp /src/my.cnf /etc/ ;\
ln -sv /usr/local/mysql/bin/* /usr/local/bin/ ;\
mkdir /data/{save,database/mysql} -p ;\
strings /dev/urandom | tr -dc A-Za-z0-9 | head -c20 > /data/save/mysql_root ;\
chmod 600 /data/save/mysql_root ;\
chmod 700 /data/save ;\
chmod 750 /data/database/mysql ;\
chown mysql:mysql -R /data/database/mysql ;\
echo -e "/usr/local/mysql/bin/mysql -uroot -p\`cat /data/save/mysql_root\`" > /root/inmysql ;\
echo -e "/usr/local/mysql/bin/mysqladmin -uroot -p\`cat /data/save/mysql_root\` 'shutdown'" > /root/mysql_stop ;\
chmod 700 /root/mysql_stop /root/inmysql ;\
yum remove -y iputils* iproute file make gcc cpp vim-minimal acl bind* rootfiles file \
python-chardet gobject-introspection libxml2-python python-gobject-base basesystem libgomp \
libstdc++-devel glibc-headers mpfr passwd yum-plugin-ovl dbus-glib python-kitchen kernel-headers \
&& yum clean all ;\
userdel mail ;\
userdel ftp ;\
cp /usr/share/zoneinfo/Asia/Shanghai /etc/ ;\
ln -svf /etc/Shanghai /etc/localtime ;\
rm -rf /usr/local/mysql/{mysql-test,sql-bench,support-files,data,man,README.MySQL,COPYING,INSTALL-BINARY,docs} ;\
rm -rf /src /root/.bash* /root/.cshrc /root/.tcshrc /var/cache ENTRYPOINT ["/mysql_init.sh"]
HEALTHCHECK --interval=60s --timeout=5s CMD /usr/local/mysql/bin/mysqladmin -uroot -p$(cat /data/save/mysql_root) ping | grep alive || exit 1 EXPOSE 3306
CMD ["/usr/local/mysql/bin/mysqld","--defaults-file=/etc/my.cnf","--user=mysql"]

src目录下需要拷贝的文件:

-rw-r--r-- 1 root root 83709983 Jun 30  2017 boost_1_59_0.tar.gz
-rwxr-xr-x 1 root root 1481 Nov 23 09:39 mysql_init.sh
-rw-rw-r-- 1 root root 81641623 Oct 31 22:55 percona-server-5.7.23-24.tar.gz
-rw-rw-r-- 1 root root 2320 Dec 13 12:46 my.cnf

由于MySQL5.7的初始化方式等和MySQL5.5有差异,所以ENTRYPOINT脚本也有一定的差异:

#!/bin/bash
#数据库初始化脚本 chown mysql:mysql -R /data/database/mysql
#这里只判断判断数据目录为空,则先初始化再启动
if [ -z "$(ls -A /data/database/mysql/)" ] ; then
#初始化新实例
init_res=$(/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/database/mysql/ 2>&1)
[ "$?" -eq 0 ] && echo "初始化数据库完成..." || exit 1 chmod 750 /data/database/mysql
chmod 700 /data/database/mysql/mysql
chmod 660 /data/database/mysql/mysql/*
#启动mysqld新实例
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf > /dev/null &
mysqld_pid="$!" #等待mysqld启动完成
while [ ! -S /tmp/mysql.sock ]
do
if ps uax | grep -v grep |grep $mysqld_pid > /dev/null 2>&1 ; then
echo "等待mysqld启动..."
sleep 2s
else
echo "mysqld启动失败..."
exit 1
fi
done
[ "$?" -eq 0 ] && echo "mysqld启动完成..." || exit 1 old_passwd=$( echo "$init_res" | awk '/A temporary password is generated for root@localhost:/{print $NF}')
#配置初始化密码,删除空账号
/usr/local/mysql/bin/mysqladmin -u root -p"$old_passwd" password `cat /data/save/mysql_root`
[ "$?" -eq 0 ] && echo "root密码已重置..." || exit 1 #关闭mysqld
/usr/local/mysql/bin/mysqladmin -uroot -p`cat /data/save/mysql_root` shutdown
while ps uax | grep -v grep |grep $mysqld_pid > /dev/null 2>&1
do
echo "等待mysqld关闭..."
sleep 2s
done
[ "$?" -eq 0 ] && echo "重启mysqld..." || exit 1
fi exec "$@"

MySQL5.7 Dockerfile的更多相关文章

  1. docker 持久化存储

    1.data Volume  mysql5.7:dockerfile FROM debian:stretch-slim # add our user and group first to make s ...

  2. Dockerfile 编译安装mysql5.7 千万不要执行.只是记录一下编译安装罢了

    开启所有核心make  20G 内存都不够玩,跑3-4个核心吧,还好. 最后的出来的镜像3G多,百思不得其解,看了官方的Dockerfile,也没什么特别,就是 apt 或者 yum.好吧,不知做了什 ...

  3. 利用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 ...

  4. Docker MySQL5.5镜像

    定制MySQL的镜像有个很大的难题:mysqld启动之前要初始化数据目录,5.5自带有空账号密码需要初始化. Dockerfile FROM centos # 拷贝需要的安装和MySQL初始脚本 CO ...

  5. Dockerfile构建MySQL

    转自:https://www.cnblogs.com/jsonhc/p/7807931.html 利用Dockerfile自定义构建MySQL服务折腾了几天,一直在启动服务上出现错误,现在终于解决了该 ...

  6. 使用 dockerfile 创建镜像

    dockerfile 是一个文本格式的配置文件,可以使用 dockerfile 快速创建自定义的镜像. dockerfile 一般包含4部分信息:基础镜像信息.维护者信息.镜像操作指令.容器启动时执行 ...

  7. 利用Dockerfile构建一个基于CentOS 7镜像

    利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像. Dockerfile内容如下: FROM centosMAINTA ...

  8. docker创建mysql5.7.22并配置主从

    debian系统 安装docker (参考网址:https://cloud.tencent.com/developer/article/1360720) 1.更新现有的包列表 sudo apt upd ...

  9. 1.docker介绍、命令、容器、镜像、数据卷、Dockerfile、常用软件安装、推送阿里云

    一.docker介绍 1.docker是什么 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各 ...

随机推荐

  1. Golang & GitLab-CI 详细实例步骤

    1.安装GitLab-Runner 1)curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi- ...

  2. 在POM配置Maven plugin提示错误“Plugin execution not covered by lifecycle configuration”的解决方案

    eclipse在其POM文件的一处提示出错如下: Plugin execution not covered by lifecycle configuration: org.apache.maven.p ...

  3. 使用 intro.js 库

    使用 render() { const reducer = this.props.testReducer; return ( <React.Fragment> <button dat ...

  4. Mysql 数据库开发规范

    设计范式参看,DDL与DDL 库表基础规范 1.注释 每个表要添加注释,对 status 型需指明主要值的含义,如”0-离线,1-在线” 2.表的字段数量 单表字段数一般考虑上限为 30左右,再多的话 ...

  5. metasploit 常用命令备忘

    metasploit 常用命令备忘    MSFconsole Commands-------------------------------------24show exploits 查看所有exp ...

  6. vue v-for的数组改变导致页面不渲染解决方法

    直接在数组里,改变数组来达到重新渲染页面的目的, 需要用push等数组方法, 或者$set(),或者给数组重新赋值,来改变数组引用地址 而是直接索引= <body> <div id= ...

  7. ELK之使用heartbeat监控WEB站点

    简介 无论您要测试同一台主机上的服务,还是要测试开放网络上的服务,Heartbeat 都能轻松生成运行时间数据和响应时间数据 Heartbeat 能够通过 ICMP.TCP 和 HTTP 进行 pin ...

  8. php导出超大csv导出方法,读取超大文件或者接受超大数组,防止内存溢出

    基本思路就是,知道总数之后分割成2万一个数组进行查询,最后独立写入csv,避免数据过大导致溢出 速度还不错,在php7下,机器I5 8G内存,128G,SSD,52W多条,大概也就30秒,出来整个文件 ...

  9. win10系统激活

    我们常常使用一些激活工具来激活,效果可能比较差.比如我激活win10教育版,下载了很多软件无论如何都不能激活.但是使用命令行很容易就激活了. 1. 2.在命令提示符中依次输入: slmgr.vbs / ...

  10. Windows 10 Creators Update [ISO官方镜像][15063][1703][x64][x86][创意者更新正式版]

    请把下载地址手动复制到迅雷里面去,谢谢! [64 位简体中文专业/家庭版] 文件名:cn_windows_10_multiple_editions_version_1703_updated_march ...