
1. 从docker.io安装说起那些默默上车的组件们第一次在Ubuntu上安装Docker时很多人会习惯性地输入apt install docker.io。这个看似简单的命令背后其实悄悄安装了三个核心组件containerd.io、docker-ce和docker-ce-cli。这就好比买了个智能手机拆开包装发现里面还附赠了充电器和耳机——只不过在Docker的世界里这些配件每个都是能独立工作的狠角色。我刚开始接触Docker时就踩过坑。有次在测试环境用docker.io装完Docker后发现容器启动速度比生产环境慢很多。后来才发现生产环境用的是定制化安装只装了必要的containerd.io。这种差异让我意识到理解每个组件的职责有多重要。比如containerd.io就像汽车的发动机真正负责容器的生老病死docker-ce则是方向盘和仪表盘提供用户操作接口docker-ce-cli更像是变速箱把我们的命令翻译成引擎能听懂的语言2. 核心组件深度拆解2.1 containerd.io容器世界的无名英雄很多人不知道当你用docker run启动容器时实际干活的却是containerd。这个轻量级运行时最初是从Docker分离出来的现在已经成为Kubernetes等平台的默认容器运行时。它的架构非常精简containerd ├── runtime (runc) ├── storage (镜像管理) └── network (CNI插件)我在性能测试中发现直接使用containerd运行容器比通过Docker引擎节省约15%的内存开销。对于边缘计算等资源敏感场景这个差异非常关键。不过它的CLI工具ctr用起来比较原始需要适应# 查看镜像列表 ctr images ls # 运行容器 ctr run docker.io/library/nginx:alpine nginx-demo2.2 docker-ce与docker-ce-cli黄金搭档这对组合构成了我们最熟悉的Docker体验。有趣的是它们其实是分开更新的——这就解释了为什么有时候docker version会显示Client和Server版本不一致。在CI/CD流水线中我经常遇到这样的场景# 只更新CLI工具 apt install docker-ce-cli5:20.10.12~3-0~ubuntu-focal # 单独升级引擎 apt install docker-ce5:20.10.12~3-0~ubuntu-focaldocker-ce的核心是dockerd守护进程它做了很多锦上添花的工作提供REST API接口管理volume和网络处理镜像构建请求与containerd通信而docker-ce-cli则是我们每天都在用的docker命令。它的智能补全和人性化错误提示让容器操作变得异常简单。试比较# containerd方式 ctr tasks kill --signal SIGTERM nginx-task # Docker方式 docker stop nginx3. 插件生态功能扩展的秘密武器3.1 docker-buildx-plugin跨平台构建利器这个插件解决了我在ARM开发板上测试镜像的大麻烦。以前要构建多平台镜像得在不同机器上反复折腾。现在只需要docker buildx create --use docker buildx build --platform linux/amd64,linux/arm64 -t myapp .背后的原理很有趣它会自动创建QEMU仿真环境甚至能利用Kubernetes集群进行分布式构建。实测下来构建速度比传统方式快3-5倍。不过要注意几个参数# 查看支持的平台 docker buildx inspect --bootstrap # 限制内存使用(避免OOM) docker buildx build --memory 2g ...3.2 docker-compose-plugin开发者的效率神器从独立的docker-compose到现在的插件形式这个编排工具变得越来越无缝。我最喜欢它的profile功能可以按需启动服务services: frontend: profiles: [dev] redis: profiles: [prod]在微服务调试时这个特性帮我节省了大量时间。比如只需要启动前端相关服务docker compose --profile dev up4. 实战中的组件选择策略面对apt仓库里琳琅满目的Docker包我的经验法则是最小化安装原则生产环境可以只装containerd.iorunc开发环境全套装用docker.io一键安装最省心插件按需添加比如需要多架构构建再加buildx具体到版本选择有个小技巧是查看官方仓库的更新频率curl -s https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/ | grep containerd对于安全敏感的场景我会额外安装docker-scan-plugin。它能在CI流程中自动拦截高风险镜像docker scan --file Dockerfile --severity high myapp在资源受限的边缘设备上docker-ce-rootless是个好选择。配置时需要额外步骤dockerd-rootless-setuptool.sh install export DOCKER_HOSTunix:///run/user/1000/docker.sock