Docker容器操作shell脚本,[help|start|stop|restart|status|exist|remove]

Docker操作容器,比如启动、停止、重启、状态查看、是否存在、移除等操作时比较琐碎,
因此我编写了一个shell脚本来进行整合这些操作,一步到位,方便高效。
创建  容器名称-docker.sh  脚本,编辑内容如下:

#!/bin/bash

#这里可替换为要操作的容器名称
IMAGE_NAME=docker-test

#这里替换为要映射的端口
PORT=8088:8088

#这个参数为测试参数,在 start 中有传参样例,
#需对应Dockerfile里ENTRYPOINT命令中的${}变量使用
#不需要的可以注释掉,同时将下面start()方法里 docker run 中的 -e 内容删除
SERVER_ID=1
 
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh ${IMAGE_NAME}-docker.sh [help|start|stop|restart|status|exist|remove]"
    exit 1
}

#指令说明
help(){
  echo "基于指定名称的容器操作;
        start   启动
        stop    停止
        restart 重启
        status  状态
        exist   是否存在,存在返回容器ID
        remove  移除容器"
}

#根据名字检查容器是否存在
is_exist(){
  cid=`docker ps -a -f name=^/${IMAGE_NAME}$ --format "{{.ID}}"`
  #如果不存在返回1,存在返回0     
  if [ -z "${cid}" ]; then
   echo "not exist!"
   return 1
  else
    echo "${cid}"
    return 0
  fi
}

#根据名字检查容器是否运行
is_running(){
  rid=`docker ps -a -f name=^/${IMAGE_NAME}$ -f status=running --format "{{.ID}}"`
  #如果在没有运行返回1,运行返回0     
  if [ -z "${rid}" ]; then
   return 1
  else
    return 0
  fi
}
 
#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then
    is_running
    if [ $? -eq "0" ]; then
      echo "${IMAGE_NAME} is already running,cid=${rid}"
    else     
      docker start ${cid}
      echo "${IMAGE_NAME} start success,cid=${cid}"
    fi
  else
    echo "${IMAGE_NAME} is not exist! start a new container---"
    docker run -e "JAVA_OPTS=--server.id=${SERVER_ID}" -d -p ${PORT} --name ${IMAGE_NAME} ${IMAGE_NAME}
    is_running
    echo "${IMAGE_NAME} start success,cid=${rid}"
  fi
}
 
#停止方法
stop(){
  is_running
  if [ $? -eq "0" ]; then
    docker stop ${rid}
    echo "${IMAGE_NAME} is stop"
  else
    echo "${IMAGE_NAME} is not running"
  fi  
}
 
#输出运行状态
status(){
  is_running
  if [ $? -eq "0" ]; then
    echo "${IMAGE_NAME} is running. cid is ${rid}"
  else
    echo "${IMAGE_NAME} is not running"
  fi
}
 
#重启
restart(){
  is_exist
  if [ $? -eq "0" ]; then
    docker restart ${cid}
    echo "${IMAGE_NAME} restart success,cid=${cid}"
  else
    start   
  fi
}

#删除容器
remove(){
  is_exist
  if [ $? -eq "0" ]; then
    is_running
    if [ $? -eq "0" ]; then
      stop
    fi
    docker rm -f ${cid}
    echo "${IMAGE_NAME} remove success,cid=${cid}"
  else
    echo "${IMAGE_NAME} is not exist!"
  fi
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  "exist")
    is_exist
    ;;
  "remove")
    remove
    ;;
  "help")
    help
    ;;
  *)
    usage
    ;;
esac

我这里是构建了一个最简单的SpringBoot项目镜像,为了对应上面的测试参数 SERVER_ID=1

docker build 构建镜像使用的Dockerfile如下:

FROM java:8

MAINTAINER yaoll

COPY docker-test.jar /app.jar

EXPOSE 8088

ENTRYPOINT ["sh","-c","java -jar /app.jar ${JAVA_OPTS}"]

使用时可根据实际需求来进行修改!

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的自动启停Docker容器Shell脚本: ``` #!/bin/bash # 定义变量 CONTAINER_NAME="my-container" # 容器名称 IMAGE_NAME="my-image" # 镜像名称 DOCKERFILE_PATH="/path/to/Dockerfile" # Dockerfile文件路径 DOCKERFILE_DIR=$(dirname $DOCKERFILE_PATH) # Dockerfile所在目录 # 检查容器是否已经运行 if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then # 如果容器已经运行,停止并删除容器 echo "Stopping and removing container: $CONTAINER_NAME" docker stop $CONTAINER_NAME docker rm $CONTAINER_NAME fi # 检查镜像是否存在,如果不存在则构建镜像 if [ ! "$(docker images -q $IMAGE_NAME)" ]; then # 如果镜像不存在,构建镜像 echo "Building image: $IMAGE_NAME" docker build -t $IMAGE_NAME $DOCKERFILE_DIR fi # 启动容器 echo "Starting container: $CONTAINER_NAME" docker run -d --name $CONTAINER_NAME -p 80:80 $IMAGE_NAME ``` 上述脚本包含了以下几个步骤: 1. 定义变量:定义了容器名称、镜像名称、Dockerfile文件路径等变量。 2. 检查容器是否已经运行:使用`docker ps`命令检查容器是否已经运行,如果已经运行,则停止并删除容器。 3. 检查镜像是否存在:使用`docker images`命令检查镜像是否已经存在,如果不存在,则使用`docker build`命令构建镜像。 4. 启动容器:使用`docker run`命令启动容器,并将容器端口映射到主机的80端口上。 您可以将上述代码保存为一个`.sh`文件,并使用`chmod +x`命令将其设置为可执行文件,然后在命令行中执行该脚本即可自动启停Docker容器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值