1、安装Docker Desktop
docker desktop官方下载链接,下载后一路点下来安装就好了。
2、制作本地镜像
跟着docker步骤制作镜像,需要先配置docker 镜像源,因为网络问题
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"debug": true,"dns": ["8.8.8.8","8.8.4.4"],"experimental": false,"features": {"buildkit": false},"insecure-registries": ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/"]
}
git clone https://github.com/docker/welcome-to-docker
cd welcome-to-docker
检查dockerfile,并执行
docker build -t welcome-to-docker .
制作好之后,images列表就有了:
3、在docker desktop运行镜像
在Images列表,找到镜像,点击三角形run,指定端口,就可用运行。
例如名字是hello-docker,端口是8090,运行后,就会在Containers中出现,可查看日志、执行命令。
3、开启Kubenetes
如果需要Kubenetes管理镜像,可用在docker desktop开启,因为网络原因,要从阿里云镜像源下载kubenetes的镜像。
clone k8s-for-docker-desktop 这个项目,找到 load_images.ps1
这个 powershell 文件,直接运行,
在powershell中执行
./load_images.ps1
如果没有权限,可用先执行
Set-ExecutionPolicy RemoteSigned
images.properties
文件中列到的镜像可以看到kubenetes的版本,注意要与Docker Desktop的相同。
这样就把kubenetes的镜像拉下来了。
然后点击设置,启用Kubenetes
Apply&Restart之后,左下角就看见Kubenetes running了。
4、在Kubenetes运行镜像
刚刚制作的镜像要在kubenetes运行,就需要一个k8s.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-docker-deployment # 部署的名称namespace: defaultlabels:app: hello-docker # 给资源打标签,便于筛选和管理
spec:replicas: 2 # 定义副本数量以确保高可用selector:matchLabels:app: hello-docker # 匹配 Pod 的标签,确保服务与 Pod 绑定template:metadata:labels:app: hello-docker # Pod 的标签,需与 selector 对应spec:containers:- name: hello-docker # 容器名称imagePullPolicy: Neverimage: welcome-to-docker:latest # 使用构建的镜像名称和标签,从远程仓库拉取镜像ports:- containerPort: 3000 # 容器内部监听的端口env:- name: FLASK_APPvalue: "app.py" # 设置 Flask 的主程序文件- name: FLASK_ENVvalue: "production" # 设置 Flask 的运行环境- name: PYTHONDONTWRITEBYTECODEvalue: "1" # 禁止生成 .pyc 文件- name: PYTHONUNBUFFEREDvalue: "1" # 设置 Python 日志为非缓冲模式resources: # 资源限制requests:memory: "128Mi" # 请求的最小内存cpu: "250m" # 请求的最小 CPUlimits:memory: "256Mi" # 最大允许使用的内存cpu: "500m" # 最大允许使用的 CPUlivenessProbe: # 存活探针,用于检测服务是否存活httpGet:path: "/" # 检测的路径port: 3000 # 检测的端口initialDelaySeconds: 5 # 初始延迟periodSeconds: 10 # 检测间隔readinessProbe: # 就绪探针,用于检测服务是否准备好接收流量httpGet:path: "/" # 检测的路径port: 3000 # 检测的端口initialDelaySeconds: 5 # 初始延迟periodSeconds: 10 # 检测间隔restartPolicy: Always # 容器策略:始终重启
---
apiVersion: v1
kind: Service
metadata:name: hello-docker-service # 服务的名称labels:app: hello-docker # 标签与 Deployment 一致
spec:selector:app: hello-docker # 匹配 Deployment 的标签ports:- protocol: TCPnodePort: 30008 # 可以省略,Kuberrnetes 会自动分配一个端口 范围 30000-32767port: 3000 # 服务暴露的端口targetPort: 3000 # 转发到容器的端口type: NodePort # 服务类型,NodePort 通过在每个 Node 上打开一个特定端口,将外部请求转发到集群内部的Service,进而达到后端的Pod
然后执行命令即可(这里本地运行的关键是yaml的 imagePullPolicy: Never,不然就要将镜像推送到docker仓库才行)
kubectl create -f k8s.yaml
因为k8s.yaml定义了30008端口映射3000,所以使用http://localhost:30008/访问即可:
参考资料:在 Docker Desktop 中启用 K8s 服务 - 墨墨墨墨小宇 - 博客园