说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我。

一、yum方式安装mysql

1、编写dockerfile文件

#FROM centos:7FROM xxlaila/centos7.6-jdk1.8LABEL maintainer=‘xxx‘ centos_version=‘7.6‘ mysql_version=‘5.7‘ jdk_version=‘1.8‘#ADD jdk-8u181-linux-x64.tar.gz /usr/local

COPY bootstrap.sh/etc/WORKDIR/usr/local

RUN yum install wget crontabs iproute-y&& wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm \

&& rpm -ivh mysql57-community-release-el7-10.noarch.rpm&& yum install install mysql-server -y --nogpgcheck&& mysqld --initialize --explicit_defaults_for_timestamp --user=mysql&& chmod 777 /etc/bootstrap.sh#ENV PATH/usr/local/jdk/bin:$PATHCOPY my.cnf/etc/my.cnf

COPY createDB.sql/mysql/createDB.sqlCOPY privileges.sql/mysql/privileges.sqlEXPOSE3306 ENTRYPOINT ["/etc/bootstrap.sh"]

CMD ["/usr/sbin/init"]

2、bootstrap.sh文件

#!/bin/bashset -x

#判断mysql root密码是否被赋值,如果没有赋值,给定默认值

MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-123456}

#判断mysql是否启动

mysqld--user=mysql &sleep2function start_mysql(){for p in {3..0};doPORT=$(ss -anlp|grep 3306|wc -l)if [ $PORT != 1]; then

echo"Mysql 未启动,启动mysql"mysqld--user=mysql &sleep2

elseecho"Mysql 以启动"

breakfiif [ $p = 0]; then

echo>&2 ‘MySQL 启动失败!‘exit1fi

done

}

start_mysql

#获取mysql初始密码

PASSWORD=$(awk ‘/password/{print $NF}‘ /var/log/mysqld.log)

echo"修改mysql密码..."mysql--connect-expired-password -uroot -p"$PASSWORD" -e "alter user [email protected] identified by ‘$MYSQL_ROOT_PASSWORD‘" > /dev/null 2>&1#判断密码是否修改成功#if [ $? -eq 0 ];then# echo"Mysql密码修改成功..."

#else# echo"Mysql密码修改失败..."# exit1#fi

#设置环境变量

MYSQL="mysql --protocol=socket -uroot -p${MYSQL_ROOT_PASSWORD}"#初始化sql

echo"1. 初始化mysql..."#1、判断数据库test_db是否存在

$MYSQL-e "use test_db;" > /dev/null 2>&1

if [ $? != 0]; then

echo‘2. creating database...‘$MYSQL< /mysql/createDB.sqlecho‘4. flush privileges....‘$MYSQL< /mysql/privileges.sql

fi

# check mysql status

#echo `service mysql status`

echo‘5. mysql for test_db is ready...‘

3、my.cnf

[mysqld]

server-id=1max_connections=3000#basedir= /usr/local/mysql

#datadir= /data/mysql/data

port= 3306#secure_file_priv=/data/mysql/data

query_cache_type=1query_cache_size=120M

query_cache_min_res_unit=4096character_set_server=utf8

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘general_log=ON

slow_query_log=1long_query_time=2#log-error=/data/mysql/logs/mysql.err

#log_bin=/data/mysql/logs/mysql-bin

#slow-query-log-file=/data/mysql/logs/slowquery.log

#socket= /data/mysql/mysql.sock

symbolic-links=0character-set-server=gbk

#######################

[client]

#socket=/data/mysql/mysql.sock

[mysql]default-character-set=gbk

二、基于源码安装mysql

1、dockerfile文件

FROM centos:7LABEL maintainer=‘xxx‘ centos_version=‘7.7‘ mysql_version=‘5.7‘ jdk_version=‘1.8‘#拷贝并解压mysql、jdk软件包

ADD jdk-8u181-linux-x64.tar.gz /usr/local

ADD mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz /usr/local

WORKDIR/usr/local

COPY setup.sh/usr/bin/RUN ln-s mysql-5.7.24-linux-glibc2.12-x86_64 mysql&& ln -s jdk1.8.0_181 jdk&& groupadd -r mysql&& useradd -r -g mysql mysql&& yum install -y crontabs libaio libaio-devel numactl.x86_64 iproute&& cat /data/cron |crontab&& chmod 777 /usr/bin/setup.sh

