Shell 命令启动Docker Container的实现

 更新时间:2022年02月25日 11:14:14   作者:vio_dzyls  
本文主要介绍了Shell 命令启动Docker Container的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • jar包重启shell脚本问题记录

    jar包重启shell脚本问题记录

    工作中经常需要重启jar包,这里写一个restart.sh文件,记录一下,对shell脚本重启jar包知识感兴趣的朋友一起看看吧
    2024-02-02
  • 一个简单的linux命令 pwd

    一个简单的linux命令 pwd

    这篇文章主要介绍了一个简单的linux命令pwd,pwd命令用于查看当前工作目录的完整路径,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Shell脚本注释写法

    Shell脚本注释写法

    这篇文章主要介绍了Shell脚本注释的3种写法,包含单行注释的方法和多行注释的多种方法,需要的朋友可以参考下
    2014-07-07
  • linux重启和关闭系统命令的写法

    linux重启和关闭系统命令的写法

    这篇文章给大家介绍了linux重启和关闭系统命令的写法,然后在文中给大家分享了linux五个重启命令,感兴趣的朋友一起看看吧
    2017-10-10
  • 详解Linux中的wget命令

    详解Linux中的wget命令

    Linux系统中的wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。下面通过本文给大家介绍Linux中的wget命令,一起看看吧
    2017-09-09
  • shell 脚本自动搭建nfs服务的方法示例

    shell 脚本自动搭建nfs服务的方法示例

    这篇文章主要介绍了shell 脚本自动搭建nfs服务的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • ubuntu使用root用户登录/切换root权限的实现

    ubuntu使用root用户登录/切换root权限的实现

    下面小编就为大家带来一篇ubuntu使用root用户登录/切换root权限的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • linux shell字符串截取的详细总结(实用!)

    linux shell字符串截取的详细总结(实用!)

    在开发的时候经常会自行写一些小的脚本,其中就用到截取字符串的操作,这篇文章主要给大家介绍了关于linux shell字符串截取的详细方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • shell脚本实现磁盘监控系统

    shell脚本实现磁盘监控系统

    这篇文章主要介绍了shell脚本实现磁盘监控系统,帮助大家更好的利用shell脚本管理数据,感兴趣的朋友可以了解下
    2020-09-09
  • Ubuntu、Linux Mint一键安装Chrome浏览器的Shell脚本分享

    Ubuntu、Linux Mint一键安装Chrome浏览器的Shell脚本分享

    这篇文章主要介绍了Ubuntu、Linux Mint一键安装Chrome浏览器的Shell脚本分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-03-03

最新评论