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

(0)

相关推荐

  • 一句话Shell命令关闭不需要的随机启动服务

    Linux可以简单的通过一条shell命令来关闭其他不需要的开机启动服务,只保留计划任务,网络,ssh和日志,看shell命令: 复制代码 代码如下: chkconfig --list | grep 3:on | \ grep -v "crond\|network\|sshd\|syslog" | \ awk '{print "chkconfig " $1 " off"}' | sh 这条shell命令在RedHat和Centos测试可以顺利关闭

  • Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发现Uiautomator可以对resorceId.text.packageName等元素进行定位,也找到了xiaochong这位大神关于uiautomator的封装包,链接如下: https://github.com/xiaocong/uiautomator 做为一个小白,这一切都需要摸索,在克服了

  • 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 contain

  • linux下怎样用命令启动docker服务

    目录 linux用命令启动docker服务 linux环境中设置docker服务开机自启动 docker服务设置开机自启动 关闭docker服务开机自启动 总结 linux用命令启动docker服务 看截图吧,懒得说了. 1.先顺带提一个命令: # system 如果你忘了具体的system相关命令,可以这样做. 2.linux要启动docker服务,可能会需要先关闭防火墙 # systemctl stop firewalld.service 3.打开/启动 docker # systemctl

  • 详解Shell脚本控制docker容器启动顺序

    1.遇到的问题 在分布式项目部署的过程中,经常要求服务器重启之后,应用(包括数据库)能够自动恢复使用.虽然使用docker update --restart=always containerid能够让容器自动随docker启动,但是并不能保证是在数据库启动之后启动,如果数据库未启动,那么将导致应用启动失败;网上还有一种解决方法是通过docker-compose容器编排来控制启动顺序,这个博主研究的比较少. 2.解决思路 使用Shell脚本来控制,思路大致如下 探测数据库端口来检验数据库是否启动成

  • 在docker中执行linux shell命令的操作

    在docker中执行shell命令,需要在命令前增加sh -c,例如: docker run ubuntu sh -c 'cat /data/a.txt > b.txt' 否则,指令无法被正常解析. 补充:[Docker应用] docker中执行指定脚本(docker 下运行springboot应用) [Docker应用] docker中执行指定脚本 这里是执行spring boot的应用的实例: 1. 制作执行sh脚本的镜像文件(模板) Dockfile FROM vertigomedia/u

  • Android执行shell命令详解

    一.方法 复制代码 代码如下: /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"}) * @param workdirectory * 命令执行路径(例如:"system/bin/") * @return 执行结果组成的字符串 * @throws IOException */ public stati

  • 一天一个shell命令 linux好管家-进程-ps命令详解

    小知识(以ps为例): 查看命令路径  which ps 命令帮助 ps --help 命令完全手册: man ps 说明 ps全称是:Process Status (进程状态),他就是提供进程信息的. ps命令用于报告当前系统的进程状态.可以搭配kill指令随时中断.删除不必要的程序.ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的. 附知识说

  • linux下执行shell命令方法简介

    linux下执行shell命令有两种方法 在当前shell中执行shell命令 在当前shell中产生一个subshell,在subshell中执行shell命令 1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输入shell命令,命令行直接执行给出结果.比如这样: 2.在当前shell中产生一个subshell,在subshell中执行shell命令 比如我们把shell写成shell脚本的方式来运行,这个时候会先启动一个subshell来代替当前的shell,

  • python执行使用shell命令方法分享

    1. os.system(shell_command) 直接在终端输出执行结果,返回执行状态0,1 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果command有执行内容,会在标准输出显示.这实际上是使用C标准库函数system()实现的. 缺点:这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果. os.system('cat /etc/passwdqc.conf') 2. os.popen()

随机推荐