# 从Docker到K8S:一个容器化应用的完整演变

## 1. Docker vs K8S

在谈论Kubernetes(简称K8S)和Docker之间的关系之前,首先需要明确这两者是什么。Docker是一种轻量级的容器化技术,用于构建、打包和运行应用程序。而Kubernetes则是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。简而言之,Docker负责创建容器,而Kubernetes负责管理这些容器。

## 2. Docker和K8S的关系

下表展示了从Docker到K8S的完整演变过程:

| 步骤 | 描述 | 代码示例 |
| ------ | ----------------- | --------------------------------------- |
| 1 | 使用Docker构建应用 | `docker build -t myapp .` |
| 2 | 运行Docker容器 | `docker run -d myapp` |
| 3 | Docker容器打包 | `docker save -o myapp.tar myapp` |
| 4 | 启动K8S集群 | `minikube start` |
| 5 | 创建K8S Deployment | `kubectl create deployment myapp --image=myapp` |
| 6 | 创建K8S Service | `kubectl expose deployment myapp --port=80 --type=NodePort` |
| 7 | 扩展K8S应用规模 | `kubectl scale deployment myapp --replicas=3` |
| 8 | 更新K8S应用 | `kubectl set image deployment/myapp myapp=newimage` |

## 3. 代码示例解释

### 步骤1:使用Docker构建应用
```
docker build -t myapp .
```
这条命令会在当前目录下寻找Dockerfile文件,根据Dockerfile中的指令构建一个名为myapp的镜像。

### 步骤2:运行Docker容器
```
docker run -d myapp
```
这条命令会以后台模式运行名为myapp的镜像对应的容器。

### 步骤3:Docker容器打包
```
docker save -o myapp.tar myapp
```
这条命令将名为myapp的镜像打包为一个myapp.tar文件,方便导入到其他环境中。

### 步骤4:启动K8S集群
```
minikube start
```
这条命令会启动一个本地的Kubernetes集群,用于管理容器化应用。

### 步骤5:创建K8S Deployment
```
kubectl create deployment myapp --image=myapp
```
这条命令会在Kubernetes中创建一个名为myapp的Deployment,使用之前构建的myapp镜像。

### 步骤6:创建K8S Service
```
kubectl expose deployment myapp --port=80 --type=NodePort
```
这条命令会为myapp这个Deployment创建一个Service,将其暴露在80端口上。

### 步骤7:扩展K8S应用规模
```
kubectl scale deployment myapp --replicas=3
```
这条命令可以动态调整应用实例的数量,这里将myapp这个Deployment的实例数扩展为3。

### 步骤8:更新K8S应用
```
kubectl set image deployment/myapp myapp=newimage
```
这条命令可以用来更新应用的镜像版本,通过将myapp这个Deployment中的容器镜像版本更新为newimage。

通过以上的介绍和代码示例,相信你已经对Docker和Kubernetes之间的关系有了更清晰的认识。希望这篇文章能够帮助你更好地理解和使用这两种容器化技术。如果有任何疑问或者需要进一步的帮助,都可以随时联系我。祝你在容器化应用的道路上一帆风顺!