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沙盒
加个参数就能进去操作:
docker run -it ubuntu bash
-it是-i(交互模式)和-t(分配伪终端)的合写。现在你在一个隔离的Ubuntu环境里,可以随意安装软件、改配置、搞破坏。exit退出后,容器停止运行,但文件系统变更默认保留。
想再启动同一个容器?用docker start + 容器ID。想彻底删掉?docker rm。容器和镜像的关系,就像进程和可执行文件——一个能跑多个,关了还能再开。
这里藏着Docker的设计哲学:把环境做成可丢弃的。开发环境崩了?删了重建,30秒恢复。传统做法里,配坏一台虚拟机可能要半天。
下一个问题:怎么把本地代码塞进去,让容器跑你的应用而不是别人的bash?
热门跟贴