-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun.sh
executable file
·108 lines (91 loc) · 2.95 KB
/
run.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env bash
CURRENT_DIR=$(dirname $(readlink -f $0))
function print_usage {
MESSAGE=$1
echo -e "\033[1;37mUseage\033[0m: ./run.sh command [command_argument, ...]"
echo $MESSAGE
}
function print_available_commands {
echo -e "\033[1;37mAvailable commands:\033[0m"
echo -e "\033[0;32mbash [service_name]\033[0m: launch bash in some service container as root"
echo -e "\033[0;32mphp\033[0m: launch php bash as www-user in container"
echo -e "\033[0;32mmysql\033[0m: launch mysql in container"
echo -e "\033[0;32mAny commands not in list above goes directly to docker-compose, so be free to use this tool as docker-compose\033[0m"
echo ""
}
# drop containers
function drop_container {
COMPOSE_PROJECT_NAME=$1
# ask for confirm
while true; do
read -p "Do you really want to drop containers? (y/n): " yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
done
docker ps -a -f NAME=${COMPOSE_PROJECT_NAME} --format "{{.Names}}" | xargs -I{} docker rm {}
}
# stop containers
function stop_container {
docker ps -a -f NAME=${COMPOSE_PROJECT_NAME} --format "{{.Names}}" | xargs -I{} docker stop {}
}
function compose {
DOCKER_COMPOSE_COMMAND="docker-compose --project-name ${COMPOSE_PROJECT_NAME} --project-directory ${CURRENT_DIR}"
if [[ ! -z $PHP_IMAGE ]];
then
DOCKER_COMPOSE_COMMAND="${DOCKER_COMPOSE_COMMAND} -f ${CURRENT_DIR}/compose/php/compose.yaml"
fi
if [[ ! -z $MONGODB_IMAGE ]];
then
DOCKER_COMPOSE_COMMAND="${DOCKER_COMPOSE_COMMAND} -f ${CURRENT_DIR}/compose/mongodb/compose.yaml"
fi
# append up params
DOCKER_COMPOSE_COMMAND="${DOCKER_COMPOSE_COMMAND} ${@}"
# show command
echo -e "\033[1;37mCommand\033[0m: ${DOCKER_COMPOSE_COMMAND}"
# start up
bash -c "${DOCKER_COMPOSE_COMMAND}"
}
function exec_container_command_root {
COMPOSE_PROJECT_NAME=$1
SERVICE_NAME=$2
SHELL_COMMAND=$3
docker exec -it ${COMPOSE_PROJECT_NAME}_${SERVICE_NAME} ${SHELL_COMMAND}
}
function exec_container_command_user {
COMPOSE_PROJECT_NAME=$1
SERVICE_NAME=$2
SHELL_COMMAND=$3
USER_NAME=$4
docker exec --user ${USER_NAME} -it ${COMPOSE_PROJECT_NAME}_${SERVICE_NAME} $SHELL_COMMAND
}
# read command cli arguments
COMMAND_NAME=$1
if [[ -z $COMMAND_NAME ]];
then
print_available_commands
exit
fi
# import environment
set -o allexport
source ${CURRENT_DIR}/.env
set +o allexport
# dispatch command
case $COMMAND_NAME in
bash)
SERVICE_NAME=$2
exec_container_command_root ${COMPOSE_PROJECT_NAME} $SERVICE_NAME bash
;;
php)
exec_container_command_user ${COMPOSE_PROJECT_NAME} php bash www-data
;;
mysql)
exec_container_command_root ${COMPOSE_PROJECT_NAME} mysql "mysql ${COMPOSE_PROJECT_NAME}"
;;
*)
# fallback to docker-container
compose ${@:1}
;;
esac