Created
July 11, 2019 22:01
-
-
Save Allianzcortex/229b269a5c608e1dd7a6285579a19197 to your computer and use it in GitHub Desktop.
docker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# This is the script for the Linux assingment2 | |
# Team Members(Sorted by Alphabet order of First Name) | |
# Haozhou Wang A00431268 | |
# Naisi Zhen A00431605 | |
# Rishi Karki A00432524 | |
# 1,2,3,6 are exit signals | |
trap clean_docker 1 2 3 6 | |
show_progress() | |
{ | |
echo "This is task $1 *****************" | |
sleep 2 | |
} | |
user="h_wang" | |
# 1 & 2 remove the folder if it already exists | |
show_progress 1and2 | |
if [ -d "out" ]; then rm -Rf out; fi | |
mkdir out && cd out | |
# 3 get the target file | |
show_progress 3 | |
wget lnx.cs.smu.ca/docker/Dockerfile | |
wget lnx.cs.smu.ca/docker/app.py | |
# 4 get the target string based on date | |
show_progress 4 | |
current_day=$(date '+%d') | |
if (( $current_day % 2 == 0 )) | |
then | |
new_text='Today is an even day' | |
else | |
new_text='Today is an odd day' | |
fi | |
echo "The text get is : $new_text" | |
# replace | |
sed -i "s/Hello World!/$new_text/g" app.py | |
# 5 & 6 | |
show_progress 5and6 | |
docker_image="$user"_a2 | |
# get available port;max port in Linux is 65535 | |
for (( c=2000;c<=65535; c++ )) | |
do | |
resp=`netstat -tunl | grep ":$c "` | |
if [ -z "$resp" ]; then | |
echo "$c port is available" | |
available_port=$c | |
break | |
# TODO add prompt for checking unavailable port | |
else | |
echo "$c port is already used" | |
fi | |
done | |
# build docker image | |
docker build -t $docker_image . | |
docker run -d -p $available_port:80 $docker_image | |
# 7 | |
show_progress 7 | |
FS=' ' read -r -a array <<< "$(docker ps | grep $docker_image)" | |
container_id=${array[0]} | |
container_ip_address=$(docker inspect $container_id | grep "\"IPAddress\"" | head -1 | sed 's/,//g' | cut -d":" -f2 ) | |
echo "\"Container\'s IP is $container_ip_address" | |
# very important,or docker image may not be built | |
sleep 5 | |
# define variables and utils functions used | |
available_url="lnx.cs.smu.ca:"$available_port | |
clean_docker() | |
{ | |
docker stop $container_id | |
docker rm $container_id | |
docker rmi $docker_image | |
} | |
# 8 check https://www.shellhacks.com/check-website-availability-linux-command-line/ for more details | |
# 200 is the HTTP status code that represents the function-well page | |
show_progress 8 | |
if [[ $(curl -Is $available_url| head -n 1 | grep 200) ]];then | |
echo "web page works correctly" | |
else | |
echo "web page doesn't work correctly , will remove the docker container and clean it" | |
# exit and clean | |
clean_docker | |
exit 1 | |
fi | |
# 9 save webpage | |
show_progress 9 | |
echo "available url is : " | |
echo $available_url | |
wget $available_url -O serv.html | |
# 10 | |
# ssh -fnNT -R 12346:localhost:2014 [email protected] "echo \"aaaaa\" >> aa.html && nc localhost 12346 < aa.html" | |
# Then run on remote server : echo "aaaaa" >> aa.html && nc localhost 12346 < aa.html | |
# run on local server : nc -l 2014 | |
ssh -R $available_port:localhost:$available_port $user@dev.cs.smu.ca "wget -t 1 smu.ca localhost:$available_port" | |
# 11 clean the docker | |
show_progress 11 | |
clean_docker | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment