张芷铭的个人博客

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