ENV PATH/usr/local/mysql/bin:/usr/local/jdk/bin:$PATH

EXPOSE3306 #拷贝初始化mysql的sql文件

COPY my.cnf/etc/my.cnf

COPY createDB.sql/mysql/createDB.sqlCOPY privileges.sql/mysql/privileges.sql#执行初始化脚本文件

ENTRYPOINT ["setup.sh"]

2、setup.sh文件信息

#!/bin/bashset -x

echo"----开始初始化mysql----------------------"mkdir-p /data/mysql/{data,logs,conf,mysql.pid}

touch/data/mysql/logs/mysql.err

chown-R mysql.mysql /data/mysql

#curl-o /data/mysql/conf/my.cnf http://124.207.22.13/logs/Math/my.cnf

#ln -s /data/mysql/conf/my.cnf /etc/my.cnf/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

cp/usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod777 /etc/init.d/mysqld

#ln-s /usr/local/mysql/bin/*/usr/bin/

echo "初始化数据库完毕.数据持目录:/data/mysql"

echo "设置变量"

passwd="$(awk ‘/localhost/{print $NF}‘ /data/mysql/logs/mysql.err|head -1)"

dbinit=( mysql --connect-expired-password -uroot -p"$passwd" )

#sed -i ‘/\[mysqld\]/a\skip-grant-tables‘ /etc/my.cnf

echo "启动数据库"

#启动数据库并判断状态

sed -i "47cdatadir=/data/mysql/data" /etc/init.d/mysqld

function start_mysql(){

/etc/init.d/mysqld restart && sleep 3

echo "启动后查看进程"

port=$(ss -lntp|grep "3306"|wc -l)

for p in {3..0}; do

if [ $port -ne 1 ];then

echo "Mysql启动失败-重新启动"

/etc/init.d/mysqld restart && sleep 2

else

echo "Mysql 已经启动"

break

fi

if [ "$p" = 0 ];then

echo >&2 ‘MySQL 启动失败!‘

exit 1

fi

done

}

start_mysql

echo "修改数据库密码"

#passinit="alter user [email protected] identified by ‘123456‘;"

#echo $passinit | $dbinit

#echo $dbinit

mysql --connect-expired-password -uroot -p"$passwd" -e "alter user [email protected] identified by ‘123456‘;"

echo "$passwd" 密码

#echo "重新启动mysql"

#start_mysql

#初始化sql

#mysql=( mysql --protocol=socket -uroot -hlocalhost --socket="/data/mysql/mysql.sock" -p123456)

mysql="mysql --protocol=socket -uroot -hlocalhost --socket=/data/mysql/mysql.sock -p123456"

#echo ‘1. starting mysql...‘

#service mysql start

$mysql -e "use test_db;" > /dev/null 2>&1

if [ $? != 0 ]; then

echo ‘2. creating database...‘

$mysql < /mysql/createDB.sql

set password

echo ‘3. flush privileges....‘

$mysql < /mysql/privileges.sql

fi

# check mysql status

#echo `service mysql status`

echo ‘4. mysql for test_db is ready...‘

3、my.cnf

[mysqld]

server-id=1max_connections=3000basedir= /usr/local/mysql

datadir= /data/mysql/data

port= 3306secure_file_priv=/data/mysql/data

query_cache_type=1query_cache_size=120M

query_cache_min_res_unit=4096character_set_server=utf8

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘general_log=ON

slow_query_log=1long_query_time=2log-error=/data/mysql/logs/mysql.err

log_bin=/data/mysql/logs/mysql-bin

slow-query-log-file=/data/mysql/logs/slowquery.log

socket= /data/mysql/mysql.sock

symbolic-links=0character-set-server=gbk

#######################

[client]

socket=/data/mysql/mysql.sock

[mysql]default-character-set=gbk

注:基于源码安装比基于yum安装方式,最后生成的镜像大一点多G,如下:

1.78GB是yuam方式安装

3.31GB这个是源码安装,这种方式安装以后,镜像实在是有点太大了。

总的来说,这个镜像还是太臃肿,最好是几百兆就完美了。

借鉴:

原文:https://www.cnblogs.com/yjt1993/p/11958981.html

