#/bin/bash
# 安装 Docker
install_docker() {
if ! command -v docker &> /dev/null; then
echo "docker未安装,正在安装..."
sudo apt update
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
else
echo "(√) docker已安装"
fi
sudo docker -v
}
# 安装 Docker-Compose
install_docker_compose() {
if ! command -v docker-compose &> /dev/null; then
echo "docker-compose未安装,正在安装..."
sudo apt update
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
else
echo "(√) docker-compose已安装"
fi
sudo docker-compose -v
}
# 设置docker命令简写
set_docker_alias() {
if ! grep -q "alias dps=\"docker ps --format \\\"table {{.ID}}\\t{{.Names}}\\t{{.Ports}}\\\"\"" /root/.bashrc; then
echo 'alias dps="docker ps --format \\"table {{.ID}}\\t{{.Names}}\\t{{.Ports}}\\""' >> /root/.bashrc
fi
if ! grep -q "alias dpsa=\"docker ps -a --format \\\"table {{.ID}}\\t{{.Image}}\\t{{.Ports}}\\t{{.Status}}\\t{{.Names}}\\\"\"" /root/.bashrc; then
echo 'alias dpsa="docker ps -a --format \\"table {{.ID}}\\t{{.Image}}\\t{{.Ports}}\\t{{.Status}}\\t{{.Names}}\\""' >> /root/.bashrc
fi
if ! grep -q "alias di=\"docker images\"" /root/.bashrc; then
echo 'alias di="docker images"' >> /root/.bashrc
fi
if ! grep -q "alias dstart=\"docker start\"" /root/.bashrc; then
echo 'alias dstart="docker start"' >> /root/.bashrc
fi
if ! grep -q "alias dstop=\"docker stop\"" /root/.bashrc; then
echo 'alias dstop="docker stop"' >> /root/.bashrc
fi
if ! grep -q "alias de=\"docker exec\"" /root/.bashrc; then
echo 'alias de="docker exec"' >> /root/.bashrc
fi
source /root/.bashrc
}
# 拉取指定镜像和版本
pull_docker_image() {
local image_name=$1
local image_version=$2
# 检查本地是否已有该镜像
if docker image inspect $image_name:$image_version &> /dev/null; then
echo -e "==> $image_name $image_version 镜像已经存在于本地。\n"
else
# 拉取镜像
docker pull $image_name:$image_version
# 检查拉取是否成功
if [ $? -eq 0 ]; then
echo "$image_name $image_version 镜像下载成功!"
else
echo "(×) 下载失败!!!"
fi
fi
}
docker_pull(){
while true; do
# 显示选择表格
echo "========= docker pull ========="
echo "请选择要拉取的镜像(q退出):"
echo "1. MySQL"
echo "2. Nginx"
echo "3. Redis"
echo "4. 自定义"
# 提示用户输入选择
read -p "输入相应的数字序号: " choice
# 根据用户选择调用相应的函数
case $choice in
1)
read -p "请输入要下载的MySQL版本: " mysql_version
pull_docker_image "mysql" $mysql_version
;;
2)
read -p "请输入要下载的Nginx版本: " nginx_version
pull_docker_image "nginx" $nginx_version
;;
3)
read -p "请输入要下载的Redis版本: " redis_version
pull_docker_image "redis" $redis_version
;;
4)
read -p "请输入要下载的镜像名称image_name: " custom_image_name
read -p "请输入要下载的镜像版本image_version: " custom_image_version
# 如果用户未提供版本,默认设置为 latest
if [ -z "$custom_image_version" ]; then
custom_image_version="latest"
fi
pull_docker_image $custom_image_name $custom_image_version
;;
q)
break
;;
*)
echo "无效的选择,请输入正确的数字序号。"
;;
esac
done
}
docker_run(){
echo "-----------------------------"
echo "========= docker run ========="
read -p "请输入镜像名称(images): " image_name
read -p "请输入容器名称(--name): " container_name
read -p "请输入端口映射(-p):
" port_mapping
read -p "请输入其他docker run参数(可选,如-v、-e、--privileged、--network、-m、-uroot):
" other_params
echo "-----------------------------"
docker_run_command="docker run -d"
if [ -n "$container_name" ]; then
docker_run_command+=" --name $container_name"
fi
if [ -n "$port_mapping" ]; then
docker_run_command+=" -p $port_mapping"
fi
# 构建docker run命令
docker_run_command+=" $other_params $image_name"
# 执行docker run命令
echo -e "执行的docker run命令为:\n$docker_run_command"
# 检查docker run命令执行结果
if eval "$docker_run_command"; then
echo "(√) $container_name 已启动~"
else
echo "(×) $container_name 启动失败!"
fi
docker ps
echo "=============================="
}
# 主函数
main() {
sudo apt update
echo "-----------------------------"
echo "开始安装Docker..."
install_docker
echo "开始安装Docker-Compose..."
install_docker_compose
# set_docker_alias
echo -e "-----------------------------\n"
# 可直接run 无需pull
# docker_pull
docker_run
}
# 执行主函数
main
docker自动构建脚本
于 2024-02-02 23:35:43 首次发布