Docker實踐,Shell指令碼自動根據映象名和埠,啟動docker容器,執行springcloud專案
Shell指令碼自動啟動docker容器
背景
在Docker實踐,部署SpringCloud微服務中,是部署SpringCloud專案的流程,微服務構架原因要經常執行4、5個相同映象的容器來作為叢集,達到微服務高可用。
Shell指令碼編寫
感覺啟動的命令過於複雜,於是編寫了個Shell指令碼來執行映象,以下是原始碼:
#/bin/bash 根據映象名和埠,用docker啟動容器,執行springcloud專案
#映象名
IMAGE_NAME=$1
#服務埠號
SERVER_PORT=$2
#Eureka例項的ip
IP=$3
while true
do
if [ ! -n "${IMAGE_NAME}" ];then
echo "請輸入映象名:"
read IMAGE_NAME
fi
IMAGE=`echo "${IMAGE_NAME}" | awk -F: '{print $1}'`
TAG=`echo "${IMAGE_NAME}" | awk -F: '{print $2}'`
if [ ! -n "${TAG}" ];then
TAG="latest"
fi
IMAGE_NAME=`echo "${IMAGE}:${TAG}"`
# echo "1: ${IMAGE_NAME}"
EXIT_IMAGE=`docker image ls | awk '{print $1":"$2}' | grep ${IMAGE_NAME}`
# echo "2: ${EXIT_IMAGE}"
EXIT_IMAGE_ARR=($EXIT_IMAGE)
flag=0;
for s in ${EXIT_IMAGE_ARR[@]}
do
# echo "3: $s"
if [ "$s" == "$IMAGE_NAME" ];then
flag=1
fi
done
# echo "4:$flag"
if (($flag==0));then
echo "映象名不存在,請重新輸入:"
read IMAGE_NAME
else
break
fi
done
#判斷埠號是否已被佔用
while true
do
if [ ! -n "${SERVER_PORT}" ];then
echo "請輸入埠號:"
read SERVER_PORT
fi
port_num=`netstat -tunlp | grep ${SERVER_PORT} | wc -l`
if [ $port_num -gt 0 ];then
netstat -tunlp | grep ${SERVER_PORT}
echo "埠${SERVER_PORT}已被佔用,請重新輸入埠:"
read SERVER_PORT
else
break
fi
done
TIMESTAMP=`date +%s`
#生成的容器名
CONTAINER_NAME="${IMAGE}-${SERVER_PORT}"
#判斷容器是否已存在,存在則刪除 docker ps | grep hzsh-eureka-service2-1562035224 | awk '{print $1}'
CID=`docker ps -a| grep ${CONTAINER_NAME} | awk '{print $1}'`
if [ ! -z ${CID} ]; then
docker rm -f ${CID}
fi
#是否傳入ip地址,若無則取宿主機的外網ip 暫時未實現 /sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
if [ ! -n "$3" ] ; then
IP=`ifconfig | grep inet | grep -v inet6 | awk '{print $2}' | grep 10.152`
fi
#執行 docker run命令 建立並啟動容器
CID=`docker run -d --expose=${SERVER_PORT} -p ${SERVER_PORT}:${SERVER_PORT} -e "SERVER_PORT=${SERVER_PORT}" -e "EUREKA_INSTANCE_IP_ADDRESS=${IP}" --name ${CONTAINER_NAME} ${IMAGE_NAME}`
#輸出容器名
echo "${CONTAINER_NAME}"
待完善
以上還有許多不足,後續有時間會繼續完善。
相關學習
JAVA資深架構師成長路線->分散式擴充套件到微服務架構>Docker
相關文章
- 如何在Docker容器啟動時自動執行指令碼Docker指令碼
- Shell指令碼控制docker容器啟動順序指令碼Docker
- Docker 如何動態修改容器埠對映Docker
- Docker容器的自啟動Docker
- Docker重啟保持容器自動啟動Docker
- 實現指令碼自動部署docker指令碼Docker
- 如何修改Docker容器埠對映?Docker
- 修改 Docker 容器對映的埠Docker
- 修改docker容器的埠對映Docker
- Docker(33)- 如何修改 docker 容器的埠對映Docker
- 【Docker】Docker基礎-埠對映與容器互聯Docker
- WSL docker打通容器間通訊和追加埠對映Docker
- Docker容器內部埠對映到外部宿主機埠Docker
- Docker實戰之執行專案Docker
- docker容器操作指令碼Docker指令碼
- 編寫shell指令碼讓springboot專案在CentOS中開機自啟動指令碼Spring BootCentOS
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- Docker(十七)-修改Docker容器啟動配置引數Docker
- 根據工程實踐專案進行需求分析和概念原型建模原型
- Docker自動補全容器名Docker
- docker中怎麼啟動容器Docker
- Docker容器的自動化監控實現Docker
- Linux(CentOS)啟動時自動執行指令碼(rc.local)LinuxCentOS指令碼
- shell 備份檔案指令碼+自動清理指令碼
- Docker-埠對映Docker
- 如何修改正在執行的docker映象的埠對映?Docker
- 自動化整合:Pipeline整合Docker容器Docker
- 開機自動執行python指令碼Python指令碼
- 使用 docker-sync 解決 docker for Mac 啟動的虛擬容器程式執行緩慢的問題DockerMac
- 執行shell指令碼指令碼
- 使用docker執行CentOS容器DockerCentOS
- 前端專案nodejs自動部署指令碼前端NodeJS指令碼
- 專案啟動指令碼的編寫指令碼
- Docker容器內部埠對映到外部宿主機埠的方法小結Docker
- Docker Image 的釋出和 Container 埠對映DockerAI
- Linux配置開機自啟動執行指令碼方法有哪些?Linux指令碼
- webstorm根據.eslintrc檔案自動修復WebORMEsLint
- Docker容器無法啟動,裡面的配置檔案如何修改Docker