2024年Stack Overflow开发者调查显示,Docker以57%的采用率稳居开发工具前三。但仍有大量开发者把它和虚拟机混为一谈——这个认知差每年吃掉团队数百小时。

容器不是轻量版虚拟机。虚拟机要虚拟整套硬件,容器只打包应用需要的代码、运行时和依赖。启动时间从分钟级压到秒级,内存占用砍掉九成。Docker官网给出的数据:典型容器启动时间小于1秒,而同等配置的虚拟机需要47秒。

这个差距在CI/CD流水线里会被放大几百倍。

安装验证:别在第一步栽跟头

安装验证:别在第一步栽跟头

Windows用户有个隐蔽的坑。Docker Desktop的Windows模式依赖Hyper-V,和WSL 2的Linux子系统体验差距明显——文件系统性能差3-5倍,网络栈也更绕。

推荐路径:启用WSL 2,在Ubuntu里跑Docker。验证命令很简单:

docker --version

docker compose version

两条命令返回版本号才算通关。只装Desktop不验证CLI,后续教程跟下来会遍地报错。

Linux用户更省事。官方提供一键安装脚本,但有个细节:装完必须把当前用户加入docker组,否则每条命令都要sudo。很多新手在这里反复摩擦,其实就一行:

sudo usermod -aG docker $USER && newgrp docker

四个核心概念:别急着敲命令

四个核心概念:别急着敲命令

Image(镜像)、Container(容器)、Registry(仓库)、Dockerfile——这四个词搞混了,后面全乱。

镜像只读,是容器的蓝图,类似编程里的类定义。容器是镜像的运行实例,可以批量生成。Registry是镜像的存储服务,Docker Hub是默认的公共仓库,企业通常自建私有Registry。Dockerfile是构建镜像的文本配方,每一行指令对应一层文件系统变更。

关键记忆点:镜像是死的,容器是活的;Registry是仓库,Dockerfile是菜谱。

跑通第一个容器:

docker run hello-world

Docker会检查本地有没有这个镜像,没有就自动去Hub拉取。看到"Hello from Docker"说明引擎正常,容器随即退出——这是设计行为,hello-world的使命就是验证环境。

交互式容器:你的第一个Linux沙盒

交互式容器:你的第一个Linux沙盒

加个参数就能进去操作:

docker run -it ubuntu bash

-it是-i(交互模式)和-t(分配伪终端)的合写。现在你在一个隔离的Ubuntu环境里,可以随意安装软件、改配置、搞破坏。exit退出后,容器停止运行,但文件系统变更默认保留。

想再启动同一个容器?用docker start + 容器ID。想彻底删掉?docker rm。容器和镜像的关系,就像进程和可执行文件——一个能跑多个,关了还能再开。

这里藏着Docker的设计哲学:把环境做成可丢弃的。开发环境崩了?删了重建,30秒恢复。传统做法里,配坏一台虚拟机可能要半天。

下一个问题:怎么把本地代码塞进去,让容器跑你的应用而不是别人的bash?