怎么用脚本一键在Ubuntu上安装Docker
在Ubuntu上部署Docker最快捷的方法是使用Docker官方提供的便捷安装脚本(get-docker.sh)。只需一条命令下载并执行该脚本,系统就会自动完成检测操作系统发行版、添加官方GPG密钥、配置APT软件源以及安装最新版Docker Engine与关联插件的全部工作。本文将拆解这套一键安装脚本的完整流程、前置检查、非root权限配置以及安装后的验证方法。
一、准备工作与前提条件
虽然便捷脚本具备高度的自动化处理能力,但为了确保安装过程顺畅无阻,执行前需要在Ubuntu宿主机上核实以下基础运行环境:
- 系统版本:推荐Ubuntu 20.04 LTS (Focal)、22.04 LTS (Jammy) 或 24.04 LTS (Noble)。脚本支持
x86_64(amd64)、arm64以及armhf硬件架构。 - 网络与下载工具:系统中需具备
curl命令。若尚未安装,需先通过系统包管理器安装。 - 用户权限:当前执行用户需具备
sudo管理员权限,用于写入系统密钥和安装系统级系统守护进程。
在终端中执行以下命令,更新本地软件包索引并安装curl工具:
sudo apt-get update && sudo apt-get install -y curl
二、下载并执行一键安装脚本
Docker 官方维护着一份用于快速安装的 Shell 脚本,托管在 https://get.docker.com。为了安全起见,推荐将脚本保存到本地后再以管理员权限运行,而不是直接将网络流通过管道输送给解释器。
1. 下载脚本文件
在当前目录下运行以下命令,将远程脚本另存为 get-docker.sh:
curl -fsSL https://get.docker.com -o get-docker.sh
参数解释:-f 表示 HTTP 错误时不输出 HTML 错误页面;-s 为静音模式;-S 在发生错误时显示提示;-L 遇到重定向时自动跟随。
2. 安全审查(可选但推荐)
在执行任何来自公网的提权安装脚本前,可以使用 --dry-run 参数检查脚本将在当前系统上执行哪些指令,而不会产生实质修改:
sh get-docker.sh --dry-run
3. 执行一键安装
审查无误后,使用 sudo 权限调用 sh 执行安装:
sudo sh get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
脚本启动后会自动输出安装进度。示例输出如下所示:
+ sh -c 'apt-get update -qq >/dev/null'
+ sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl gnupg >/dev/null'
+ sh -c 'install -m 0755 -d /etc/apt/keyrings'
+ sh -c 'curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg'
+ sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" > /etc/apt/sources.list.d/docker.list'
+ sh -c 'apt-get update -qq >/dev/null'
+ sh -c 'DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null'
三、一键脚本的底层运作机制
许多初学者认为一键脚本等同于一个黑盒安装包,但它本质上是一套严格遵守 Debian/Ubuntu 软件源规范的自动化 Shell 程序。理解它在系统中做了什么,有助于在日后维护或卸载时心中有数。
四、一键脚本安装与手动配置仓库的选型对比
Docker 官方文档明确指出:便捷脚本主要针对开发测试环境、原型验证或单机边缘节点设计;而在大型企业级或严苛的生产环境中,通常推荐采用手动添加仓库或配置自动化运维工具(如 Ansible、Terraform)的方式进行精细化管理。
五、配置非 root 用户使用权限
Docker 守护进程(dockerd)默认绑定在 Unix Socket 文件 /var/run/docker.sock 上,该文件默认属主为 root,属组为 docker。新装好的系统中,普通用户直接执行 docker ps 会遇到 permission denied 拒绝访问错误。
为了日常开发安全,避免每次都输入 sudo,需要将当前非 root 用户加入到 docker 用户组中:
1. 将当前用户添加至 docker 组
sudo usermod -aG docker $USER
参数解释:-a 表示追加(append),-G 指定附加组名,$USER 环境变量指向当前登录的用户名。
2. 刷新组身份生效
用户组信息的更改在新的登录会话中才会完全生效。可以通过重新登录终端,或者使用 newgrp 命令立即刷新当前 Shell 进程的组凭据:
newgrp docker
六、安装结果验证与健康检查
在脚本执行及权限配置完毕后,需要按顺序完成服务状态确认、版本检查以及运行测试容器三项验证。
1. 确认守护进程状态
使用 systemctl 查看 Docker 服务是否已正常处于运行状态,并设置为开机自启:
sudo systemctl status docker
如果输出中包含 Active: active (running) 且 Loaded: ... enabled,说明服务启动正常。
2. 运行验证容器
执行官方标准的 hello-world 镜像,该命令会尝试拉取镜像并在容器内打印问候信息后退出:
docker run hello-world
若终端中输出了以下说明段落,即表明从客户端与守护进程通信、镜像仓库拉取、容器创建到进程退出的整条链路均工作正常:
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image...
4. The Docker daemon streamed that output to the Docker client...
七、常见问题排查与解决办法
1. 下载脚本或镜像时网络连接超时
现象:执行 curl -fsSL https://get.docker.com 长期卡顿或报错 Failed to connect to get.docker.com port 443: Connection timed out。
排查与修复:这是由于宿主机到海外 CDN 节点的连通性受限所致。可以尝试更换为国内公开镜像源,或在具备代理的环境中配置环境变量后再行拉取:
# 临时挂载 HTTP 代理(若具备代理网关)
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
# 或直接使用镜像参数执行
sudo sh get-docker.sh --mirror Aliyun
2. 提示 Got permission denied while trying to connect to the Docker daemon socket
现象:未加 sudo 运行 docker images 时报错:permission denied while trying to connect to the Docker daemon socket。
排查与修复:当前登录账号尚未在当前终端会话中加载 docker 用户组凭据。先核实账号是否已加入组:
groups $USER
若输出包含 docker,直接运行 newgrp docker 激活新组;若不包含,请重新执行 sudo usermod -aG docker $USER 后注销并重新登录系统。
3. 与系统旧版本 docker.io 产生包冲突
现象:脚本在执行 apt-get install 时提示与已有软件包存在依赖冲突(如 docker.io 或旧版 containerd)。
排查与修复:Ubuntu 官方源自带的 docker.io 是社区旧包,与 Docker 官方维护的 docker-ce 存在文件命名冲突。在运行脚本前需彻底移除旧包:
sudo apt-get remove -y docker docker-engine docker.io containerd runc
sudo sh get-docker.sh
该清理操作不会删除 /var/lib/docker/ 下已有的历史镜像和容器数据,清理完毕后重新调用脚本即可平滑升级至官方最新版本。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