centos基础镜像做mysql镜像_使用docker 基于centos7制作mysql镜像相关推荐

  1. Docker基于容器制作httpd镜像(使用nfs共享存储部署一个网站)

    Docker基于容器制作httpd镜像 1 编译安装httpd 2 安装nfs共享存储 3 使用nfs共享存储提供httpd网页服务 4 在浏览器上进行测试访问 1 编译安装httpd [root@d ...

  2. trove mysql 镜像_trove 基于 centos7 制作 mysql5.6 镜像

    本文档是手动制作mysql5.6的trove镜像 openstack版本为newton 1.创建基础虚拟机 登录openstack创建一台虚拟机,这台虚拟机用于制作trove镜像,虚拟机的根磁盘最终会 ...

  3. Docker 3.2.8:基于 Dockerfile 制作 JDK 镜像

    3.2.8:基于 Dockerfile 制作 JDK 镜像 准备基础镜像 以 centos-init:v1 为基础镜像: 编写 Dockerfile 切换到相应目录,编写 Dockerfile: ro ...

  4. Docker 3.2.12:基于 Dockerfile 制作 Redis 镜像

    3.2.12:基于 Dockerfile 制作 Redis 镜像 准备基础镜像 使用之前制作的 centos-init:8.3.2011 作为基础镜像: 编写 Dockerfile 制作 redis- ...

  5. Docker 3.2.5:基于 Dockerfile 制作 Nginx 镜像

    3.2.5:基于 Dockerfile 制作 Nginx 镜像(编译版) 准备基础镜像 使用制作好的 centos-init 作为基础镜像: 编写 Dockerfile 进入相应的 Dockerfil ...

  6. Docker将容器制作成镜像并提交到远程仓库

    Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/.或者在阿里云也可以. 2. 然后先创建一个空的镜像名. ...

  7. trove mysql 镜像_trove 基于 centos7 制作 mysql5.5 镜像

    本文档是手动制作mysql5.5的trove镜像 openstack版本为newton 1.创建基础虚拟机 登录openstack创建一台虚拟机,这台虚拟机用于制作trove镜像,虚拟机的根磁盘最终会 ...

  8. jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...

    上一篇文章讲述了Mysql的基本框架,和sql执行的流程,这篇文章首先分析下每个流程的具体细节,然后介绍日志文件和数据文件以下面语句作为例子来分析流程中每一步的具体细节: select * from ...

  9. knex mysql 操作_手把手教你用express + mysql + knex 做个 todoList

    成果展示 启动mysql,用knex连接数据 接口功能拆分 建表:创建任务列表 查询任务列表 添加任务 删除任务 修改任务内容 把任务设为已完成/恢复任务为未完成 前端展示:vue+bootstrap ...

最新文章

  1. 通用数据库连接执行类(SQL)
  2. mysql server 5.6使用_关于MySQLServer5.6配置问题
  3. CodeForces - 1547F Array Stabilization (GCD version)(ST表+二分)
  4. 360——新式的流氓
  5. 二相漏电断路器接线图_怎么看配电柜接线图?配电柜接线图读图技巧
  6. mysql配置文件(完整版)
  7. 【雅思大作文考官范文】——第九篇:‘CCTV essay’
  8. 公共安全平台年末总结
  9. A Question of Ingestion(Dp)
  10. UGUI优化之路- Image的Sliced优化
  11. MYSQL 数据库对象管理实验
  12. SPR1: Spring简介
  13. Webyog Sqlyog Ultimate_12.5.1最新版完美破解(带注册码)
  14. python编程:总结了一些高效使用 PyCharm 技巧,(三)
  15. 172-Next.js入门
  16. Arduino音乐频谱
  17. 电子小制作:户外下雨传感装置
  18. Android Intent应用
  19. speex AEC算法学习小结
  20. Twitter实现每秒处理3000张图片的优化实践

热门文章

  1. 码云图床php,PHP 脚本实现 Markdown 文章上传到七牛图床
  2. 网站页面布局这样设计才更好
  3. elementUI中svg图标库
  4. 清华大学计算机专业在职博士吧,清华大学计算机在职研究生的学位有没有受国家认可?...
  5. 纵观消防设备电源监控系统
  6. vite兼容IE、低版本浏览器方法
  7. 如何用scratch实现打色子的游戏
  8. 搭档之家:以中位数碾压腾讯平均数!网曝台积电普通员工年薪约37.4万元
  9. 信访分析 大数据_【信访微观察】“大数据”有多火?化解信访矛盾也用上了它!...
  10. MBED OS 参考手册-边读边翻译,