容器是一种操作系统级虚拟化技术,通过 Linux 内核的 namespace 和 cgroup 机制,将应用及其依赖打包在隔离的用户空间中运行。与虚拟机相比,容器共享宿主机内核,启动速度快、资源开销小,是现代开发和部署的基础设施。
核心概念
- 镜像(Image):只读的文件系统快照,包含应用代码、运行时、库和配置。通过 Dockerfile 定义构建步骤,分层存储以复用公共层。
- 容器(Container):镜像的运行实例,拥有独立的进程空间、网络和文件系统。容器是临时性的,销毁后数据不保留(除非使用 Volume)。
- 仓库(Registry):存储和分发镜像的服务,如 Docker Hub、GitHub Container Registry、阿里云镜像服务等。
主流容器运行时
| 工具 | 特点 | 适用场景 |
|---|---|---|
| Docker | 生态最成熟,工具链完善 | 通用开发和部署 |
| Podman | 无守护进程、rootless,兼容 Docker CLI | 安全敏感环境 |
| containerd | 轻量级运行时,Kubernetes 默认 | 生产集群 |
| nerdctl | containerd 的 Docker 兼容 CLI | containerd 用户 |
开发环境中的容器实践
容器在开发中的核心价值是环境一致性。通过 Dockerfile 或 docker-compose.yml 定义开发环境,新成员克隆仓库后即可启动完整的开发栈,无需手动安装依赖。
常见实践包括:
- 使用 VS Code Dev Containers 在容器内开发,IDE 功能完整保留
- 用 docker-compose 编排多服务(如应用 + 数据库 + 缓存)的本地开发环境
- CI/CD 流水线中使用容器保证构建环境与生产一致
相关笔记
- Docker 命令速查 - 常用 Docker 命令
- VSCode 容器环境最佳开发实践 - Dev Containers 工作流
- 开发环境隔离 - 环境隔离方案总览