容器初始化前加一个容器是否已存在的检查, 如果存在则直接启动容器, 否则新建一个容器并启动

这里以tomcat容器为例

容器初始化

如果是第一次创建tomcat容器时, 直接执行以下脚本即可:docker_init_tomcat8.sh

#!/bin/bash

# tomcat8 容器初始化
docker run --name tomcat8 -d \
	-v /data/tomcat8/webapps:/usr/local/tomcat/webapps \
	-v /data/tomcat8/logs:/usr/local/tomcat/logs \
	-v /etc/localtime:/etc/localtime:ro \
	-e TZ="Asia/Shanghai" \
	-p 9005:8080 tomcat:8.0

检查容器是否存在

如果容器已经存在, 再次执行初始化脚本则会失败, 所以可以加一个检查的脚本:docker_container_isrunning_check.sh

#!/bin/bash
# 检查容器是否已经存在, 如果已经存在则不需要再创建了. 如果是停止状态的则重新启动一下
# $NAME 为容器名称

IS_EXISTS=$(docker ps -a | grep $NAME | wc -l)
if [[ $IS_EXISTS == 1 ]]; then
    echo "container $NAME is exists..."

    # 检查是否正在运行
    IS_RUNNING=$(docker ps | grep $NAME | wc -l)
    if [[ $IS_RUNNING == 1 ]]; then
        echo "container $NAME is running... do nothing..."
    fi

    # 检查是否已经停止运行
    IS_EXITED=$(docker ps -a | grep $NAME | grep 'Exited' | wc -l)
    if [[ $IS_EXITED == 1 ]]; then
        echo "container $NAME is exited... prepare start..."
	docker container start $NAME
    fi

    exit 0
fi

最后如果容器已经存在, 直接退出; 后面的脚本就不会执行了

嵌入初始化脚本

在初始化脚本中, 把容器名称做成变量NAME, 然后载入检查的脚本即可

#!/bin/bash

NAME=tomcat8

# 检查容器是否已经运行
. docker_container_isrunning_check.sh

# tomcat8 容器初始化
docker run --name $NAME -d \
	-v /data/tomcat8/webapps:/usr/local/tomcat/webapps \
	-v /data/tomcat8/logs:/usr/local/tomcat/logs \
	-v /etc/localtime:/etc/localtime:ro \
	-e TZ="Asia/Shanghai" \
	-p 9005:8080 tomcat:8.0

其他的容器初始化脚本也可以这么直接嵌入即可


参考:



blog comments powered by Disqus

Published

05 March 2018

Tags