结丹期

8. 如何管理 Docker 容器的网络?Docker 提供了哪些网络模式?

Docker 为容器提供了几种不同的网络模式,可以通过 docker network 命令管理和配置容器之间的网络连接。

主要的 Docker 网络模式有:

Bridge 网络(默认)

  • Docker 容器默认连接到一个桥接网络,它为每个容器分配一个虚拟网络接口,并通过 docker0 网桥与宿主机通信。多个容器可以在同一网络中相互通信。

  • 示例:docker run -d --network bridge myapp

Host 网络

  • 容器与宿主机共享网络栈,容器将使用宿主机的 IP 地址直接进行通信,减少网络延迟。

  • 示例:docker run -d --network host myapp

None 网络

  • 容器不连接到任何网络,仅用于需要手动配置网络的场景。

  • 示例:docker run -d --network none myapp

Overlay 网络

  • 用于跨主机的容器网络,通常用于 Docker SwarmKubernetes 集群中,允许多个主机上的容器通过一个逻辑网络进行通信。

  • 示例:在 Docker Swarm 中使用 docker network create --driver overlay my-overlay-network

Macvlan 网络

  • 容器可以直接分配物理网络的 MAC 地址,实现与宿主机物理网络的隔离。

管理 Docker 网络的常用命令

  • 创建网络:docker network create my-network

  • 查看网络:docker network ls

  • 查看容器网络信息:docker inspect container_name


9. 如何在 Docker 中持久化数据?如何使用 Docker Volume?

Docker 容器的文件系统是临时的,容器停止或删除后,数据将丢失。为了持久化数据,可以使用 Docker Volume 或绑定主机目录。

Docker Volume 是一种独立于容器的存储机制,允许容器重启或删除后,数据仍然保留在卷中。

创建并挂载 Volume 的示例

# 创建 Volume
docker volume create my-volume

# 使用 Volume 启动容器并挂载到 /data 目录
docker run -d -v my-volume:/data myapp
  • docker volume create my-volume:创建名为 my-volume 的数据卷。

  • -v my-volume:/data:将 my-volume 数据卷挂载到容器内的 /data 目录。

绑定主机目录的示例

docker run -d -v /host/data:/container/data myapp

将主机上的 /host/data 目录挂载到容器内的 /container/data 目录。这种方式便于与宿主机共享数据。

Volume 的优点

  • 容器独立性:卷与容器生命周期分离,即使容器删除,卷中的数据仍然保留。

  • 性能:与绑定主机目录相比,Volume 的性能通常更高,尤其是在 Docker 引擎和存储驱动优化的场景中。


10. Docker Compose 是什么?如何使用它来编排多个容器?

Docker Compose 是一个用于定义和运行多个容器的工具,通过 docker-compose.yml 文件,可以一次性配置和启动一组相关联的容器。

使用 Docker Compose 的基本步骤

  • 创建一个 docker-compose.yml 文件,定义多个服务。

  • 运行 docker-compose up 来启动所有定义的服务。

  • 使用 docker-compose down 停止并清理容器。

示例 docker-compose.yml 文件

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example
  • services 定义了两个服务:web(基于 nginx)和 db(基于 postgres)。

  • ports 指定了宿主机与容器的端口映射。

  • environment 用于设置环境变量。

运行 docker-compose up 命令后,web 服务和 db 服务将同时启动并运行。


11. 什么是 Kubernetes?它的核心组件有哪些?

Kubernetes 是一个用于自动化部署、扩展和管理容器化应用的开源平台,能够帮助管理大规模容器集群。

它提供了高可用、可扩展和自动化的应用部署和运维工具。

核心组件

  • API Server:提供 REST API 接口,负责集群管理的所有操作。

  • etcd:分布式键值存储,保存集群的所有配置数据和状态。

  • Controller Manager:负责监控集群状态,并确保集群始终处于预期状态。

  • Scheduler:将容器调度到合适的节点上运行。

  • Kubelet:在每个节点上运行,负责管理节点上的容器,并与 API Server 通信。

  • Kube-proxy:负责实现集群内的网络服务和负载均衡。

  • PodKubernetes 的最小部署单元,包含一个或多个容器。


12. Kubernetes 中的 Pod、Service 和 Deployment 有什么区别?

Pod

  • Kubernetes 中的最小部署单元,通常包含一个或多个容器,它们共享网络和存储资源。

  • Pod 是短暂的,可能会随时销毁并重建。

Service

  • 为一组 Pod 提供持久的网络入口,能够将请求负载均衡到 Pod 上,即使 Pod 动态变化,Service 也保持不变。

  • Service 可以通过 ClusterIPNodePortLoadBalancer 实现集群内部或外部的访问。

Deployment

  • 管理 Pod 的声明式更新,保证指定数量的 Pod 副本在集群中运行。

  • Deployment 提供滚动更新和回滚功能,可以安全地部署和更新应用。


13. 如何在 Kubernetes 中进行滚动更新和回滚?

Kubernetes滚动更新 允许应用程序逐步更新,而不中断服务。

旧的 Pod 会被逐个替换为新的 Pod,直到更新完成。若更新出现问题,可以通过 回滚 恢复到之前的版本。

滚动更新的步骤

  • 修改 Deployment 的镜像版本或其他配置。

  • Kubernetes 会逐步删除旧的 Pod 并创建新的 Pod,保持应用的可用性。

滚动更新示例

kubectl set image deployment/myapp myapp=nginx:latest

回滚的步骤

  • 如果新版本出现问题,可以使用以下命令回滚到之前的稳定版本。

    kubectl rollout undo deployment/myapp
    
  • 查看滚动更新状态。

    kubectl rollout status deployment/myapp
    

14. 如何在 Kubernetes 中管理和配置持久化存储(Persistent Volumes 和 Persistent Volume Claims)?

Kubernetes 中,持久化存储 允许 Pod 即使重启或迁移,也能保留数据。

Kubernetes 提供了 Persistent Volumes (PV)Persistent Volume Claims (PVC) 机制,用于管理存储资源。

Persistent Volume (PV)

  • 代表集群中的一块实际存储资源,可以由管理员创建或通过存储类动态创建。

  • PV 独立于 Pod 生命周期,可以被多个 Pod 使用。

Persistent Volume Claim (PVC)

  • Pod 通过 PVC 向集群请求存储,PVC 是对 PV 的申请和声明。

  • PVC 定义了所需的存储大小和访问模式,Kubernetes 会根据 PVC 绑定相应的 PV

示例

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  • PersistentVolumeClaim 请求了 1Gi 的存储资源,Kubernetes 会找到合适的 PV 并绑定。

results matching ""

    No results matching ""