Docker 通过容器化技术实现"一次构建,到处运行",解决了环境不一致、依赖冲突等传统部署痛点。相比虚拟机,容器共享宿主机内核,启动更快、资源占用更低。
Docker 是什么
Docker 是开源容器化平台,将应用及其依赖打包到标准化容器中,可在任何支持 Docker 的环境中一致运行。
核心价值
| 特性 | 说明 |
|---|
| 环境一致性 | 开发、测试、生产使用同一镜像 |
| 轻量高效 | 容器共享宿主机内核,启动秒级 |
| 隔离性强 | 容器间相互独立,互不干扰 |
| 可移植性好 | 跨平台兼容,支持各大云厂商 |
Docker vs 虚拟机
| 对比维度 | Docker 容器 | 传统虚拟机 |
|---|
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | MB 级 | GB 级 |
| 隔离级别 | 进程级 | 硬件级 |
| 镜像体积 | 小巧分层 | 庞大完整 |
核心概念
镜像(Image)
只读静态模板,包含运行应用所需的文件、配置、依赖。采用分层存储,多镜像共享基础层节省空间。
容器(Container)
镜像的可运行实例,启动时在镜像上层添加可读写层。容器本质是受限制的 Linux 进程。
仓库(Repository)
镜像存储分发服务。Docker Hub 为公共仓库,Harbor 为企业级私有仓库。
底层技术
Namespaces:隔离性
- PID:进程 ID 隔离
- NET:网络隔离(独立 IP、端口)
- MNT:文件系统隔离
- UTS:主机名隔离
- USER:用户权限隔离
cgroups:资源限制
限制容器 CPU、内存、网络带宽使用上限,防止资源抢占。
UnionFS:分层存储
支持将多个只读层叠加形成统一文件系统视图,实现分层复用和写时复制。
安装 Docker(Ubuntu 22.04)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
# 添加 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 配置软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证
sudo docker run hello-world
|
核心命令
镜像操作
1
2
3
4
5
| docker pull nginx:latest # 拉取镜像
docker images # 查看本地镜像
docker rmi nginx:latest # 删除镜像
docker save -o nginx.tar nginx # 保存镜像
docker load -i nginx.tar # 加载镜像
|
容器操作
1
2
3
4
5
6
| docker run -d -p 8080:80 --name my-nginx nginx # 创建并启动
docker ps # 查看运行容器
docker logs -f my-nginx # 查看日志
docker exec -it my-nginx /bin/bash # 进入容器
docker stop/start/restart my-nginx # 生命周期管理
docker rm my-nginx # 删除容器
|
Dockerfile 实战
1
2
3
4
5
6
| FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
EXPOSE 5000
CMD ["python", "app.py"]
|
构建与运行:
1
2
| docker build -t my-app:v1 .
docker run -d -p 5000:5000 --name my-container my-app:v1
|
数据持久化
1
2
3
4
5
6
7
8
| # 创建数据卷
docker volume create nginx-data
# 挂载数据卷
docker run -d -p 8080:80 -v nginx-data:/usr/share/nginx/html --name my-nginx nginx
# 查看数据卷
docker volume inspect nginx-data
|
进阶生态
| 工具 | 用途 |
|---|
| Docker Compose | 多容器应用编排 |
| Kubernetes | 容器集群管理 |
| Harbor | 企业级私有镜像仓库 |
适用场景
推荐使用:
- 应用打包部署
- 微服务架构
- CI/CD 自动化
- 开发环境快速搭建
不推荐使用:
- 需直接访问硬件的应用
- 极高安全性要求的场景
- 简单单机小应用
学习资源
Comments