Linux 容器技术是现代应用部署和微服务架构的核心技术,Docker 和 Kubernetes 是最主流的容器解决方案。
Docker 基本概念:
- 镜像(Image):只读的文件系统模板,包含运行应用所需的所有依赖
- 容器(Container):镜像的运行实例,轻量级、隔离的运行环境
- 仓库(Repository):存储和分发镜像的地方,如 Docker Hub
- Dockerfile:用于构建镜像的文本文件
- Docker Compose:定义和运行多容器应用的工具
Docker 常用命令:
- 镜像管理:
- docker images:列出本地镜像
- docker pull image:拉取镜像
- docker build -t name .:构建镜像
- docker rmi image:删除镜像
- docker tag image newname:标记镜像
- 容器管理:
- docker run:运行容器
- docker ps:查看运行中的容器
- docker ps -a:查看所有容器
- docker stop container:停止容器
- docker start container:启动容器
- docker restart container:重启容器
- docker rm container:删除容器
- docker exec -it container /bin/bash:进入容器
- 容器操作:
- docker logs container:查看容器日志
- docker cp file container:/path:复制文件到容器
- docker cp container:/path file:从容器复制文件
- docker inspect container:查看容器详细信息
- docker stats:查看容器资源使用情况
Dockerfile 指令:
- FROM:指定基础镜像
- RUN:执行命令
- COPY:复制文件到镜像
- ADD:复制文件到镜像(支持解压缩和 URL)
- CMD:容器启动时执行的命令
- ENTRYPOINT:容器启动时执行的入口点
- ENV:设置环境变量
- ARG:构建时的变量
- EXPOSE:声明容器监听的端口
- VOLUME:声明挂载点
- WORKDIR:设置工作目录
- USER:设置运行用户
Docker Compose:
- 配置文件:docker-compose.yml
- 常用命令:
- docker-compose up:启动服务
- docker-compose down:停止并删除服务
- docker-compose ps:查看服务状态
- docker-compose logs:查看服务日志
- docker-compose exec service command:在服务中执行命令
- 配置示例:
yaml
version: '3' services: web: build: . ports: - "80:80" volumes: - ./data:/data environment: - ENV=value
Kubernetes 基本概念:
- Pod:最小的部署单元,包含一个或多个容器
- Node:运行 Pod 的物理或虚拟机
- Service:为 Pod 提供稳定的网络访问
- Deployment:管理 Pod 的副本和更新
- ReplicaSet:确保指定数量的 Pod 副本在运行
- StatefulSet:管理有状态应用
- DaemonSet:在每个节点上运行一个 Pod
- ConfigMap:配置数据
- Secret:敏感数据
- Namespace:资源隔离
- Ingress:HTTP/HTTPS 路由
Kubernetes 常用命令:
- 集群管理:
- kubectl cluster-info:查看集群信息
- kubectl get nodes:查看节点
- kubectl get namespaces:查看命名空间
- Pod 管理:
- kubectl get pods:查看 Pod
- kubectl describe pod podname:查看 Pod 详情
- kubectl logs podname:查看 Pod 日志
- kubectl exec -it podname /bin/bash:进入 Pod
- kubectl delete pod podname:删除 Pod
- Service 管理:
- kubectl get services:查看服务
- kubectl describe service servicename:查看服务详情
- Deployment 管理:
- kubectl get deployments:查看部署
- kubectl apply -f yaml:应用配置
- kubectl rollout status deployment/deploymentname:查看部署状态
- kubectl scale deployment/deploymentname --replicas=3:扩展副本数
Kubernetes 配置示例:
- Pod 配置:
yaml
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80 - Deployment 配置:
yaml
apiVersion: apps/v1 kind: Deployment metadata: name: mydeployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: mycontainer image: nginx ports: - containerPort: 80
容器网络:
- Docker 网络模式:
- bridge:默认模式,容器通过 Docker 网桥通信
- host:容器使用主机网络栈
- none:无网络
- container:共享另一个容器的网络
- Kubernetes 网络模型:
- Pod 网络:所有 Pod 在同一个扁平网络中
- Service 网络:为 Pod 提供稳定的 IP
- Ingress:外部访问入口
容器存储:
- Docker 存储驱动:overlay2、aufs、btrfs、zfs
- 卷(Volume):持久化存储
- 绑定挂载(Bind Mount):将主机目录挂载到容器
- Kubernetes 存储类(StorageClass):动态存储分配
- 持久卷(PersistentVolume):集群级别的存储资源
- 持久卷声明(PersistentVolumeClaim):用户对存储的请求
容器安全:
- 镜像安全:
- 使用官方镜像或可信镜像
- 定期更新镜像
- 扫描镜像漏洞
- 最小化镜像大小
- 运行时安全:
- 使用非 root 用户运行容器
- 限制容器资源
- 使用只读文件系统
- 限制容器能力
- Kubernetes 安全:
- RBAC:基于角色的访问控制
- Network Policy:网络策略
- Pod Security Policy:Pod 安全策略
容器编排最佳实践:
- 微服务架构:将应用拆分为多个微服务
- 健康检查:配置 liveness 和 readiness 探针
- 资源限制:设置 CPU 和内存限制
- 滚动更新:逐步更新应用,避免服务中断
- 自动扩缩容:根据负载自动调整副本数
- 配置管理:使用 ConfigMap 和 Secret 管理配置
- 日志收集:集中收集和分析容器日志
- 监控告警:监控容器和集群状态