linux-tutorial/codes/linux/lib/docker.sh
2020-02-12 22:46:17 +08:00

88 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# ------------------------------------------------------------------------------
# 构建 Docker 镜像 脚本
# @author Zhang Peng
# @since 2020/1/14
# ------------------------------------------------------------------------------
# 装载其它库
LINUX_SCRIPTS_LIB_DIR=`dirname ${BASH_SOURCE[0]}`
source ${LINUX_SCRIPTS_LIB_DIR}/utils.sh
dockerBuild() {
if [[ ! $1 ]] || [[ ! $2 ]] || [[ ! $3 ]]; then
logError "you must input following params in order:"
echo -e "${C_B_RED}"
echo " (1) source"
echo " (2) repository"
echo " (3) tag"
echo -e "\nEg. dockerBuild /home/workspace dunwu/dockerApp 0.0.1"
echo -e "${C_RESET}"
return ${FAILED}
fi
local source=$1
local repository=$2
local tag=$3
dockerCheck ${source}
if [[ "${SUCCEED}" != "$?" ]]; then
return ${FAILED}
fi
cd ${source}
callAndLog docker build -t ${repository}:${tag} .
if [[ "${SUCCEED}" != "$?" ]]; then
logError "docker build -t ${repository}:${tag} failed"
return ${FAILED}
fi
cd -
}
dockerPush() {
if [[ ! $1 ]] || [[ ! $2 ]]; then
logError "you must input following params in order:"
echo -e "${C_B_RED}"
echo " (1) repository"
echo " (2) tag"
echo -e "\nEg. dockerBuild dunwu/dockerApp 0.0.1"
echo -e "${C_RESET}"
return ${FAILED}
fi
local repository=$1
local tag=$2
# 如果 docker 镜像已存在,则删除镜像
local dockerHashId=$(docker image ls | grep ${repository} | grep ${tag} | awk '{print $3}')
if [[ ! ${dockerHashId} ]]; then
logInfo "try to delete existed image: ${repository}:${tag}"
callAndLog docker rmi ${dockerHashId}
fi
logInfo "try to push new image: ${repository}:${tag}"
callAndLog docker push ${repository}:${tag}
}
# 判断指定路径下是否为 docker 工程
# @param $1: 第一个参数为 docker 项目路径
dockerCheck() {
local source=$1
if [[ -d "${source}" ]]; then
cd ${source}
if [[ -f "${source}/Dockerfile" ]]; then
return ${YES}
else
logError "Dockerfile is not exists"
return ${NO}
fi
cd -
return ${YES}
else
logError "${source} is not valid docker project"
return ${NO}
fi
}