乐闻世界logo
搜索文章和话题

Linux 容器技术(Docker、Kubernetes)的核心概念、常用命令和最佳实践有哪些?

2月17日 23:37

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 管理配置
  • 日志收集:集中收集和分析容器日志
  • 监控告警:监控容器和集群状态
标签:Linux