#环境需求
1)安装docker必须是64位机器
2)安装docker时liunx的内核版本必须是3.10或更高版本
3)docker的版本默认是19.03.9
4)mysql的版本默认是5.7
5)docker-compose的版本默认是1.27.4
#结构
#-----------------------|mysql
#-----------------------------|conf (数据库my.cnf配置)
#-----------------------------|data
#-----------------------------|docker-compose.yml
#-----------------------|images
#------------------------------|mysql-5.7.zip
#-----------------------|package
#-------------------------------|docker-19.03.9.tgz
#-------------------------------|docker.service
#-------------------------------|docker-compose-1.27.4
#-----------------------|install_autodeploy_docker_compose.sh
#-----------------------|readme.txt
#安装docker环境(包含检查docker安装版本)
function installDocker(){
echo "开始安装docker"
install_docker_version=`docker -v `
if [ $? -eq 0 ]; then
install_docker_version=`docker -v | awk -F',' '{print $1}' | awk '{print $3}'`
echo "检查到docker已安装,安装的版本:$install_docker_version"
#docker的版本必须大于等于1.13.0
docker_min_version=1.13.0
if [ `expr $install_docker_version \>= $docker_min_version` -eq 0 ];then
echo "docker的版本必须是1.13.0或更高版本"
exit 1
fi
else
#检查liunx的内核版本是否是3.10或更高版本
liunx_kernel_version=`uname -r |awk -F'-' '{print $1}'`
echo "liunx的内核版本为:$liunx_kernel_version"
min_version=3.10.0
if [ `expr $liunx_kernel_version \>= $min_version` -eq 0 ];then
echo "安装docker时liunx的内核版本必须是3.10或更高版本"
exit 1
fi
#liunx必须是64位机器
liunx_bit=`getconf LONG_BIT`
if [ $liunx_bit -ne 64 ];then
echo "liunx机器位数为:$liunx_bit, 安装docker必须是64位机器"
exit 1
fi
echo "解压$docker_version包"
tar -xf ./package/$docker_version
echo "将docker目录移到/usr/bin目录下"
/bin/cp -f ./docker/* /usr/bin/
echo "将docker.service 移到/etc/systemd/system/ 目录"
/bin/cp -f ./package/docker.service /etc/systemd/system/
rm -rf ./docker
echo "添加文件权限"
chmod +x /etc/systemd/system/docker.service
echo "重新加载配置文件"
systemctl daemon-reload
echo "启动docker"
systemctl start docker
echo "设置开机自启"
systemctl enable docker.service
docker -v
if [ $? -eq 0 ]; then
echo "docker安装成功"
else
echo "docker安装失败"
exit 1
fi
fi
}
#安装docker-compose
function installDockerCompose(){
echo "开始安装docker-compose环境"
install_docker_compose_version=`docker-compose -v `
if [ $? -eq 0 ]; then
echo "检查到docker-compose已安装,安装的版本:$install_docker_compose_version"
else
echo "将$docker_compose_version 移到/usr/local/bin/ 目录 "
/bin/cp -f ./package/$docker_compose_version /usr/local/bin/docker-compose
echo "docker-compose添加权限"
chmod +x /usr/local/bin/docker-compose
docker-compose -v
if [ $? -eq 0 ]; then
echo "docker-compose安装成功"
else
echo "docker-compose安装失败"
exit 1
fi
fi
}
#安装mysql
function installMysql(){
#mysql的安装路径
MYSQLPATH=
echo "开始安装mysql"
#直接执行步骤3
if [ -z "$WORKPATH" ];then
read -p "mysql的安装路径[默认值:/devops/autodeploy/mysql]:" MYSQLPATH
MYSQLPATH=${MYSQLPATH:-/devops/autodeploy/mysql}
echo "mysql安装路径:$MYSQLPATH"
read -p "安装时会覆盖该路径,确认是否继续执行[y/n]:" FLAG
FLAG=${FLAG:-n}
if [ "$FLAG"x != "y"x ];then
echo "停止执行"
exit 1
fi
#拷贝mysql配置到安装路径
if [ ! -d $MYSQLPATH ];then
mkdir -p $MYSQLPATH
fi
/bin/cp -rf ./mysql/* $MYSQLPATH
#清除root密码
rootPwd=
else
MYSQLPATH=$WORKPATH/mysql
echo "mysql的安装路径:$MYSQLPATH"
fi
echo "导入mysql镜像"
docker load -i ./images/$mysql_images_name
if [ $? -eq 0 ]; then
echo "mysql镜像导入成功"
else
echo "mysql镜像导入失败"
exit 1
fi
#mysql启动参数配置
read -p "mysql对外端口[默认值:3306]:" mysqlPort
mysqlPort=${mysqlPort:-3306}
while [ -z "$rootPwd" ]
do
read -p "mysql的root密码:" rootPwd
done
#将配置写入到env文件中
rm -rf $MYSQLPATH/.env
echo MYSQL_ROOT_PASSWORD=$rootPwd >> $MYSQLPATH/.env
echo MYSQL_DATABASE=$mysqlName >> $MYSQLPATH/.env
echo MYSQL_PATH=$MYSQLPATH >> $MYSQLPATH/.env
echo MYSQL_PORT=$mysqlPort >> $MYSQLPATH/.env
path=`pwd`
cd $MYSQLPATH
#修改docker-compose的server名称,支持同一机器上可以运行多个服务
mysql_server_name=mysqlServer_$mysqlPort
sed -i "s/MYSQL_SERVER_NAME/$mysql_server_name/g" docker-compose.yml
#修改network名称
mysql_network_name=network_$mysqlPort
sed -i "s/MYSQL_NETWORK_NAME/$mysql_network_name/g" docker-compose.yml
echo "启动mysql"
docker-compose up -d
#判断启动状态
k=0
for((i=1;i<=6;i++));
do
install_mysql_status=`docker-compose ps | awk '{print $4}' | sed -n '$p' `
if [ "$install_mysql_status"x = "Up"x ]; then
#k++
k=$(( $k+1 ))
echo "mysql正在启动中..."
#连续3次成功才判断是成功
if [ $k -eq 3 ];then
echo -e "\033[32m mysql安装成功 \033[0m"
echo "********************************************"
echo "mysql配置"
echo "安装路径:$MYSQLPATH"
echo "访问端口:$mysqlPort"
echo "root的密码:$rootPwd"
echo "********************************************"
cd $path
return 0
fi
else
k=0
echo "mysql正在启动中..."
fi
sleep 5
done
echo "mysql安装失败"
cd $path
exit 1
}
mysql:docker-compose.yml
version: '3'
services:
MYSQL_SERVER_NAME:
container_name: mysqlServer_${MYSQL_PORT}
image: mysql:5.7
volumes:
# mysql数据的映射路径
- ${MYSQL_PATH}/data:/var/lib/mysql
# mysql配置
- ${MYSQL_PATH}/conf/my.cnf:/etc/my.cnf
# mysql初始化
#- ${WORKPATH}/mysql/init:/docker-entrypoint-initdb.d/
# 错误日志
#- ${WORKPATH}/mysql/log:/var/log/mysql/error.log
environment:
# 数据库实例
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
#MYSQL_USER: ${MYSQL_USER}
#MYSQL_PASS: ${MYSQL_PASS}
TZ: "Asia/Shanghai"
ports:
- "${MYSQL_PORT}:3306"
restart: always
networks:
- MYSQL_NETWORK_NAME
networks:
MYSQL_NETWORK_NAME:
driver: bridge