Docker 是一个开源的容器化平台,它可以把应用程序及其依赖项打包在一个轻量级、可移植的容器中运行,从而实现跨环境一致性部署。
典型应用场景:
- 微服务架构部署(如使用 Docker Compose)
- 持续集成/持续部署(CI/CD)
- 测试环境快速搭建
- 多版本软件运行(如不同版本的数据库或编译环境)
原理
Docker 是目前非常流行的容器技术,本质上是对 Linux 内核能力的一种封装,比如命名空间(Namespace)、控制组(Cgroups)、联合文件系统(UnionFS)等。
Docker 容器是运行在宿主 Linux 内核上的隔离进程,它模拟了一个“尽可能接近但受限的 Linux 用户空间”。他并没有像虚拟机里的操作系统如 ubuntu 一样去虚拟化模拟独立内核,只是文件系统和环境变量像 CentOS。
组件 | 作用 |
---|---|
Docker Client | 用户接口,接收命令如 docker run 等 |
Docker Daemon | 后台守护进程,负责创建、管理容器等 |
Docker Image | 容器的只读模板,基于层构建 |
Docker Container | 运行时实体,基于镜像 + 文件系统 |
(‘外驱’,‘内驱’,‘驱动对象’,‘存储驱动产物’)
Docker 利用 Linux 的 Namespace、Cgroups、UnionFS 实现进程级的隔离和资源控制,使得多个容器共享内核、快速启动、轻量运行。
- Namespace(命名空间)— 提供隔离
如容器有自己的网络栈,PID空间 - Cgroups(控制组)— 控制资源
限制和统计容器使用的系统资源,如 CPU、内存、磁盘、网络 等。 - UnionFS(联合文件系统)— 构建镜像
镜像是只读的,运行时会有“可写层”来存储产生的数据。
核心概念
镜像(Image)
类似于操作系统的“安装包”,是一个只读模板,包含运行容器所需的全部内容(代码、库、依赖等)。可以从 Docker Hub 等仓库拉取。
容器(Container)
镜像运行后的实例,是一个隔离的运行环境。容器之间互不影响,常用于部署微服务、测试等。
Dockerfile
构建镜像的脚本文件,定义了镜像构建过程中的各个步骤。
仓库(Registry)
用于存储和分发镜像,如官方的 Docker Hub。
优势
轻量级:相比虚拟机,Docker 容器共享宿主内核,启动快,占用资源少。
可移植性:在任何支持 Docker 的环境下运行相同的容器,避免“在我电脑上没问题”的问题。
一致性:开发、测试、生产环境保持一致,提高部署稳定性。
隔离性:每个容器运行在独立环境中,不会互相干扰。
自动化构建与部署:结合 CI/CD 工具,可以实现自动构建和持续部署。
常用命令示例
# 拉取镜像
docker pull ubuntu
# 运行一个容器
docker run -it ubuntu /bin/bash
# 查看正在运行的容器
docker ps
# 构建镜像
docker build -t myapp .
# 停止并删除容器
docker stop 容器ID && docker rm 容器ID