centos基础镜像做mysql镜像_使用docker 基于centos7制作mysql镜像
说明:由于业务需要使用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镜像相关推荐
- Docker基于容器制作httpd镜像(使用nfs共享存储部署一个网站)
Docker基于容器制作httpd镜像 1 编译安装httpd 2 安装nfs共享存储 3 使用nfs共享存储提供httpd网页服务 4 在浏览器上进行测试访问 1 编译安装httpd [root@d ...
- trove mysql 镜像_trove 基于 centos7 制作 mysql5.6 镜像
本文档是手动制作mysql5.6的trove镜像 openstack版本为newton 1.创建基础虚拟机 登录openstack创建一台虚拟机,这台虚拟机用于制作trove镜像,虚拟机的根磁盘最终会 ...
- Docker 3.2.8:基于 Dockerfile 制作 JDK 镜像
3.2.8:基于 Dockerfile 制作 JDK 镜像 准备基础镜像 以 centos-init:v1 为基础镜像: 编写 Dockerfile 切换到相应目录,编写 Dockerfile: ro ...
- Docker 3.2.12:基于 Dockerfile 制作 Redis 镜像
3.2.12:基于 Dockerfile 制作 Redis 镜像 准备基础镜像 使用之前制作的 centos-init:8.3.2011 作为基础镜像: 编写 Dockerfile 制作 redis- ...
- Docker 3.2.5:基于 Dockerfile 制作 Nginx 镜像
3.2.5:基于 Dockerfile 制作 Nginx 镜像(编译版) 准备基础镜像 使用制作好的 centos-init 作为基础镜像: 编写 Dockerfile 进入相应的 Dockerfil ...
- Docker将容器制作成镜像并提交到远程仓库
Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/.或者在阿里云也可以. 2. 然后先创建一个空的镜像名. ...
- trove mysql 镜像_trove 基于 centos7 制作 mysql5.5 镜像
本文档是手动制作mysql5.5的trove镜像 openstack版本为newton 1.创建基础虚拟机 登录openstack创建一台虚拟机,这台虚拟机用于制作trove镜像,虚拟机的根磁盘最终会 ...
- jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...
上一篇文章讲述了Mysql的基本框架,和sql执行的流程,这篇文章首先分析下每个流程的具体细节,然后介绍日志文件和数据文件以下面语句作为例子来分析流程中每一步的具体细节: select * from ...
- knex mysql 操作_手把手教你用express + mysql + knex 做个 todoList
成果展示 启动mysql,用knex连接数据 接口功能拆分 建表:创建任务列表 查询任务列表 添加任务 删除任务 修改任务内容 把任务设为已完成/恢复任务为未完成 前端展示:vue+bootstrap ...
最新文章
- 通用数据库连接执行类(SQL)
- mysql server 5.6使用_关于MySQLServer5.6配置问题
- CodeForces - 1547F Array Stabilization (GCD version)(ST表+二分)
- 360——新式的流氓
- 二相漏电断路器接线图_怎么看配电柜接线图?配电柜接线图读图技巧
- mysql配置文件(完整版)
- 【雅思大作文考官范文】——第九篇:‘CCTV essay’
- 公共安全平台年末总结
- A Question of Ingestion(Dp)
- UGUI优化之路- Image的Sliced优化
- MYSQL 数据库对象管理实验
- SPR1: Spring简介
- Webyog Sqlyog Ultimate_12.5.1最新版完美破解(带注册码)
- python编程:总结了一些高效使用 PyCharm 技巧,(三)
- 172-Next.js入门
- Arduino音乐频谱
- 电子小制作:户外下雨传感装置
- Android Intent应用
- speex AEC算法学习小结
- Twitter实现每秒处理3000张图片的优化实践
热门文章
- 码云图床php,PHP 脚本实现 Markdown 文章上传到七牛图床
- 网站页面布局这样设计才更好
- elementUI中svg图标库
- 清华大学计算机专业在职博士吧,清华大学计算机在职研究生的学位有没有受国家认可?...
- 纵观消防设备电源监控系统
- vite兼容IE、低版本浏览器方法
- 如何用scratch实现打色子的游戏
- 搭档之家:以中位数碾压腾讯平均数!网曝台积电普通员工年薪约37.4万元
- 信访分析 大数据_【信访微观察】“大数据”有多火?化解信访矛盾也用上了它!...
- MBED OS 参考手册-边读边翻译,