##########################################
#Name: setup.sh
#Desc: setup docker app service
#Author OracleGao
#Email: oraclegao@126.com
#Date 2019-11-26
#Git: https://gitee.com/oraclegao/docker
#Origin: https://gitee.com/oraclegao/docker/blob/master/setup.sh
##########################################
#!/usr/bin/env bash
current_path=$(pwd)
docker_repo_path=$(dirname $0)
if [ "${docker_repo_path}" == "." ]; then
docker_repo_path=${current_path}
fi
git_clone_url=https://gitee.com/oraclegao/docker.git
git_clone_branch=master
git_clone_flag=0
## 获取docker source code
if [ ! -f ${docker_repo_path}/.git/config ]; then
git_clone_flag=1
else
url=$(cat ${docker_repo_path}/.git/config | grep "oraclegao/docker.git" | awk -F '= ' '{print $2}')
if [ "${url}" != "${git_clone_url}" ]; then
git_clone_flag=1
fi
fi
if [ "${git_clone_flag}" == "1" ]; then
docker_repo_path=/tmp/docker-$(date "+%Y%m%d%H%M%S")-$(whoami)
git clone ${git_clone_url} -b ${git_clone_branch} ${docker_repo_path}
fi
function cleanup() {
if [ "${git_clone_flag}" == "1" ]; then
rm -rf ${docker_repo_path}
fi
}
## 打印指令帮助
function usage_services() {
echo "SERVICES:"
for item in $(ls ${docker_repo_path}/services); do
printf " %-26s %s service\n" ${item}, ${item}
done
}
setup_path_default=$(echo ~)/docker-services
function usage() {
echo "setup docker services."
echo
echo "Usage:"
echo " $0 [OPTIONS] "
echo " $0 -h | --help"
echo ""
echo "OPTIONS:"
echo " -a, --assembly assemble services"
echo " -h, --help display this help and exit"
echo " -p, --path setup path, (default: ${setup_path_default})"
echo ""
usage_services
cleanup
exit 1
}
assembly_flag=0
setup_path=${setup_path_default}
services=()
for arg in "$@"; do
case $1 in
-a|--assembly)
assembly_flag=1
shift
;;
-h|--help)
usage
;;
-p|--path)
setup_path=$2
shift
shift
;;
*)
services+=("$1")
shift
;;
esac
done
if [ "${setup_path}" == "" ]; then
echo "ERROR:"
echo " -p or --path parameter empty"
echo ""
cleanup
exit 2
fi
if [ "${services}" == "" ];then
echo "ERROR:"
echo "services not found"
echo ""
usage
fi
for service in ${services[@]}; do
flag=0
for item in $(ls ${docker_repo_path}/services); do
if [ "${service}" == "${item}" ]; then
flag=1
break
fi
done
if [ "${flag}" == "0" ]; then
echo "ERROR:"
echo " invalid service [${service}]"
echo ""
usage_services
cleanup
exit 3
fi
done
mkdir -p ${setup_path}
cd ${setup_path}
setup_path=$(pwd)
file=${setup_path}/docker-compose.yml
if [ "${assembly_flag}" == "1" ]; then
if [ -f ${file} ]; then
exist_services=$(docker-compose config --service)
flag=$?
if [ "${flag}" != "0" ]; then
echo "ERROR:"
echo " invalid docker compose yml file [${file}]"
echo ""
cleanup
exit 4
fi
for service in ${services[@]}; do
for exist_service in ${exist_services}; do
if [ "${service}" == "${exist_service}" ]; then
echo "ERROR:"
echo " service [${service}] exists in docker compose yml file [${file}]"
echo ""
cleanup
exit 5
fi
done
done
else
echo "version: '3.2'" >> ${file}
echo "" >> ${file}
echo "services:" >> ${file}
cp ${docker_repo_path}/lib/assembly/* ${setup_path}/.
fi
for service in ${services[@]}; do
#find ./services/mysql/* -maxdepth 0 ! -name "docker-compose.yml" ! -name ".gitignore" ! -name "*.md"
if [ -e ${docker_repo_path}/services/${service}/conf ]; then
cp -r ${docker_repo_path}/services/${service}/conf ${setup_path}/.
fi
grep '^ ' ${docker_repo_path}/services/${service}/docker-compose.yml >> ${file}
echo "" >> ${file}
done
else
if [ -e ${file} ]; then
echo "ERROR:"
echo " docker compose yml file [${file}] exists in setup path [${setup_path}]"
echo " you can append docker service with [-a] parameter"
echo ""
echo "Usage:"
if [ "$0" == "bash" ]; then
echo " curl -L gitee.com/oraclegao/docker/raw/master/setup.sh | bash -s ${services[@]}-p ${setup_path} -a"
else
echo " $0 -a -p ${setup_path} ${services[@]}"
fi
echo ""
cleanup
exit 6
fi
for service in ${services[@]}; do
cp -a ${docker_repo_path}/services/${service} .
cp -a ${docker_repo_path}/lib/alone/* ./${service}/.
done
fi
cleanup
echo "setup [${services[@]}] in [${setup_path}] success"
一键复制
编辑
Web IDE
原始数据
按行查看
历史