PS:经过改进,使得运行容器后mysql初始化自动完成,服务也同时启动

说明

基于docker.io/caio2k/centos7:latest镜像,通过Dockerfile文件传入一个YUM配置文件和初始化脚本,生成新的镜像build:mysql

Dockerfile文件:

FROM docker.io/caio2k/centos7:latest
MAINTAINER Ops_An nsd_anqixiang@163.com
ENV EnvironmentFile=-/etc/sysconfig/mysql
RUN rm -rf /etc/yum.repos.d/*
COPY *.repo /etc/yum.repos.d/
COPY start.sh /root/start.sh
RUN yum -y install mysql-server && yum clean all && echo "a" |passwd --stdin root && chmod 777 /root/start.sh

VOLUME /data/mysql3306
WORKDIR /usr/local/mysql
EXPOSE 3306
HEALTHCHECK --interval=5s --timeout=3s --retries=3 CMD mysql -uroot -p123456 -e 'select user from mysql.user where user="root"'
CMD ["/usr/bin/bash", "/root/start.sh"]

YUM配置文件:
我是把mysql-5.7.17.tar.gz的源码包解压后做了一个自己的YUM仓库

[local_repo]
name=Centos-$releasever-Base
baseurl="ftp://192.168.1.254/centos-1804"
enabled=1
gpgcheck=0

[mysql_repo]
name=Centos-$releasever-Base
baseurl="ftp://192.168.1.254/myrepo"
enabled=1
gpgcheck=0

初始化脚本start.sh:

#!/bin/bash
#mysql初始化
INIT_MYSQL(){
mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306
/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
pwd=`cat /root/.mysql_secret |sed -n '2p'`
mysqladmin -uroot -p"${pwd}" password '123456'
}
#mysqld守护脚本
MYSQL_DAEMON(){
while :
do
Num=`ps aux |grep mysql |wc -l`
[ "$Num" -lt 2 ] && /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
sleep 5
done
}
/usr/sbin/sshd -D &
File_Count=`ls /data/mysql3306 |wc -l`
[ "$File_Count" -eq 0 ] && INIT_MYSQL
MYSQL_DAEMON

/etc/my.cnf配置文件

[mysqld]
datadir=/data/mysql3306
socket=/data/mysql3306/mysql.sock
symbolic-links=0
log-error=/data/mysql3306/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
user=mysql
[client]
socket=/data/mysql3306/mysql.sock

制作镜像:

mkdir /root/mysql
cd /root/mysql
把Dockfile文件,YUM配置文件,初始化脚步放入/root/mysql下
运行:docker build -t build:mysql .

运行容器并与宿主机时间同步:

docker run -it -v /data/mysql/my.cnf:/etc/my.cnf \
-v /data/mysql/data/:/data/mysql3306 -v /etc/localtime:/etc/localtime build:mysql