Docker 和 Kubernetes (K8s) 是当前最流行的容器化技术,用于开发、部署和管理应用程序。它们通常一起使用,提供从开发到生产的完整生命周期管理,特别是在微服务架构和云原生应用的开发中。
1. Docker简介
Docker 是一个开源的容器化平台,它可以将应用及其所有依赖项打包在一个统一的容器中,从而简化了软件的开发、部署、运行和管理。容器化应用具有跨平台、一致性强、启动速度快等特点。
- 容器:一个包含应用程序及其所有依赖的轻量级、可移植的单元。
- 镜像:容器的静态文件系统,定义了容器的运行时环境。
- Docker Engine:Docker 的运行时环境,用于构建、运行和管理容器。
- Docker Compose:用于定义和运行多容器应用的工具。
2. Kubernetes (K8s) 简介
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它帮助开发人员管理复杂的分布式应用程序,支持多种容器运行时(如 Docker、containerd 等)。
Kubernetes 提供了以下核心功能:
- 自动化部署:自动化容器应用的部署和升级。
- 服务发现:为应用提供自动化的负载均衡和服务发现。
- 自动扩展:根据负载自动扩展容器的副本数量。
- 故障恢复:确保容器始终处于预期状态,自动修复失败的容器。
- 存储管理:自动化持久存储的挂载和管理。
Docker 和 Kubernetes 的结合
通常情况下,Docker 被用于构建容器化的应用,而 Kubernetes 被用于部署和管理这些容器应用。Docker 提供了容器的创建与管理,而 Kubernetes 提供了容器的集群管理与调度。通过 Kubernetes,用户可以在多个主机上运行和管理 Docker 容器。
使用指南:配合命令介绍
1. Docker 使用指南
1.1. 安装 Docker
- 在 Linux(以 Ubuntu 为例)上安装 Docker:
sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce
1.2. Docker 常用命令
-
查看 Docker 版本:
docker --version
-
拉取 Docker 镜像:
docker pull ubuntu:latest
-
运行 Docker 容器:
docker run -d --name my-container ubuntu:latest
-
查看正在运行的容器:
docker ps
-
查看所有容器(包括已停止的):
docker ps -a
-
进入容器:
docker exec -it my-container bash
-
停止容器:
docker stop my-container
-
删除容器:
docker rm my-container
1.3. Docker Compose
Docker Compose 是一个工具,允许你通过配置文件 (docker-compose.yml
) 来定义和管理多容器应用。
-
启动多容器应用:
docker-compose up -d
-
停止并删除容器:
docker-compose down
2. Kubernetes 使用指南
2.1. 安装 Kubernetes(kubeadm 安装)
- 在 Linux 系统中安装 Kubernetes:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl
2.2. Kubernetes 常用命令
-
查看集群状态:
kubectl cluster-info
-
查看节点:
kubectl get nodes
-
创建部署(例如 Nginx 部署):
kubectl create deployment nginx --image=nginx
-
查看 Pod 状态:
kubectl get pods
-
暴露服务:
kubectl expose deployment nginx --port=80 --type=LoadBalancer
-
查看服务:
kubectl get services
-
删除 Pod:
kubectl delete pod nginx-pod
2.3. Kubernetes 重要概念
- Pod:Kubernetes 中的基本部署单元,可以包含一个或多个容器。
- Deployment:Kubernetes 中的一个控制器,用于管理应用程序的副本集,保证应用程序的期望状态。
- Service:暴露在集群内或外部访问的 Kubernetes 服务,可以为多个 Pod 提供负载均衡。
3. 结合 Docker 和 Kubernetes
当你将 Docker 容器化的应用部署到 Kubernetes 集群时,Kubernetes 会自动管理容器的调度、扩展、负载均衡和故障恢复等工作。以下是一个简单的例子,展示如何将 Docker 容器部署到 Kubernetes 集群:
-
创建 Docker 镜像并推送到 Docker Hub:
docker build -t your-dockerhub-username/your-image-name .
docker push your-dockerhub-username/your-image-nam -
在 Kubernetes 上部署应用: 创建一个 Kubernetes 部署文件
deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata:name: my-app spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-appimage: your-dockerhub-username/your-image-nameports:- containerPort: 80
然后,使用
kubectl
创建这个部署:kubectl apply -f deployment.yaml
-
暴露服务: 创建一个服务文件
service.yaml
:apiVersion: v1 kind: Service metadata:name: my-app-service spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer
然后应用这个服务:
kubectl apply -f service.yaml
总结
- Docker 用于容器化应用程序,并简化应用程序的构建、部署和管理。
- Kubernetes 用于大规模的容器编排,提供自动化部署、扩展和管理。
- Docker 和 Kubernetes 配合使用时,Docker 提供了容器的基础设施,Kubernetes 管理这些容器并确保应用的高可用性和可扩展性。
通过这两者的结合,开发人员和运维人员可以更加高效、灵活地管理和部署现代化应用。