1. 动手之前,先搞清楚 Docker 到底解决什么问题
每次聊到 Docker,我都会先问一句:你是真的需要它,还是只是因为朋友圈都在刷?因为安装 Docker 本身并不难,难的是装完之后不知道怎么用、用起来不知道哪里会踩坑。如果你只是想在电脑上跑个 MySQL、Redis,或者想体验一下容器化部署是什么感觉,那这篇文章能帮你从头走一遍完整的安装流程;如果你是想在生产环境里搭建一套微服务架构,那同样需要先把 Docker 装对、装稳,后面的一切才有基础。
Docker 本质上是一个开源的容器化平台,它把你的应用连同运行环境一起打包成一个“镜像”,然后用这个镜像创建出一个个相互隔离的“容器”。你可以把镜像理解成做蛋糕的模具,容器就是模具做出来的那个蛋糕——同一个模具可以反复用,做出来的蛋糕长得一模一样,而且蛋糕和蛋糕之间互不干扰。这种思路解决的最大痛点就是“在我电脑上明明是好的,怎么到你那儿就崩了”:因为你把整个环境都打包进去了,依赖、配置、版本,全部一张镜像带走。
从热搜词里能看到大家最关心的场景:有在 Windows 上装 Docker Desktop 的、有在 Ubuntu 上用命令行安装的、有拿 Docker 部署 MySQL 8.0 和 Redis 主从的、还有搭 DVWA 靶场做安全测试的。这说明 Docker 之所以火,不是因为它本身高深,而是因为它能承载的玩法实在太多。但无论你最终要用它做什么,第一步永远是同一件事:把 Docker 引擎正确、稳定地装到你的机器上,并且确保它能正常启动、拉取镜像、运行容器。这篇文章我就把 Linux、Windows 两条主路径的安装过程掰开揉碎给你讲,附带平时没人愿意明说的坑点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的核心认知:Docker Engine 和 Docker Desktop 是两码事
2.1 两个概念,决定了你的安装方式完全不同
这是新手最容易混淆的一个点。简单来说,Docker Engine 是真正干活的那个“引擎”,它是一个后台守护进程加一套命令行工具,运行在 Linux 系统上。而 Docker Desktop 是面向 macOS 和 Windows 用户的图形化应用,它本质上是在你的电脑里跑一个轻量级虚拟机,虚拟机里装着一个 Linux 环境,Docker Engine 就运行在这个虚拟机里。
所以说,安装方式的取舍其实是在回答一个问题:你的操作系统是什么,你打算在什么环境里跑容器?
- 如果你用的是 Ubuntu、CentOS、Debian 这类 Linux 发行版,直接安装 Docker Engine 就够了,命令行操作,干净利落,资源开销最小。
- 如果你用的是 Windows 10/11 家庭版或专业版,需要装 Docker Desktop,它依赖 Hyper-V 或 WSL2 后端来提供 Linux 运行环境。
- 如果你用的是 macOS,同样装 Docker Desktop,它会自动帮你管理虚拟化层。
这个区分特别重要,因为我见过太多人拿着 Windows 上"Failed to start because virtualisation support wasn't detected"这类报错去搜 Linux 的解决方案,最后折腾半天发现完全对不上号。先搞清楚自己处在哪个环境里,再往下走,能省掉一大半的弯路。
2.2 版本选择:不要盲目追求最新
Docker 的版本迭代非常快,社区版(Community Edition)的发布节奏大概是每个月一个稳定版。但我的建议是:不要一看到新版本就立刻升级。尤其是在生产环境或老项目里,Docker 引擎和内核、网络插件、存储驱动之间的兼容性需要经过验证。如果你只是个人学习或搭建测试环境,那么用官方仓库里的最新稳定版就可以了;如果你是在公司服务器上部署业务,建议先把当前使用的版本固定住,等有余量了再考虑升级。
还有一个容易被忽略的点:Linux 内核版本。Docker 对内核有最低要求,通常建议 3.10 以上,越新越好。如果你用 CentOS 7 这种老系统,默认内核是 3.10,跑 Docker 虽然可以,但在 overlay2 存储驱动下可能会遇到一些性能问题。所以条件允许的话,尽量用较新的操作系统,省心很多。
3. Ubuntu 系统安装 Docker Engine 完整实操
3.1 第一步:卸载旧版本,清理历史残留
如果你以前装过 Docker,或者系统里已经存在 docker、docker-engine、docker.io 之类的旧包,最好先清理干净。原因很简单:新旧版本混装会导致守护进程冲突、配置文件互相覆盖,最后启动失败时你根本定位不到问题出在哪儿。
bash复制sudo apt remove docker docker-engine docker.io containerd runc
这条命令会卸载旧版组件,但不会删除 /var/lib/docker 目录下的镜像、容器、数据卷。如果你确认旧数据都不需要了,再手动把这个目录删掉:
bash复制sudo rm -rf /var/lib/docker
这里要特别提醒:如果你不清楚 /var/lib/docker 里还有什么,就不要急着删。尤其是那些跑了一段时间的容器,数据卷里可能存着数据库文件。我的习惯是先把数据备份出来,再动手清理。
3.2 第二步:安装依赖并添加官方仓库
Ubuntu 上安装 Docker 最推荐的方式是通过官方 apt 仓库,而不是直接 apt install docker.io。因为官方仓库里的版本更新更及时,而且你可以精确控制安装的版本号。先把必要的依赖装上:
bash复制sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
然后添加 Docker 官方的 GPG 密钥,这个是用来验证软件包合法性的,防止下载到被篡改的安装包:
bash复制sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
接着写入仓库信息。注意下面这段命令里的 $(lsb_release -cs) 会自动获取你当前 Ubuntu 的版本代号,比如 22.04 是 jammy,20.04 是 focal:
bash复制echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
我自己在操作这一步时习惯先用 lsb_release -cs 确认版本代号,避免仓库源配错导致后面 apt update 报错。如果你家里网络访问 Docker 官方源特别慢,可以考虑换成国内镜像源,这个在后面章节会单独讲。
3.3 第三步:安装 Docker Engine 并启动服务
仓库配置好之后,更新索引并安装:
bash复制sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
注意这里安装的是 docker-ce,也就是社区版,不要装成 docker.io。同时我推荐把 docker-compose-plugin 一起装上,因为现在 Docker Compose 已经作为插件集成到 Docker CLI 里了,你可以直接使用 docker compose 命令(注意中间有空格),不再需要单独装一个 docker-compose 二进制文件。
安装完成后,启动 Docker 服务并设置开机自启:
bash复制sudo systemctl enable docker
sudo systemctl start docker
检查运行状态:
bash复制sudo systemctl status docker
如果看到 active (running) 就说明服务已经起来了。这个时候你可以顺手验证一下版本信息:
bash复制docker --version
docker compose version
3.4 第四步:把当前用户加入 docker 组,免去 sudo 烦恼
这一步是几乎所有新手都会撞的墙:明明 Docker 已经装好了,执行 docker ps 却报错:
code复制permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
原因很简单:Docker 守护进程使用的 Unix socket 属于 root 用户,普通用户默认没有权限访问。解决办法是把你的用户加入 docker 用户组:
bash复制sudo usermod -aG docker $USER
改完之后必须重新登录或者执行 newgrp docker,让用户组变更生效。这一步别偷懒,很多人执行完命令就直接 docker ps,发现还是报错,其实是登录会话还没刷新。
提示:加入 docker 组后,你的用户就相当于有了 root 级别的 Docker 管理权限。个人开发机没问题,但在共享服务器上要慎重,这种操作等同于把所有 docker 组里的用户都提升到了特权层级。
4. CentOS 系统上安装 Docker 的差异点
4.1 yum 仓库配置与安装命令
CentOS 和 Ubuntu 在安装思路上一脉相承,差别主要在包管理器上。先卸载旧版本:
bash复制sudo yum remove docker docker-client docker-common docker-selinux docker-engine
然后安装依赖:
bash复制sudo yum install -y yum-utils device-mapper-persistent-data lvm2
配置仓库:
bash复制sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装:
bash复制sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动服务并设置开机自启:
bash复制sudo systemctl start docker
sudo systemctl enable docker
4.2 CentOS 7 的老内核兼容问题
CentOS 7 自带的内核版本是 3.10,而 Docker 在新版本中对内核模块和 iptables 的行为有一些调整,所以老系统上偶尔会出现容器网络异常、防火墙规则冲突的问题。如果你必须用 CentOS 7,我的建议是升级内核到 4.x 以上的长期支持版本,或者考虑直接用 Docker 官方提供的静态二进制包来运行。另外,CentOS 下如果发现 Docker 启动失败,先看 SELinux 是否拦截了:
bash复制sudo journalctl -xu docker.service
如果是 SELinux 导致的,可以临时设置为 permissive 模式排查:
bash复制sudo setenforce 0
确认是 SELinux 的问题后,再去决定是调整策略还是关闭它。生产环境不要轻易关闭 SELinux,但测试机无所谓。
5. Windows 安装 Docker Desktop 全流程
5.1 安装前的系统检查:一看系统版本,二看虚拟化
Windows 上安装 Docker Desktop,最常见也最让新手崩溃的报错就是:
code复制Docker Desktop failed to start because virtualisation support wasn't detected
这句话翻译过来就是:你的系统没有检测到虚拟化支持。但“没检测到”可能有好几种原因,逐个排查:
- BIOS/UEFI 里没有开启虚拟化。重启电脑进 BIOS,找到 Intel VT-x 或 AMD-V 选项并启用。这一步很多人会漏掉,因为新电脑默认不一定会打开。
- Windows 功能里没有启用虚拟机平台。打开"启用或关闭 Windows 功能",勾选"虚拟机平台"(Virtual Machine Platform)和"适用于 Linux 的 Windows 子系统"(WSL2)。
- 系统版本太低。Docker Desktop 新版要求 Windows 10 64 位专业版/企业版/教育版,或者 Windows 10 家庭版 2004 及以上版本。如果你看到 "We've detected that you have an incompatible version of Windows" 的提示,十有八九是系统版本不够新。
在命令行里执行 systeminfo,拉到中间部分看“Hyper-V 要求”那一段,如果四项都是“是”,说明虚拟化已经完全就绪;如果哪一项显示“否”,就按上面的方法对应排查。
5.2 安装 WSL2 并设置为默认后端
Docker Desktop 在 Windows 上有两种后端:Hyper-V 和 WSL2。我强烈推荐用 WSL2,因为它的内存占用更小、启动速度更快,而且和 Docker 的整合更顺畅。
先启用 WSL2 功能。以管理员身份打开 PowerShell,执行:
powershell复制dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后重启电脑。重启之后,把 WSL 的默认版本设为 2:
bash复制wsl --set-default-version 2
如果你之前已经装过 WSL1 的发行版,可以用 wsl --set-version <发行版名称> 2 来迁移。如果 wsl --set-default-version 执行后报错说找不到 WSL2 内核,你需要下载并安装 WSL2 Linux 内核更新包,装完再试一次。
5.3 下载安装 Docker Desktop 并完成配置
到 Docker 官网下载 Docker Desktop for Windows 的安装包。双击运行安装程序,中间有个步骤会问你是否使用 WSL2 作为后端,勾选它。安装完成后桌面会多一个 Docker Desktop 图标,双击启动,等待小鲸鱼图标稳定下来不再转圈,就说明 Docker 引擎启动成功了。
启动成功后,可以在终端里验证:
bash复制docker version
docker run hello-world
如果 docker run hello-world 能正常输出版本信息和一段欢迎语,你的 Windows Docker 环境就算打通了。
5.4 解决 Docker Desktop 一直 starting 的问题
热搜词里有 "docker一直starting",这确实是高频问题。我遇到过的常见原因有这么几个:
- WSL2 发行版没运行。打开终端执行
wsl --list --verbose,看状态是否为 Running。如果显示 Stopped,执行wsl --shutdown后重新启动 Docker Desktop。 - 服务没有自动启动。按 Win + R,输入
services.msc,找到 "LxssManager" 和 "Docker Desktop Service",确保它们处于运行状态。 - 资源占用过高。Docker Desktop 启动时需要分配至少 2GB 内存,如果机器本身内存不足,会出现无限启动的情况。
- 上一次异常退出留下的锁文件。有时 Docker Desktop 的进程残留会导致新的实例无法正常启动,打开任务管理器,结束所有 Docker 相关进程,再重新启动一次。
还有一个我没少见的骚操作导致的问题:改了 Docker Desktop 的镜像存储路径到非系统盘,结果权限不对造成启动失败。所以如果你在配置里动过存储路径,回头看下那个目录的读写权限。
6. 镜像下载慢?这一节帮你彻底解决
6.1 为什么国内拉取镜像那么慢
Docker 默认的镜像仓库是 Docker Hub,服务器部署在海外。国内网络环境下直接拉取镜像,速度快的时候几十兆每秒,慢的时候可能只有几十 KB,拉一个几百 MB 的镜像等上大半天也不是没可能。更无奈的是有时候会直接超时中断。
解决办法就是配置镜像加速器,也就是把自己常用的镜像源指向国内的镜像仓库服务商。原理很简单:你去拉镜像的时候,Docker 引擎先到你配置的镜像源地址去找,国内源通常已经把热门镜像同步好了,拉取速度自然就快了。
6.2 Linux 下的镜像源配置方法
Docker 的镜像源配置写在 /etc/docker/daemon.json 里。如果没有这个文件,就新建一个。一个典型的配置是这样:
json复制{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.nju.edu.cn"
]
}
具体适合你的地址,建议以当下可用的公共镜像加速服务为准,这些地址经常变动,最好自己测试一下连通性再写进去。配置完成后重启 Docker:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置是否生效需要查看 Docker 信息:
bash复制docker info
在输出的内容里找到 "Registry Mirrors" 一栏,如果列出了你配置的地址,就说明镜像加速已经启用了。
6.3 Docker Desktop 里的图形化配置
Windows/macOS 用户更简单,打开 Docker Desktop,进入 Settings → Docker Engine,在 JSON 配置的 registry-mirrors 字段里添加镜像源地址,然后点击 "Apply & Restart" 等待 Docker 重启即可。修改前先留意已有的配置,不要覆盖掉其他自定义项,直接在现有 JSON 上追加字段。
有些镜像加速地址只支持部分镜像仓库,如果配置后拉取仍然慢,可以尝试多个地址组合。另外,拉取镜像的时候尽量不要同时开太多任务,Docker 默认并发下载有限制,任务排队会让每个镜像都显得很慢。
7. 打通你的第一个容器:用 MySQL 8.0 做完整演练
7.1 拉取镜像并启动 MySQL 容器
装机毕竟只是开始,真正让 Docker 体现威力的时刻是跑起第一个应用。我拿 MySQL 8.0 来演示,因为这个案例覆盖了拉取镜像、自定义配置、端口映射、数据持久化、客户端连接这几个最核心的 Docker 操作,几乎每个新手都会经历。
先拉取 MySQL 8.0 镜像:
bash复制docker pull mysql:8.0
然后启动容器。这里我给一个比较完整的启动命令,跟着敲一遍,注释都写在下面了:
bash复制docker run -d \
--name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
--restart=always \
-v /opt/mysql-data:/var/lib/mysql \
mysql:8.0
逐项解释一下:
-d:后台运行容器。--name mysql8:给容器起个名字,后面操作方便。-p 3306:3306:把宿主机的 3306 端口映射到容器的 3306 端口,这样你在本机或者其他机器上就能通过宿主机 IP 访问 MySQL 了。-e MYSQL_ROOT_PASSWORD=your_password:设置 MySQL root 用户的密码,这个变量是 MySQL 镜像的重要配置项。--restart=always:宿主机重启后容器自动启动,日常开发很方便,生产环境要结合具体需要。-v /opt/mysql-data:/var/lib/mysql:数据目录挂载。把容器里 MySQL 的数据文件存到宿主机上,这样即使容器被删除,数据也不会丢。
7.2 进入容器和连接 MySQL 的几种方式
容器启动后,你可以直接进入容器内部操作:
bash复制docker exec -it mysql8 mysql -uroot -p
输入密码后,就会进入 MySQL 的命令行界面。这种方式的本质是:docker exec 会在运行中的容器里执行后面的命令,-it 表示以交互方式打开终端。
如果你想看 MySQL 容器的日志,用:
bash复制docker logs mysql8
查看容器运行状态和端口映射:
bash复制docker ps
注意 docker ps 只能看到正在运行的容器,如果想看所有容器(包括已经停止的),要加 -a 参数:
bash复制docker ps -a
7.3 数据持久化到底有多重要
上面启动命令里的 -v 参数是关键中的关键。如果不做数据卷挂载,MySQL 的数据是存在容器可写层里的,一旦你执行 docker rm mysql8 删掉容器,所有数据库都没了,而且没有任何找回手段。我见过有人辛苦配好的测试环境数据一夜清空,就是栽在这个细节上。
所以凡是有状态的应用(数据库、缓存、消息队列),一定要在启动时挂载数据卷。这只是 Docker 新手期的一个基本习惯,等后面你用 Compose 编排服务的时候,这个习惯会帮你避免很多灾难。
8. Docker 常用命令速查与心得
8.1 镜像操作命令
bash复制docker images # 查看本地镜像列表
docker search <名称> # 在 Docker Hub 搜索镜像
docker pull <镜像名:标签> # 拉取镜像
docker rmi <镜像名或ID> # 删除本地镜像
docker tag <镜像名> <新标签> # 给镜像打标签
8.2 容器生命周期命令
bash复制docker run # 创建并启动容器
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker start <容器名或ID> # 启动已停止的容器
docker stop <容器名或ID> # 停止容器
docker restart <容器名或ID> # 重启容器
docker rm <容器名或ID> # 删除容器
docker exec -it <容器名> bash # 进入容器内部
docker logs -f <容器名> # 实时查看容器日志
docker inspect <容器名> # 查看容器详细信息(比如 IP、启动配置)
8.3 常用命令背后的执行逻辑
docker run 和 docker start 的区别很多人不清楚。docker run 是“创建镜像实例并启动它”,每次执行都会创建一个新的容器;docker start 是“启动已经存在但处于停止状态的容器”。如果你对同一个镜像连续执行两次 docker run,你会得到两个完全独立的容器,它们之间没有任何关联。
docker exec 是另一个高频命令,它是在运行中的容器里执行新命令。比如你想在容器里安装一个工具:
bash复制docker exec -it mysql8 apt update
但要注意:容器本身是轻量化的,尽可能不要在里面手动安装额外工具,因为容器一旦重建,这些修改就全没了。正确的做法是把需要的工具写进 Dockerfile,这样每次构建镜像时都会自动包含它们,可复现性才好。
9. 常见问题排查与解决速查表
9.1 热搜问题集中排雷
| 报错信息或症状 | 可能原因 | 解决方法 |
|---|---|---|
| permission denied while trying to connect to the Docker daemon socket | 当前用户不在 docker 组 | 执行 sudo usermod -aG docker $USER 后重新登录 |
| Failed to connect to the Docker API at npipe:////./pipe/dockerDesktopLinuxEngine | Docker Desktop 尚未完全启动 | 等待小鲸鱼图标稳定后重试;检查 WSL2 状态 |
| virtualisation support wasn't detected | BIOS 未开启虚拟化或 Windows 虚拟机平台未启用 | 进入 BIOS 开启 VT-x/AMD-V;启用相关 Windows 功能 |
| Docker Desktop failed to start because an incompatible version of Windows | 系统版本太旧 | 升级到 Windows 10 2004 以上,或安装对应旧版本 Docker Desktop |
| Docker 一直 starting | WSL2 未运行、内存不足、残留进程 | 执行 wsl --shutdown,清理 Docker 进程,检查内存 |
| docker: Error response from daemon: Conflict. The container name is already in use | 已存在同名容器 | 换一个容器名,或先删除旧容器 docker rm -f <旧容器名> |
| 镜像下载慢或超时 | 网络到 Docker Hub 不稳定 | 配置镜像加速器,重启 Docker |
| 端口被占用导致容器启动失败 | 宿主机端口已被其他进程占用 | 换一个宿主机端口映射,比如 -p 3307:3306 |
| systemctl start docker 卡住不动 | 可能是 iptables 规则异常 | 执行 systemctl stop docker,清掉 iptables 规则后重启 |
9.2 一套通用的排查逻辑
当 Docker 出现异常时,不要慌乱一上来就重装,按这个顺序排查能解决 90% 的问题:
- 先看服务状态。Linux 下执行
sudo systemctl status docker,Windows 下看 Docker Desktop 的小鲸鱼图标是否稳定。 - 再看日志。Linux 下执行
sudo journalctl -xu docker,Windows 下 Docker Desktop 左侧菜单有 Logs 入口。 - 检查配置。近期改过
daemon.json或者 Docker Desktop 设置的话,回滚到上一个稳定版本试试。 - 检查系统资源。内存、磁盘空间不足,都会导致 Docker 启动失败或容器异常退出。
这套逻辑的核心思路是:先在“服务层”定位问题,再进“配置层”检查,如果这两个层都正常,下一步才考虑环境兼容性问题。
10. 实战扩展:用 Docker Compose 一键编排多服务
10.1 Compose 到底解决了什么问题
等你把单个容器跑熟了,很快就会遇到更复杂的需求:一个应用的依赖可能有 MySQL、Redis、Nginx,难道每次都要手动敲三条 docker run 命令吗?需要清理环境的时候,还要一条一条删除容器?
Docker Compose 就是来解决这个问题的。你只需要写一个 YAML 格式的 docker-compose.yml 文件,把需要运行的服务、端口、数据卷、网络全部声明在里面,然后执行一条命令就能“一键起全套、一键全停”。
10.2 一个同时跑 MySQL 和 Redis 的示例
下面这个例子放在 /opt/dev-stack/docker-compose.yml:
yaml复制version: "3.8"
services:
mysql8:
image: mysql:8.0
container_name: dev-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: app_db
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
redis7:
image: redis:7
container_name: dev-redis
restart: always
ports:
- "6379:6379"
volumes:
- ./redis-data:/data
进入到该文件所在目录,依次执行:
bash复制docker compose up -d
docker compose ps
docker compose logs -f
docker compose down
docker compose down 会停止并删除所有相关容器,但默认不会删除数据卷,所以挂载在宿主机上的数据依然保留。如果你想连数据卷一起清掉,要加上 -v 参数,这个操作要谨慎。
10.3 Compose 的常见坑
版本号不是必须写的,但如果写了,要注意格式。新版 Docker Compose 已经不再推荐使用 version: "3.8" 这段。不用 version 字段反而更符合主流习惯。
另一个坑是缩进。YAML 对缩进极其严格,必须使用空格,不能用 Tab。多一个空格、少一个空格,启动时直接报错。如果你第一次写 Compose 文件,建议用一个支持 YAML 校验的编辑器,能省掉很多低级错误。
11. 最后再说几个实用小技巧
装完 Docker 这么久了,有一些小习惯是我一直沿用的,分享给你:
善用 docker inspect 看细节。当你觉得容器某些行为不可用、不好理解时,docker inspect <容器名> 输出的是这个容器的完整 JSON 配置,包括 IP 地址、挂载信息、环境变量。排查问题最管用的命令之一。
给每个容器打上明确的名字。虽然 Docker 会自动生成像 priceless_curie 这种名字,但后面你会分不清哪个是哪个。养成 --name 的好习惯,对维护多容器环境非常有帮助。
磁盘空间要定期清理。开发机默认配置下,时间久了镜像、构建缓存、无用容器会吃掉大量磁盘空间。执行一次清理:
bash复制docker system prune -a
这个命令会清理所有未被使用容器引用的镜像和缓存,清完之后你会惊讶地发现腾出了好几个 GB。注意:它也会删掉所有停止状态的容器,所以使用前确认不需要的技术环境再执行。
不要在生产环境用 latest 标签。写镜像版本时,尽量具体到 mysql:8.0.36 这种明确的小版本号,而不是 mysql:latest。不然哪天拉取镜像时悄悄升级了大版本,你的应用可能就莫名奇妙地起不来了。
安装 Docker 只是万里长征的第一步,真正值钱的是后面这些反复验证过的方法论和避坑经验。希望你装的每一步都顺利,少走点弯路。
