Docker 镜像自动化部署
适合单机运行的容器
sh docker-deploy up app_name
#!/bin/bash
## 第一个参数: up|start|stop|restart|rm
COMMAND=$1
## APP 名称
APP_NAME=$2
echo $APP_NAME
## 如果没有给 app 名称, 则退出
if [ -z $APP_NAME ];then
echo "Must input app name..... FAILD"
exit 1
fi
## 暴露的端口
EXPOSE_PORT=8888
## 项目/组织
NAMESPACE=mynamespace
## 版本号
TAG=1.0.0
## 仓库地址,用户名
REGISTRY_SERVER=192.168.1.1:5000
USERNAME=username
PASSWORD=password
## 镜像名称
IMAGE_NAME="$REGISTRY_SERVER/$NAMESPACE/$APP_NAME:$TAG"
## 使用说明,用来提示输入参数
function usage() {
echo "Usage: sh docker-deploy.sh [up|start|stop|restart|rm]"
exit 1
}
## 登录仓库
function login() {
echo "docker login -u $USERNAME --password-stdin $REGISTRY_SERVER"
echo "$PASSWORD" | docker login -u $USERNAME --password-stdin $REGISTRY_SERVER
}
## 启动容器
function start() {
# 检查容器是否存在
CONTAINER_NAME=$(docker ps |grep "$APP_NAME" | awk '{print $NF}')
# 存在就不启动
if [ -n "$CONTAINER_NAME" ];then
echo "container $CONTAINER_NAME aready started..."
exit
fi
# 镜像如果不存在需要先登录
IMAGE=$(docker images |grep $APP_NAME |awk '{print $3}')
if [ -z "$IMAGE" ];then
login
fi
#容器不存在旧启动
echo "starting container $APP_NAME..."
docker run -d --restart=always --name $APP_NAME -p $EXPOSE_PORT:8080 $IMAGE_NAME
echo "container $APP_NAME started..."
}
## 停止容器
function stop() {
# 检查容器是否存在
CONTAINER_NAME=$(docker ps |grep "$APP_NAME" | awk '{print $NF}')
# 不存在就不需要停止
if [ -z "$CONTAINER_NAME" ];then
echo "container $CONTAINER_NAME not running..."
exit
fi
# 存在就停止容器
echo "stoping container $APP_NAME"
docker stop $CONTAINER_NAME
echo "container $APP_NAME stoped..."
}
## 重启容器
function restart() {
# 先停止
stop
# 再启动
start
}
## 删除容器、镜像
function rm() {
# 获取容器名称
CONTAINER_NAME=$(docker ps |grep "$APP_NAME" | awk '{print $NF}')
if [ -n "$CONTAINER_NAME" ];then
# 停止容器
stop
# 删除容器
echo "removing container $APP_NAME..."..
docker rm $CONTAINER_NAME
echo "container $APP_NAME removed..."
fi
# 获取镜像 id
IMAGE=$(docker images |grep "$APP_NAME" | awk '{print $3}')
if [ -n "$CONTAINER_NAME" ];then
# 删除镜像
echo "removing image $IMAGE..."..
docker rmi $IMAGE
echo "image $IMAGE removed..."
fi
}
# 重启拉取镜像并启动容器
function up() {
# 删除旧的镜像和容器
rm
# 拉取新的镜像并启动容器
start
}
# 根据输入参数,选择执行对于方法,不如则执行使用说明
case "$COMMAND" in
"up")
up
;;
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
"rm")
rm
;;
*)
usage
;;
esac
Last updated