Docker 和 Docker Compose 安装脚本
个人博客
个人博客直达地址
网站不断完善中里面拥有大量的脚本,并且源码完全开放 欢迎纯白嫖。关注公众私信可免费写脚本
概述
这是一个优化后的 Bash 脚本,用于自动化安装 Docker 和 Docker Compose。脚本会自动检测系统类型(Ubuntu 或 CentOS),并执行相应的安装步骤。有错误处理、日志记录、安装验证等功能。
主要功能
- 检测操作系统类型(Ubuntu 或 CentOS)
- 卸载已存在的 Docker(如果有)
- 安装最新版本的 Docker
- 安装最新版本的 Docker Compose
- 验证安装是否成功
详细说明
通用功能
- 错误处理:使用
set -e
确保任何命令失败时脚本会立即退出 - 日志记录:所有操作都会记录到
/var/log/docker_install.log
- Root 权限检查:确保脚本以 root 权限运行
- 操作系统检测:使用
/etc/os-release
文件检测操作系统类型和版本
Ubuntu 系统
- 卸载旧版本 Docker
- 更新软件包索引
- 安装必要的依赖
- 添加 Docker 官方 GPG 密钥
- 设置 Docker 仓库
- 安装最新版本的 Docker
CentOS 系统
- 卸载旧版本 Docker
- 安装必要的依赖
- 设置 Docker 仓库
- 安装最新版本的 Docker
- 启动 Docker 服务并设置开机自启
Docker Compose 安装
- 获取最新版本的 Docker Compose
- 下载并安装 Docker Compose
- 设置可执行权限
- 创建软链接以确保命令可用
改进
- 添加了错误处理和日志记录
- 增加了对安装成功的验证
- 现在安装最新版本的 Docker,而不是特定版本
- 为 CentOS 系统添加了启动 Docker 服务并设置开机自启的步骤
- 获取最新版本的 Docker Compose,而不是硬编码版本号
- 增加了 Root 权限检查
- 改进了操作系统检测方法
注意事项
- 脚本仍然需要 root 权限运行
- 目前仅支持 Ubuntu 和 CentOS 系统
- 脚本会安装最新版本的 Docker 和 Docker Compose,如果需要特定版本,需要手动修改脚本
- 安装过程中的所有操作都会记录到
/var/log/docker_install.log
使用方法
- 将脚本保存为 .sh 文件,例如
install_docker.sh
- 给脚本添加执行权限:
chmod +x install_docker.sh
- 使用 root 权限运行脚本:
sudo ./install_docker.sh
潜在的进一步改进
- 添加命令行参数,允许用户选择是否安装 Docker Compose 或指定版本号
- 增加对更多 Linux 发行版的支持
- 添加卸载功能
- 增加配置 Docker 镜像源的选项,以加快下载速度
- 添加安装后的基本安全配置选项
#!/bin/bash
# 设置错误处理
set -e
# 日志函数
log() {
echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" | tee -a /var/log/docker_install.log
}
# 检查root权限
if [ "$(id -u)" != "0" ]; then
log "This script must be run as root" 1>&2
exit 1
fi
# 检测操作系统
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
else
log "Cannot detect OS, exiting."
exit 1
fi
# 安装Docker函数
install_docker() {
log "Installing Docker..."
if [ "$OS" = "Ubuntu" ]; then
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
elif [ "$OS" = "CentOS Linux" ]; then
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
else
log "Unsupported OS"
exit 1
fi
}
# 安装Docker Compose函数
install_docker_compose() {
log "Installing Docker Compose..."
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
}
# 主程序
main() {
log "Starting Docker and Docker Compose installation script"
# 卸载旧版本Docker
log "Removing old Docker versions..."
if [ "$OS" = "Ubuntu" ]; then
apt-get remove -y docker docker-engine docker.io containerd runc || true
elif [ "$OS" = "CentOS Linux" ]; then
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine || true
fi
# 安装Docker
install_docker
# 安装Docker Compose
install_docker_compose
# 验证安装
log "Verifying installation..."
docker --version
docker-compose --version
log "Installation completed successfully"
}
# 运行主程序
main