ubuntu 一键安装docker+compose

AI提效 Claude Sonnet 4
此系列都是基于AI辅助实现

国外的

1
2
# 能访问国外的一件搞定,比如我的Bandwagon
curl -fsSL https://get.docker.com | sudo bash

国内的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/bin/bash

# Docker和Docker Compose完整安装脚本 for Ubuntu
# 支持Ubuntu 20.04/22.04/24.04及更新版本

set -e # 遇到错误时退出

echo "================================"
echo "Docker和Docker Compose安装脚本"
echo "================================"

# 检查是否为root用户
if [ "$EUID" -eq 0 ]; then
echo "请不要使用root用户运行此脚本"
echo "请使用普通用户运行:./install_docker.sh"
exit 1
fi

# 检查系统版本
if ! command -v lsb_release &> /dev/null; then
sudo apt update
sudo apt install -y lsb-release
fi

UBUNTU_VERSION=$(lsb_release -rs)
echo "检测到Ubuntu版本: $UBUNTU_VERSION"

# 备份原有的sources.list
echo "1. 备份并配置APT镜像源..."
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup.$(date +%Y%m%d_%H%M%S)

# 配置阿里云APT镜像源
sudo tee /etc/apt/sources.list > /dev/null <<EOF
# 阿里云镜像源
deb http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs)-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs)-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs)-security main restricted universe multiverse
EOF

# 更新系统
echo "2. 更新系统包..."
sudo apt update

# 安装必要依赖
echo "3. 安装必要依赖..."
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
gnupg \
lsb-release

# 添加Docker官方GPG密钥(使用阿里云镜像)
echo "4. 添加Docker GPG密钥..."
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加Docker仓库(使用阿里云镜像)
echo "5. 添加Docker仓库..."
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新包索引
echo "6. 更新包索引..."
sudo apt update

# 安装Docker
echo "7. 安装Docker..."
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 启动Docker服务并设置开机自启
echo "8. 启动Docker服务..."
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户添加到docker组
echo "9. 配置用户权限..."
sudo usermod -aG docker $USER

# 配置Docker国内镜像加速器
echo "10. 配置Docker镜像加速器..."
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://dockerhub.icu",
"https://docker.chenby.cn",
"https://dockerproxy.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF

# 重启Docker服务以应用配置
echo "11. 重启Docker服务..."
sudo systemctl daemon-reload
sudo systemctl restart docker

# 安装Docker Compose
echo "12. 安装Docker Compose..."

# 检查Ubuntu版本,选择合适的安装方法
if [[ $(echo "$UBUNTU_VERSION >= 22.04" | bc -l) -eq 1 ]] 2>/dev/null || [[ "$UBUNTU_VERSION" == "22.04" ]] || [[ "$UBUNTU_VERSION" > "22.04" ]]; then
# Ubuntu 22.04及以上版本,使用官方插件
echo " 使用官方插件安装Docker Compose..."
sudo apt install -y docker-compose-plugin
COMPOSE_CMD="docker compose"
else
# Ubuntu 20.04及以下版本,使用二进制文件安装
echo " 使用二进制文件安装Docker Compose..."
COMPOSE_VERSION="v2.24.1"
sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
COMPOSE_CMD="docker-compose"
fi

# 等待Docker服务完全启动
echo "13. 等待Docker服务启动..."
sleep 3

# 测试安装
echo "14. 测试安装..."
echo "Docker版本:"
docker --version

echo "Docker Compose版本:"
if [[ "$COMPOSE_CMD" == "docker compose" ]]; then
docker compose version
else
docker-compose --version
fi

echo "Docker服务状态:"
sudo systemctl is-active docker

echo ""
echo "================================"
echo "安装完成!"
echo "================================"
echo ""
echo "重要提示:"
echo "1. 请重新登录系统或运行 'newgrp docker' 来使用户组权限生效"
echo "2. 然后运行 'docker run hello-world' 来测试安装"
echo ""
if [[ "$COMPOSE_CMD" == "docker compose" ]]; then
echo "Docker Compose命令: docker compose (注意是空格)"
echo "如果习惯使用 docker-compose,可以创建别名:"
echo "echo 'alias docker-compose=\"docker compose\"' >> ~/.bashrc && source ~/.bashrc"
else
echo "Docker Compose命令: docker-compose"
fi
echo ""
echo "常用命令:"
echo " docker --version # 查看Docker版本"
echo " $COMPOSE_CMD version # 查看Docker Compose版本"
echo " docker images # 查看镜像列表"
echo " docker ps # 查看运行中的容器"
echo " docker run hello-world # 测试Docker安装"
echo ""
echo "镜像加速器已配置,拉取镜像速度会更快!"
echo ""
echo "如需卸载Docker,请运行:"
echo "sudo apt purge docker-ce docker-ce-cli containerd.io docker-compose-plugin"
echo "sudo rm -rf /var/lib/docker /etc/docker"