Docker 与 Kubernetes(K8s)初探

在现代软件开发中,DockerKubernetes(K8s) 已成为构建、部署和管理容器化应用的标准技术。Docker 使应用程序容器化,而 Kubernetes 提供了一个强大、可扩展的平台来管理这些容器。本篇文章将介绍 Docker 与 Kubernetes 的基本概念、它们的关系,以及如何使用它们来部署和管理应用程序。


1. 什么是 Docker?

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其所有依赖打包成 轻量级的、可移植的容器。这些容器可以在不同的环境中一致地运行,从开发到测试再到生产环境。

1.1 Docker 的主要特点

  • 轻量级:共享宿主机内核,避免虚拟机的额外开销。
  • 可移植性:一次构建,随处运行(Run Anywhere)。
  • 快速部署:启动容器的速度比虚拟机快得多。
  • 环境一致性:确保开发、测试、生产环境的一致性,避免"在我电脑上能跑"的问题。

1.2 Docker 的核心概念

  1. 镜像(Image):Docker 镜像是一个只读的模板,包含运行应用程序所需的所有依赖。
  2. 容器(Container):容器是镜像的运行实例,每个容器都是相互隔离的。
  3. Dockerfile:定义如何构建 Docker 镜像的文件。
  4. Docker Compose:用于定义和运行多容器应用的工具。

1.3 Docker 快速示例

1. 安装 Docker

在 Linux(Ubuntu)上安装 Docker:

bash 复制代码
sudo apt update
sudo apt install docker.io -y

在 macOS 或 Windows 上,可以通过 Docker Desktop 进行安装。

2. 运行 Hello World
bash 复制代码
docker run hello-world

这将拉取 hello-world 镜像并在容器中运行它。

3. 运行一个 Nginx 容器
bash 复制代码
docker run -d -p 8080:80 nginx

这将运行一个 Nginx 服务器,并将宿主机的 8080 端口 映射到容器的 80 端口


2. 什么是 Kubernetes?

Kubernetes(K8s) 是一个用于 自动化部署、扩展和管理容器化应用 的开源平台。它提供了容器编排(Container Orchestration),可以自动处理容器的运行、负载均衡、健康检查、滚动更新等功能。

2.1 Kubernetes 的主要特点

  • 自动化部署和扩展:Kubernetes 可以自动部署应用,并根据流量需求自动扩展或缩减容器数量。
  • 负载均衡:K8s 可以自动分配流量,确保应用的高可用性。
  • 自愈能力:如果某个容器崩溃,K8s 会自动重启它。
  • 滚动更新和回滚:可以逐步更新应用,而不会中断服务,并支持回滚。

2.2 Kubernetes 的核心概念

  1. Pod:Kubernetes 中的最小部署单元,通常包含一个或多个容器。
  2. Deployment:管理 Pod 的部署和更新。
  3. Service:提供负载均衡和网络访问。
  4. ConfigMap 和 Secret:用于存储配置信息和敏感数据。
  5. Ingress:管理外部流量访问 K8s 集群中的服务。

3. Docker 与 Kubernetes 的关系

Docker 主要用于 构建和运行容器 ,而 Kubernetes 主要用于 管理这些容器。它们的关系如下:

  • Docker 负责创建和运行单个容器。
  • Kubernetes 负责调度和管理多个容器的运行,确保它们能够高效工作。

换句话说,Docker 解决了 "如何创建和打包应用" 的问题,而 Kubernetes 解决了 "如何大规模运行和管理应用" 的问题。

Docker vs Kubernetes

特性 Docker Kubernetes
作用 容器化技术,用于打包和运行应用 容器编排系统,用于管理和扩展容器
主要功能 构建、分发和运行容器 自动化调度、扩展、负载均衡、自愈
适用场景 适用于开发和小规模部署 适用于生产环境、大规模集群管理

4. 使用 Kubernetes 部署 Docker 容器

4.1 安装 Kubernetes(minikube)

Kubernetes 的完整安装较为复杂,因此推荐使用 Minikube 进行本地测试。

1. 安装 Minikube
bash 复制代码
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
2. 启动 Minikube
bash 复制代码
minikube start

Minikube 会启动一个单节点 Kubernetes 集群。

3. 检查 Kubernetes 状态
bash 复制代码
kubectl get nodes

这将显示 Minikube 创建的 Kubernetes 节点。

4.2 创建 Kubernetes Deployment

使用 Kubernetes 部署一个基于 Docker 的应用。

1. 创建 Deployment
yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: mydockerhubusername/myapp:latest
        ports:
        - containerPort: 8080
2. 部署到 Kubernetes
bash 复制代码
kubectl apply -f deployment.yaml
3. 查看部署状态
bash 复制代码
kubectl get deployments
kubectl get pods

4.3 创建 Kubernetes Service

为了让外部访问我们的应用,我们需要创建一个 Service

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

部署 Service:

bash 复制代码
kubectl apply -f service.yaml
kubectl get svc

如果你在 Minikube 上运行,可以使用:

bash 复制代码
minikube service myapp-service

来打开服务的访问 URL。


5. Docker 与 Kubernetes 的最佳实践

  1. 使用 CI/CD 自动化构建和部署

    • 使用 JenkinsGitLab CI/CD,自动化构建 Docker 镜像,并部署到 Kubernetes。
  2. 优化 Docker 镜像

    • 使用 多阶段构建(Multi-stage Builds),减少镜像大小,提高安全性。
  3. 监控与日志管理

    • 使用 Prometheus + Grafana 监控 Kubernetes 集群。
    • 使用 ELK(Elasticsearch + Logstash + Kibana) 进行日志管理。
  4. 安全性

    • 使用 RBAC(基于角色的访问控制) 限制 Kubernetes 权限。
    • 定期使用 TrivyAnchore 扫描 Docker 镜像安全漏洞。

6. 总结

  • Docker 负责构建和运行容器 ,而 Kubernetes 负责管理和编排容器
  • Kubernetes 提供了自动化部署、扩展和负载均衡,适用于大规模生产环境。
  • 通过 Minikube 可以在本地快速体验 Kubernetes。
  • CI/CD 集成 可以帮助自动化构建、测试和部署 Docker 容器到 Kubernetes。

随着容器化技术的普及,Docker + Kubernetes 已成为云原生应用的标准架构。熟练掌握这两者的使用,将极大提升你的 DevOps 能力!🚀

相关推荐
kfhj2 小时前
DevOps与Docker的关系
运维·docker·容器·devops
丘陵哈哈13 小时前
Docker学习笔记
笔记·学习·docker
天机️灵韵15 小时前
无缝集成Docker与Maven:docker-maven-plugin实战指南
docker·自动化·maven
zkmall17 小时前
Docker与Kubernetes在ZKmall开源商城容器化部署中的应用
docker·kubernetes·开源
liux352817 小时前
k8s核心资源对象一(入门到精通)
docker·容器·kubernetes
原来4518 小时前
Docker Compose 常用命令 && 运行 docker-compose.yaml
运维·docker·容器
艾醒(AiXing-w)18 小时前
Linux系统管理(十九)——欧拉系统硬盘挂载、网络配置以及Docker环境安装
linux·网络·docker
Android小码家19 小时前
Docker与VNC的使用
运维·docker·容器
阿虎儿19 小时前
Docker私有部署指南
docker
m0_7311878820 小时前
centos练习docker<基础>
linux·docker·centos