其实Docker环境在购买服务器时都可以预装的,或者各类运维面板也有附带安装,所以后续主要就是看不顺眼的时候更新一下。
升级前,建议先停止正在运行的Docker容器,以防数据出问题。可以用 docker ps 查看正在运行的容器,然后用 docker stop [容器ID] 来停止它们。
要是嫌麻烦下面这条指令可以一次性停掉所有容器。
sudo docker stop $(sudo docker ps -aq)
如果是1panel面板自动安装的docker环境,升级时直接按新安装处理就行。
最好不要直接使用面板自带的终端执行命令。
一键安装
- Docker官方提供了一个便利脚本(Convenience Script),可以自动检测系统并完成所有安装步骤。
- 有些系统不在官方脚本名单里的话是无法使用的,例如Rocky Linux。
官方脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
- 或者更激进一点,直接用管道执行:
curl -fsSL https://get.docker.com | sh
使用国内镜像源的脚本
- 阿里云:
curl -fsSL https://get.docker.com | sudo sh -s -- --mirror Aliyun
- 中科大:
curl -fsSL https://get.docker.com | sudo sh -s -- --mirror AzureChinaCloud
Debian系手动挡
第一步:设置Docker的APT软件源
- 这里直接用国内的阿里云镜像。
- 安装依赖包:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
- 信任Docker的GPG公钥:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
- 将镜像源地址写入配置(墙外可跳过):
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/$(. /etc/os-release && echo "$ID") \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
第二步:安装最新版Docker
- 更新软件源缓存:
sudo apt-get update
- 执行安装:
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 验证版本
docker --version
第三步:后续升级维护
- 以后Docker发布新版本时,只需要执行两个简单的命令即可升级:
# 1. 从源更新本地软件包信息
sudo apt-get update
# 2. 自动更新所有软件包
sudo apt-get upgrade
# 3. 只更新docker相关
sudo apt-get install --only-upgrade docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Red Hat系手动挡
第一步:设置阿里云的Docker镜像源
- 安装 dnf-utils,它提供了 config-manager 这个工具
sudo dnf install -y dnf-utils
- 添加阿里云的 Docker CE 软件源
sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第二步:从阿里云镜像源安装Docker引擎
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 验证版本
docker --version
第三步:启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
第四步:后续升级维护
# 1. 从源更新本地软件包信息
sudo dnf check-update
# 2. 自动更新所有软件包
sudo dnf upgrade
# 3. 只更新docker相关
sudo dnf upgrade docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
关于
GPG公钥:
简单说,这就是给软件包验明正身。保证了从镜像源下载的Docker安装包是官方的、未经篡改的。
- 验真伪:Docker官方会用一个私钥(只有他们有)给所有软件包签名。下载的这个GPG公钥,就是与那个私钥配对的公钥。
apt在安装前,会用这个公钥去验证软件包的签名。如果对得上,就证明这个包确实是Docker官方发布的,不是别人伪造的。 - 保完整:这个签名机制也能确保软件包在从服务器下载到电脑的过程中没有被损坏或被黑客注入恶意代码。任何一点微小的改动都会导致签名验证失败。
在现代Linux发行版中,这是一个强制性的安全措施。如果不添加受信任的GPG密钥,apt会直接拒绝从这个来源安装任何软件,并给出一个关于“不可信来源”的错误警告。
镜像源:
本文设置的只对Docker生效。
创建的那个文件:/etc/apt/sources.list.d/docker.list。
- 独立文件:为Docker创建了一个独立的源列表文件。
apt会扫描/etc/apt/sources.list.d/目录下的所有.list文件,把它们和主配置文件/etc/apt/sources.list合并,形成一个完整的软件源列表。 - 专用地址:文件里写入的地址
https://mirrors.aliyun.com/docker-ce/linux/...是一个专用的URL,这个地址指向的仓库里只有Docker相关的软件包。
curl | sh 的风险:
虽然这种 curl | sh 的方式非常方便,但在专业的生产环境中,它被认为是一种有安全风险的操作。它做的事情是从网上下载一个脚本然后看都不看一眼直接用 root 最高权限去执行。
这意味着无条件地信任脚本的来源。万一 get.docker.com 这个域名被劫持,或者脚本内容被恶意篡改,服务器就变成了别人的“肉鸡”。
相对的,手动操作每一步都透明可控,清楚地知道信任了哪个GPG密钥,添加了哪个URL到软件源。(主要是玩)
命令对比
| 目的 | Debian/Ubuntu (apt) | Red Hat/AlmaLinux (dnf) |
|---|---|---|
| 安装软件 | apt-get install [包名] | dnf install [包名] |
| 卸载软件 | apt-get remove [包名] | dnf remove [包名] |
| 检查更新 | apt-get update | dnf check-update |
| 全面升级 | apt-get upgrade | dnf upgrade |
| 精准升级 | apt-get install [包名] | dnf upgrade [包名] |