溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用Shell命令啟動(dòng)Docker?Container

發(fā)布時(shí)間:2022-02-25 13:57:21 來源:億速云 閱讀:384 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“怎么用Shell命令啟動(dòng)Docker Container”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“怎么用Shell命令啟動(dòng)Docker Container”文章能幫助大家解決問題。

Linux虛擬機(jī)重啟后,都要手動(dòng)啟動(dòng)多個(gè)Docker Container,著實(shí)麻煩,使用Shell命令可以減去這個(gè)麻煩。

創(chuàng)建文件,添加可執(zhí)行權(quán)限

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"
# 根據(jù)名稱啟動(dòng)Docker Contianers
function startContainer(){
    sudo docker start $1
}
# 遍歷containerNames
for containerName in ${containerNames}
do
        echo "Container ${containerName} start"
        startContainer ${containerName}
done

啟動(dòng)并測(cè)試

./startcontainer.sh

PS:docker 批量啟動(dòng)項(xiàng)目 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-------------
# 項(xiàng)目目錄
projectsDir="/opt/docker/projects"
# 日志輸出目錄
logsDir="/opt/docker/logs"
#------------配置 end-------------

serverList=`ls ${projectsDir}`;
commond=$1;
serverName=$2;
port=$3;

# 啟動(dòng)服務(wù)方法 第一個(gè)參數(shù)為 服務(wù)名,第二個(gè)參數(shù)為 端口
function startServer(){
    echo "--------------啟動(dòng)項(xiàng)目開始:$1  $2"
    serverCount=`docker ps -f status=exited | grep $1 |wc -l`;
        # 判斷是否已經(jīng)啟動(dòng)過,且端口為默認(rèn)端口
        if [[ ${serverCount} > 0 && $2 == "" ]];then
                echo "docker start 啟動(dòng)項(xiàng)目:$1"
                docker start $1
        else 
                # 判斷是否生成了鏡像
                imageCount=`docker images | grep $1 | wc -l`;

                if [[ ${imageCount} > 0 ]];then
                    echo "docker run 啟動(dòng)項(xiàng)目: $1"
                    # 復(fù)制項(xiàng)目jar包為 app.jar
                    currProjectDir=$projectsDir/$1
                    cd $currProjectDir
                    cp `ls | grep $1` "app.jar"
                    # 執(zhí)行命令
                    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 項(xiàng)目鏡像:$1"
                     
                         cd "${projectsDir}/$1"
                     
                     docker build -t $1 .

                     # 再次調(diào)用該方法
                     startServer $1 $2
                fi
        fi
}

# 根據(jù)項(xiàng)目名獲取端口號(hào) 參數(shù)為項(xiàng)目名
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 "參數(shù)1:執(zhí)行命令"
    echo "        1. start    啟動(dòng)"
    echo "        2. stop        停止"
    echo "        3. restart    重啟"
    echo "參數(shù)2:服務(wù)名"
    echo "        1.eureka-server        服務(wù)注冊(cè)中心"
    echo "        2.gateway-zuul        網(wǎng)關(guān)服"
    echo "        3.blockchain-core    系統(tǒng)服務(wù)服"
    echo "        4.blockchain-order    訂單服"
    echo "        5.all            全部"
    exit;
elif [[ ${commond} == "" || ${serverName} == "" ]];then 
    echo "錯(cuò)誤:請(qǐng)傳入啟動(dòng)參數(shù)!詳情:-help"
        exit; 
fi

# 單個(gè)項(xiàng)目操作
if [[ ${serverName} != "all" && ${commond} == "start" ]];then
    
    startServer ${serverName} ${port}
    
elif [[   ${serverName} != "all" && ${commond} != "start" ]];then
    echo "開始${commond}容器中的項(xiàng)目:${serverName}"
    docker ${commond} `docker ps | grep ${serverName} | awk -F"        " '{print $1 }'`
fi

# 全部項(xiàng)目操作
# 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} 容器中的項(xiàng)目:${server}"
        docker ${commond} `docker ps | grep ${serverName} | awk -F"        " '{print $1 }'`
    
    done
fi

echo "執(zhí)行完畢!"

關(guān)于“怎么用Shell命令啟動(dòng)Docker Container”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI