背景:docker-k8s逐漸火熱、以下記錄編譯的mysql容器化、後面會發出k8s編排寫法
此文章全爲學習、生產建議使用官方chart部署。
1、dockerfile部分
FROM registry.det.baidu.com/library/baidu/base-centos:0.1.1
WORKDIR /home/sock/mysql/
RUN groupadd mysql && useradd -g mysql mysql
ADD mysql-5.7.21.tar.gz /home/sock
ADD entrypoint.sh /
ENV NEW_PASSWORD Baidu@1234.
EXPOSE 3306
#ENTRYPOINT [ "entrypoint.sh" ]
CMD [ "/entrypoint.sh" ]
2、entrypoint.sh部分
#!/bin/bash
sock(){
init
sleep 5
pass
start
sleep 5
user
}
DIRECTORY=/home/sock/mysql/data
dir=/home/sock
sock=/home/sock/mysql/tmp/mysql.sock
#NEW_PASSWORD=Baidu@1234.
########init-passwd#######
pass(){
echo $(tail -1 /home/mysql_passwd.txt |awk -F " " '{print $NF}') > /home/mysql_passwd.txt
}
########init-sock#########
init(){
if [ "`ls -A $DIRECTORY`" = "" ]; then
echo "$DIRECTORY is indeed empty"
$dir/mysql/bin/mysqld --initialize --user=mysql --basedir=/$dir/mysql --datadir=$dir/mysql/data/ &> /home/mysql_passwd.txt
else
echo "$DIRECTORY is not empty"
fi
}
########init-user#########
user(){
mima=$(cat /home/mysql_passwd.txt)
auth=`$dir/mysql/bin/mysql -uroot -p$NEW_PASSWORD -P 3306 -S $sock -e "SELECT * FROM mysql.user WHERE user='root'\G"|grep Host|grep %|wc -l`
if [ $auth -eq 1 ]; then
echo "-uroot -p$NEW_PASSWORD % "
tail -f $dir/mysql/log/mysql.log
else
$dir/mysql/bin/mysql --connect-expired-password -uroot -p${mima} -e "alter user 'root'@'localhost' identified by '$NEW_PASSWORD';" -S $sock
$dir/mysql/bin/mysql -uroot -p$NEW_PASSWORD -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$NEW_PASSWORD' WITH GRANT OPTION;" -S $sock
tail -f $dir/mysql/log/mysql.log
fi
}
start(){
#######sock#####
counter=$(ps -C mysqld --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
$dir/mysql/bin/mysqld_safe --defaults-file=$dir/mysql/etc/my.cnf --user=mysql &
else
echo mysql-up
fi
}
sock
exec "$@"
3、run起mysql服務
NEW_PASSWORD=“Pwd@1234.” ##root密碼
docker run -itd -e NEW_PASSWORD="Pwd@1234." -p 8496:3306 --name mysql-5.7.21 registry.det.baidu.com/library/mysql:5.7.21
4、驗證
mysql -uroot -pPwd@1234. -h10.61.187.40 -P 8496