## 用K8S必须用Docker吗?

### 概述
Kubernetes(K8S)是一个用于自动部署、扩展和管理容器化应用程序的开源平台,而Docker是一种常用的容器化工具。在Kubernetes中,使用Docker作为容器运行时是常见的做法。虽然Kubernetes并不强制要求使用Docker,但由于Kubernetes本身对Docker提供了很好的支持,因此推荐在Kubernetes中使用Docker作为容器运行时。

### 流程概述

在使用Kubernetes时,通常会按照以下步骤进行:
1. 编写Dockerfile文件,定义容器的构建规则。
2. 使用Docker将应用程序打包成容器镜像。
3. 将镜像上传到容器镜像仓库。
4. 在Kubernetes集群中创建Pod和Deployment等资源,使用Docker镜像来运行应用程序。

下面将详细介绍每个步骤需要做的事情,以及对应的代码示例。

### 代码示例

#### 步骤1:编写Dockerfile文件
```Dockerfile
# 使用一个基础镜像作为基础
FROM ubuntu:latest

# 安装应用程序所需的依赖
RUN apt-get update && apt-get install -y \
apache2

# 设置容器启动时执行的命令
CMD ["apache2ctl", "-D", "FOREGROUND"]
```

#### 步骤2:使用Docker打包成容器镜像
```bash
# 使用Dockerfile构建镜像
docker build -t my-apache-app .
```

#### 步骤3:将镜像上传到镜像仓库
```bash
# 登录到Docker Hub或其他容器镜像仓库
docker login

# 将镜像推送到镜像仓库
docker push my-apache-app
```

#### 步骤4:在Kubernetes中创建资源
在Kubernetes中,可以通过YAML文件定义Pod和Deployment等资源。

##### Pod定义示例:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-apache-pod
spec:
containers:
- name: my-apache-container
image: my-apache-app
```

##### Deployment定义示例:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-apache-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-apache
template:
metadata:
labels:
app: my-apache
spec:
containers:
- name: my-apache-container
image: my-apache-app
```

### 结论

虽然Kubernetes并不强制要求使用Docker作为容器运行时,但由于Kubernetes对Docker提供了很好的支持,因此在实践中通常会使用Docker。通过上述步骤,我们可以将应用程序打包成Docker镜像,上传到镜像仓库,然后在Kubernetes中创建Pod和Deployment等资源,使用这些镜像来运行应用程序。希望本文能帮助您理解在Kubernetes中使用Docker的流程和方法。