docker整合k8s的简单使用
- vicentz
- 0
- Posted on
简单的使用流程:
- 使用 Docker 构建镜像
- 将镜像推送到镜像仓库(如 Docker Hub 或私有仓库)
- 编写 Kubernetes YAML 文件(如 Deployment 和 Service)
- 在 Kubernetes 集群中部署应用
一、前提条件
在开始之前,请确保你已具备以下环境:
- 已安装 Docker
- 已安装 Kubernetes 集群(可以是本地的如 Minikube、Kind,或远程集群如 kubeadm 搭建的集群、EKS/GKE/AKS 等云服务)
- 已配置 kubectl 并能连接到你的 Kubernetes 集群
- (可选但推荐)拥有一个 Docker 镜像仓库账号(如 Docker Hub)
如果你只是本地测试,推荐使用 Minikube或 Kind快速启动一个本地 Kubernetes 环境。
二、步骤一:使用 Docker 构建镜像
假设我们有一个简单的 Web 应用,比如一个基于 Python Flask 的 “Hello World” 应用。
1. 项目结构示例
./k8s
├── deployment.yaml
└── service-nodeport.yaml
- deployment.yaml内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-docker-k8s-app
spec:
replicas: 2
selector:
matchLabels:
app: my-docker-k8s-app
template:
metadata:
labels:
app: my-docker-k8s-app
spec:
containers:
- name: app
image: 172.18.214.116:5000/hello-java-web:latest # 镜像为本地部署的registry私有仓库镜像
ports:
- containerPort: 8080
- service-nodeport.yaml内容:
apiVersion: v1
kind: Service
metadata:
name: my-k8s-app-service
spec:
type: NodePort
selector:
app: my-docker-k8s-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080 # 可选,范围 30000~32767
四、步骤三:部署到 Kubernetes 集群
1. 应用 Deployment
kubectl apply -f deployment.yaml
2. 应用 Service
kubectl apply -f service-nodeport.yaml
3. 检查资源状态
kubectl get pods
kubectl get deployments
kubectl get services
你应该能看到你的 Pod 处于 Running 状态,以及 Service 已创建,比如:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-docker-k8s-app-service NodePort 10.96.xxx.xxx <none> 80:30007/TCP 1m
可能会有

启动失败情况,可以查看日志进而解决:
kubectl describe pod my-docker-k8s-app-867554b74b-9bqxp
显示:

可以看到:
Failed to pull image “172.18.214.116:5000/hello-java-web:latest”: Error response from daemon: Get “https://172.18.214.116:5000/v2/”:
项目是从https仓库去拉取镜像,但是咱们是http的,所以需要进行处理一下,参考之前的文章:
Docker配置私有仓库+minikube拉取 – 简单的站
$ minikube ssh
$ sudo vi /usr/lib/systemd/system/docker.service
在ExecStart=的语句最后添加:--insecure-registry registry_ip:5000
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
处理后退出minikube的ssh,ctrl+D
删除原来的deployment:
kubectl delete pod my-docker-k8s-app-*
重新部署
kubectl apply -f deployment.yaml
kubectl apply -f service-nodeport.yaml
查看状态正常:

宿主机访问应用:
minikube ip

curl http://192.168.58.2:30080/hello

表示已经部署完毕, 但是此时宿主机的其他局域网机器无法访问需要做,端口转发或者nginx反向代理,此处使用端口转发:

k8s的端口内部规则为:
将 Pod 的 8080 → Service 的 80 → 映射到 Node(宿主机)的 30080 端口
需要使用 socat(简单、无需安装 nginx)
如果你的宿主机支持 socat,运行如下命令:
sudo socat TCP-LISTEN:30080,bind=0.0.0.0,fork TCP:192.168.58.2:30080
如果需要后台运行,需要执行:
sudo socat TCP-LISTEN:30080,bind=0.0.0.0,fork TCP:192.168.58.2:30080 &
如果你没有 socat?可以安装它:
sudo apt install socat

至此结束