《Linux 装 Docker 有多简单?跟着敲一遍,从“一脸懵“到“真香“就差这一篇》
💡 先来个灵魂比喻:如果说虚拟机是"在房间里再建一个房间",那 Docker 容器就是"在房间里搭个帐篷"——启动快、占地小、说拆就拆。而你接下来要做的,就是学会怎么在自己的 Linux 电脑上支起这个"帐篷工厂"。
Docker 到 2026 年依然是容器界的事实标准。不管你是想搭个博客、跑个数据库、还是复现 CVE 漏洞环境(比如我们上一篇讲的 CVE-2022-22947),Docker 都是最省事的方案——一句 docker run 就能拉起一个完整的、隔离的运行环境,再也不用经历"在我机器上是好的"这种经典扯皮。
本篇面向零基础 Linux 用户,目标是让你跟着敲完命令后,不仅能装上 Docker,还能真正用起来。✅
🧭 先搞清楚:我们要装的是什么?
很多人一上来就复制粘贴安装命令,但连装的是啥都没搞明白。这里先把几个概念对齐:
-
Docker Engine(docker-ce):Docker 的核心引擎,负责创建和管理容器
-
Docker CLI(docker-ce-cli):你敲
docker命令时调用的客户端 -
containerd.io:底层容器运行时,Docker 把它打包进来了
-
docker-buildx-plugin:高级构建工具,支持多架构
-
docker-compose-plugin:用
docker compose命令管理多容器应用(注意是现代的 V2 插件,不是老的 standalonedocker-compose)
📌 2026 年的现代装法:一条命令把这 5 个包一起装上,省心。
🔍 第一步:安装前的自查
打开终端,先确认几件事:
# 1. 确认是 64 位系统
uname -m
# 输出 x86_64 / amd64 / arm64 都 OK
# 2. 确认系统版本(Ubuntu 用户看这个)
cat /etc/os-release | grep VERSION=
# 支持 22.04 LTS / 24.04 LTS / 26.04 LTS
# 3. 确认有 sudo 权限
sudo whoami
# 输出 root 就对了
支持的系统版本(截至 2026 年):
|
发行版 |
支持版本 |
|---|---|
|
Ubuntu |
22.04 LTS / 24.04 LTS / 25.10 / 26.04 LTS |
|
CentOS |
Stream 9 / Stream 10 |
|
Debian |
11 / 12 |
⚠️ 如果你是 CentOS 7 或更早版本,官方已经不支持了,建议升级系统。
另外,如果你之前用 apt 或 yum 装过老版本的 Docker(叫 docker.io、docker 等),需要先卸干净,否则会和官方新版本打架:
Ubuntu / Debian 系:
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)
CentOS / RHEL 系:
sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
卸的时候如果提示"这些包根本没装",别慌,那是正常的。
📦 第二步:Ubuntu / Debian 安装(官方仓库法)
这是 Docker 官方推荐的方式,能拿到最新稳定版(Ubuntu 默认仓库里的 docker.io 往往落后好几个月)。
1. 安装前置依赖 + 添加 GPG 密钥
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
2. 添加 Docker 官方 APT 仓库
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
这条命令会自动识别你的 Ubuntu 版本(jammy / noble / resolute),不用手动改。
3. 安装 Docker 全家桶
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
装完后 Docker 会自动启动,并且开机自启。
4. 验证安装
sudo docker run hello-world
如果看到下面这段输出,恭喜你,安装成功 🎉:
Hello from Docker!
This message shows that your installation appears to be working correctly.
📦 第三步:CentOS / RHEL 安装
1. 添加 Docker 官方仓库
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2. 安装 Docker 全家桶
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
💡 CentOS 9 Stream 默认偏向 Podman,但 Docker 和 Podman 可以共存,放心装。
3. 启动 Docker 并设置开机自启
sudo systemctl enable --now docker
4. 验证
sudo docker run hello-world
看到 "Hello from Docker!" 就对了。
👤 第四步:让 Docker 命令不再需要 sudo(强烈推荐)
默认情况下,每敲一次 docker 都要加 sudo,烦人不说,还容易因为权限问题踩坑。解决办法是把当前用户加进 docker 用户组:
sudo usermod -aG docker $USER
然后注销重新登录(或者重开一个终端窗口),让组权限生效。验证一下:
docker run hello-world
这次不加 sudo 也能跑,说明配置成功了。
⚠️ 安全提醒:
docker组实质上等于 root 权限——组内用户可以通过 Docker 挂载宿主机根目录、拿到整台机器的控制权。所以只在你完全信任的用户环境下这么干;如果是多人共享的服务器,建议用 rootless 模式或保持 sudo。
🚀 第五步:Docker 实战——从"hello-world"到真正能用
光跑个 hello-world 没意思,我们来跑点实用的。
实战 1:跑一个 Nginx 网站
# 拉取 nginx 镜像并后台启动,把本机 8080 端口映射到容器的 80 端口
docker run -d --name my-nginx -p 8080:80 nginx
然后浏览器打开 http://localhost:8080,就能看到 Nginx 的经典欢迎页。
命令拆解:
-
-d:后台运行(detached) -
--name my-nginx:给容器起个好记的名字 -
-p 8080:80:端口映射,格式是宿主机端口:容器端口 -
nginx:使用的镜像名
实战 2:查看容器状态
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(包括已停止的)
docker logs my-nginx # 查看容器日志
docker logs -f my-nginx # 实时跟踪日志(类似 tail -f)
实战 3:进入容器内部逛逛
docker exec -it my-nginx bash
-it 是 --interactive + --tty 的缩写,意思是"给我一个可交互的终端"。进去后你会发现这是一个精简版的 Linux 环境,可以 ls、cat、ps 随便玩。
退出容器:exit
💡 如果镜像里没有
bash(比如 alpine 系镜像),换成sh:docker exec -it my-nginx sh
实战 4:停止和删除容器
docker stop my-nginx # 优雅停止
docker rm my-nginx # 删除已停止的容器
docker rm -f my-nginx # 强制删除运行中的容器
实战 5:挂载数据卷(让数据持久化)
容器一旦删除,里面的数据就没了。要让数据"活过容器生命周期",需要用卷:
# 把本机当前目录挂载到容器的 /usr/share/nginx/html
docker run -d --name my-nginx -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
这样你在本机目录里放一个 index.html,访问 http://localhost:8080 就能看到它。
🧰 第六步:Docker 日常高频命令速查表
新手记住下面这 20 条就够用很久了:
镜像相关
docker images # 查看本地镜像
docker pull nginx:1.25 # 拉取指定版本镜像
docker rmi nginx # 删除镜像
docker build -t my-app:1.0 . # 用当前目录的 Dockerfile 构建镜像
容器相关
docker ps # 运行中的容器
docker ps -a # 所有容器
docker start my-nginx # 启动已停止的容器
docker stop my-nginx # 停止容器
docker restart my-nginx # 重启容器
docker rm -f my-nginx # 强制删除容器
docker exec -it my-nginx bash # 进入容器
docker logs -f my-nginx # 跟踪日志
docker stats my-nginx # 查看资源占用
清理相关
docker system df # 查看 Docker 磁盘占用
docker container prune # 删除所有停止的容器
docker image prune -a # 删除所有没在用的镜像
docker volume prune # 删除没在用的数据卷
docker system prune -a # 一键深度清理(慎用)
Compose 多容器编排
docker compose up -d # 后台启动 docker-compose.yml 里的所有服务
docker compose ps # 查看编排的服务状态
docker compose logs -f # 查看所有服务日志
docker compose down # 停止并删除编排的容器
🏗️ 第七步:写一个 Dockerfile,定制自己的镜像
光用现成镜像不够爽,我们来把自己的应用打包成镜像。
在项目目录下创建 Dockerfile(无后缀):
dockerfile
# 基于 Python 3.12 精简版
FROM python:3.12-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install -r requirements.txt
# 复制所有代码
COPY . .
# 声明容器运行时监听的端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
构建并运行:
docker build -t my-python-app:1.0 .
docker run -d --name my-app -p 5000:5000 my-python-app:1.0
访问 http://localhost:5000,你的应用就跑起来了!🎉
🐞 第八步:新手最常踩的 5 个坑
坑 1:端口被占用
docker run -p 8080:80 nginx
# 报错:port is already allocated
解决:换一个宿主机端口,比如 -p 8888:80,然后访问 http://localhost:8888。
坑 2:容器跑不起来,立刻退出
原因:容器里没有"前台进程"在跑。比如 docker run ubuntu 就会立刻退出,因为 Ubuntu 镜像默认没有服务在跑。
解决:加 -it 进入交互模式,或指定一个长期运行的命令:
docker run -it ubuntu bash
坑 3:容器里的数据重启后没了
原因:容器文件系统是临时的。
解决:用 -v 挂载数据卷,参见实战 5。
坑 4:镜像拉取慢如蜗牛
解决:配置国内镜像加速器。编辑 /etc/docker/daemon.json:
json
{
"registry-mirrors": ["https://docker.hpcloud.cloud"]
}
然后重启 Docker:sudo systemctl restart docker
坑 5:忘记加 sudo 或没注销重登
docker ps
# 报错:permission denied
解决:要么加 sudo,要么把自己加入 docker 组后注销重新登录。
🔧 第九步:卸载 Docker(留着备用)
哪天不想玩了,可以这样卸干净:
# Ubuntu / Debian
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt autoremove
sudo rm -rf /var/lib/docker /var/lib/containerd
# CentOS / RHEL
sudo dnf remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker /var/lib/containerd
⚠️
/var/lib/docker里存着你所有的镜像和容器数据,删除后不可恢复,操作前确认。
🎓 写在最后:Docker 思维的转变
装完 Docker、跑通几个容器后,你会发现开发流程发生了质变:
-
以前:"这项目在我机器上跑不起来" → 现在:
./setup.sh换成docker compose up -d -
以前:装 MySQL 要
apt install mysql-server然后折腾配置文件 → 现在:docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=xxx -p 3306:3306 mysql:8.0 -
以前:复现 CVE 漏洞要配一堆环境 → 现在:
git clone vulhub && cd xxx && docker compose up -d(没错,就是我们上一篇 CVE-2022-22947 的玩法)
💡 Docker 的真正价值:把"环境"变成代码,把"配置"变成声明。一次构建,到处运行——这才是现代开发和运维的基石。
更多推荐
所有评论(0)