Shell命令启动DockerContainer的实现

Shell命令启动DockerContainer的实现

Linux虚拟机重启后,都要手动启动多个Docker Container,着实麻烦,使用Shell命令可以减去这个麻烦。

创建文件,添加可执行权限

touch startcontiner.sh chomd +x startcontainer.sh

编写startcontainer.sh

#!/bin/sh                           #chkconfig: 35 90 80                #description: start docker container containerNames="mysql redis rabbitmq mongo zookeeper" # 根据名称启动Docker Contianers function startContainer(){     sudo docker start $1 } # 遍历containerNames for containerName in ${containerNames} do         echo "Container ${containerName} start"         startContainer ${containerName} done

启动并测试

./startcontainer.sh PS:docker 批量启动项目 shell 脚本

Dockerfile

FROM java:8  VOLUME /tmp  COPY blockchain-core-0.1.jar /project/app.jar CMD java -jar /project/app.jar 

文件目录

docker/ ├── logs │   └── logs │       ├── block-chain-core │       │   ├── 2018-11-23 │       │   │   ├── access.0.log │       │   │   ├── debug.0.log │       │   │   ├── detail.0.log │       │   │   ├── error.0.log │       │   │   ├── execute.0.log │       │   │   └── info.0.log │       │   └── 2018-11-26 │       │       ├── access.0.log │       │       ├── debug.0.log │       │       ├── detail.0.log │       │       ├── error.0.log │       │       ├── execute.0.log │       │       └── info.0.log │       └── gateway-zuul │           ├── 2018-11-23 │           │   ├── access.0.log │           │   ├── debug.0.log │           │   ├── detail.0.log │           │   ├── error.0.log │           │   ├── execute.0.log │           │   └── info.0.log │           └── 2018-11-26 │               ├── access.0.log │               ├── debug.0.log │               ├── detail.0.log │               ├── error.0.log │               ├── execute.0.log │               └── info.0.log ├── projects │   ├── blockchain-core │   │   ├── app.jar │   │   ├── blockchain-core-0.1.jar │   │   └── Dockerfile │   ├── eureka-server │   │   ├── Dockerfile │   │   └── eureka-server-1.0.jar │   └── gateway-zuul │       ├── app.jar │       ├── Dockerfile │       └── gateway-zuul-0.0.1.jar ├── run

脚本

#!/bin/bash #serverList=("eureka-server" "gateway-zuul" "blockchain-core" "blockchain-order"); #------------配置 start------------- # 项目目录 projectsDir="/opt/docker/projects" # 日志输出目录 logsDir="/opt/docker/logs" #------------配置 end------------- serverList=`ls ${projectsDir}`; commond=$1; serverName=$2; port=$3; # 启动服务方法 第一个参数为 服务名,第二个参数为 端口 function startServer(){     echo "--------------启动项目开始:$1  $2"     serverCount=`docker ps -f status=exited | grep $1 |wc -l`;         # 判断是否已经启动过,且端口为默认端口         if [[ ${serverCount} > 0 && $2 == "" ]];then                 echo "docker start 启动项目:$1"                 docker start $1         else                  # 判断是否生成了镜像                 imageCount=`docker images | grep $1 | wc -l`;                 if [[ ${imageCount} > 0 ]];then                     echo "docker run 启动项目: $1"                     # 复制项目jar包为 app.jar                     currProjectDir=$projectsDir/$1                     cd $currProjectDir                     cp `ls | grep $1` "app.jar"                     # 执行命令                     if [[ $2 == "" ]];then                         echo "docker run  -d -v ${logsDir}:/opt -v $currProjectDir:/project  --name $1 $1 "                         docker run  -d -v ${logsDir}:/opt -v $currProjectDir:/project  --name $1 $1                         else                            echo "docker run  -d -p $2:$2 -v ${logsDir}:/opt -v ${currProjectDir}:/project --name $1_$2 $1 java -jar /project/app.jar --server.port=$2"                            docker run  -d -p $2:$2 -v ${logsDir}:/opt -v ${currProjectDir}:/project --name $1_$2 $1 java -jar /project/app.jar --server.port=$2                        fi                  else                      echo "生成 $1 项目镜像:$1"                          cd "${projectsDir}/$1"                      docker build -t $1 .                      # 再次调用该方法                      startServer $1 $2                 fi         fi } # 根据项目名获取端口号 参数为项目名 function getPort(){     tempProjectDirName=`ls $projectsDir | grep $1`     OLD_IFS="$IFS";         IFS="_"         arr=($tempProjectDirName)         IFS="$OLD_IFS"         echo ${arr[1]}     return ${arr[1]} } if  [[ ${commond} == "-help" ]];then      echo " "     echo "参数1:执行命令"     echo "        1. start    启动"     echo "        2. stop        停止"     echo "        3. restart    重启"     echo "参数2:服务名"     echo "        1.eureka-server        服务注册中心"     echo "        2.gateway-zuul        网关服"     echo "        3.blockchain-core    系统服务服"     echo "        4.blockchain-order    订单服"     echo "        5.all            全部"     exit; elif [[ ${commond} == "" || ${serverName} == "" ]];then      echo "错误:请传入启动参数!详情:-help"         exit;  fi # 单个项目操作 if [[ ${serverName} != "all" && ${commond} == "start" ]];then     startServer ${serverName} ${port} elif [[   ${serverName} != "all" && ${commond} != "start" ]];then     echo "开始${commond}容器中的项目:${serverName}"     docker ${commond} `docker ps | grep ${serverName} | awk -F"        " '{print $1 }'` fi # 全部项目操作 # IFS=";\n" if [[ ${serverName} == "all" && ${commond} == "start"  ]];then     for server in ${serverList[@]}     do         startServer ${server}      done elif [[ ${serverName} == "all" && ${commond} != "start" ]]; then     for server in ${serverList[@]}     do         echo "开始 ${commond} 容器中的项目:${server}"         docker ${commond} `docker ps | grep ${serverName} | awk -F"        " '{print $1 }'`     done fi echo "执行完毕!"

到此这篇关于Shell 命令启动Docker Container的实现的文章就介绍到这了,更多相关Shell启动Docker Container内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读