Docker容器技术基础入门
Docker容器技术基础入门
第一章 容器技术演进与Docker定位
1.1 虚拟化技术演进路径
从物理机时代到虚拟机技术(Hypervisor-based Virtualization),再到容器化技术(Container-based Virtualization),计算资源利用率呈现指数级提升。传统虚拟机需要模拟完整硬件栈并运行独立操作系统内核,而容器通过Linux内核的命名空间(Namespaces)、控制组(Cgroups)和联合文件系统(UnionFS)实现进程级隔离。
容器技术的核心优势体现在:
- 资源利用率提升:容器共享宿主机内核,内存占用减少60%以上,启动时间缩短至毫秒级
- 环境一致性保障:通过镜像固化运行时环境,消除”在我机器上能运行”的问题
- 交付流程标准化:构建(Build)-运输(Ship)-运行(Run)的标准化流程
1.2 Docker技术架构解析
Docker采用Client-Server架构,核心组件包括:
- Docker Daemon:常驻后台进程,通过containerd管理容器生命周期
- Docker Client:提供CLI接口,通过REST API与Daemon交互
- Registry:镜像仓库服务(Docker Hub/私有仓库)
- Containerd:符合OCI标准的容器运行时
![Docker架构示意图]
(图示说明:用户通过Client发送指令,Daemon调用containerd创建容器运行时)
第二章 环境搭建与基础操作
2.1 多平台安装实践
Linux环境(以Ubuntu 22.04为例)
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 设置仓库
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 安装引擎
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
Windows环境
要求:
- Windows 10/11 64位专业版/企业版
- 启用Hyper-V和WSL2功能
- 安装Docker Desktop时自动配置虚拟化环境
2.2 核心对象操作指令
镜像管理
# 拉取镜像
docker pull nginx:alpine
# 构建镜像
docker build -t myapp:v1 -f Dockerfile .
# 镜像分析
docker image history nginx:alpine
docker image inspect nginx:alpine
# 清理策略
docker image prune -a --filter "until=24h"
容器生命周期
# 启动容器
docker run -d --name web -p 8080:80 -v /data:/usr/share/nginx/html nginx:alpine
# 执行命令
docker exec -it web sh
# 状态监控
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# 日志分析
docker logs --tail 100 -f web
第三章 镜像构建与优化
3.1 Dockerfile深度解析
# 多阶段构建示例
FROM golang:1.21 as builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp
FROM alpine:3.18
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
构建优化策略:
- 层级合并:合并RUN指令减少镜像层数
- 构建缓存:合理排序指令以利用缓存
- 最小化基础镜像:优先选择alpine、distroless等精简镜像
- 安全扫描:集成Trivy进行CVE漏洞检测
3.2 镜像分发实践
私有仓库部署方案:
# 启动Registry服务
docker run -d -p 5000:5000 --restart=always --name registry \
-v /data/registry:/var/lib/registry \
registry:2
# 镜像标记与推送
docker tag myapp:v1 localhost:5000/myapp:v1
docker push localhost:5000/myapp:v1
第四章 容器网络与存储
4.1 网络模型解析
Docker提供五种网络模式:
- bridge:默认NAT模式,通过docker0网桥通信
- host:直接使用宿主机网络栈
- none:无网络配置
- container:共享其他容器网络命名空间
- overlay:跨主机容器网络(Swarm模式)
自定义网络创建:
docker network create --driver=bridge --subnet=172.28.0.0/16 mynet
4.2 存储卷管理
持久化存储方案对比:
类型 | 数据生命周期 | 性能 | 适用场景 |
Bind Mount | 与宿主机同步 | 最高 | 开发环境代码热更新 |
Volume | 独立管理 | 高 | 生产环境数据库存储 |
tmpfs | 内存临时存储 | 极高 | 敏感数据临时处理 |
数据卷操作示例:
# 创建命名卷
docker volume create dbdata
# 挂载使用
docker run -d --name mysql -v dbdata:/var/lib/mysql mysql:8.0
第五章 容器编排进阶
5.1 Docker Compose实践
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- app
app:
build: ./backend
environment:
- DB_HOST=db
- DB_PORT=3306
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
db_data:
编排功能特性:
- 服务依赖管理(depends_on)
- 环境变量注入(environment)
- 资源限制(cpus/mem_limit)
- 健康检查(healthcheck)
5.2 生产环境最佳实践
- 安全加固:
- 启用用户命名空间映射(–userns-remap)
- 设置容器只读文件系统(–read-only)
- 限制能力(–cap-drop ALL –cap-add)
- 监控方案:
使用cAdvisor收集指标
docker run -d --name=cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-p 8080:8080 \
gcr.io/cadvisor/cadvisor:v0.47.0
- 日志管理:
run --log-driver=fluentd --log-opt fluentd-address=fluentd:24224
第六章 企业级应用场景
6.1 CI/CD流水线集成
典型Docker化流水线架构:
开发环境 -> Docker构建 -> 镜像扫描 -> 仓库推送 -> 蓝绿部署 -> 生产环境
GitLab CI示例:
stages:
- build
- test
- deploy
build_image:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy_prod:
stage: deploy
environment: production
script:
- docker-compose -f docker-compose.prod.yml up -d
6.2 云原生技术栈整合
Docker与Kubernetes集成架构:
Pod -> Sidecar容器 -> Service -> Ingress
↑
Docker Runtime
服务网格方案:
# 注入Istio边车
kubectl apply -f <(istioctl kube-inject -f deployment.yaml)