1. 概述
本文将介绍如何在 Kubernetes 中部署 Docker 容器,并演示如何使用本地构建的 Docker 镜像。我们将使用 Minikube 来运行一个本地 Kubernetes 集群。
2. Dockerfile
要构建本地 Docker 镜像,首先需要一个 Dockerfile。为了简化演示,我们创建一个简单的 Dockerfile,其中只包含一个 echo
命令用于打印信息:
FROM alpine
CMD ["echo", "Hello World"]
这个文件非常基础,仅用于演示后续的 Minikube 操作。
3. docker-env 命令
第一种方式是使用 minikube docker-env
命令,将本地 Docker CLI 连接到 Minikube 内置的 Docker Engine。
✅ 步骤如下:
确保 Docker CLI 已安装:
$ docker version
输出应类似如下(显示客户端和服务端信息):
Client: Docker Engine - Community Version: 19.03.12 ... Server: Docker Engine - Community Engine: Version: 19.03.12 ...
获取连接 Minikube Docker 的环境变量:
$ minikube docker-env
输出类似:
export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://172.22.238.61:2376" export DOCKER_CERT_PATH="/home/user/.minikube/certs" export MINIKUBE_ACTIVE_DOCKERD="minikube"
执行命令连接 Minikube 的 Docker 引擎:
$ eval $(minikube -p minikube docker-env)
查看 Minikube 中已有的镜像:
$ minikube image ls --format table
输出示例:
|-----------------------------------------|---------|---------------|--------| | Image | Tag | Image ID | Size | |-----------------------------------------|---------|---------------|--------| | docker.io/kubernetesui/dashboard | <none> | 1042d9e0d8fcc | 246MB | | docker.io/kubernetesui/metrics-scraper | <none> | 115053965e86b | 43.8MB | | k8s.gcr.io/etcd | 3.5.3-0 | aebe758cef4cd | 299MB | | ... | ... | ... | ... | |-----------------------------------------|---------|---------------|--------|
使用本地的 Dockerfile 构建镜像:
$ docker build -t first-image -f ./Dockerfile .
创建 Pod 并使用该镜像:
$ kubectl run first-container --image=first-image --image-pull-policy=Never --restart=Never
查看日志确认运行结果:
$ kubectl logs first-container
输出应为:
Hello World
✅ 提示: 完成后建议关闭终端,避免 Docker CLI 仍连接到 Minikube 的 Docker 引擎。
4. Minikube Image Load 命令
第二种方法是先在本地构建镜像,然后使用 minikube image load
命令将其加载到 Minikube。
✅ 步骤如下:
在本地构建镜像:
$ docker build -t second-image -f ./Dockerfile .
将镜像加载到 Minikube:
$ minikube image load second-image
确认镜像是否加载成功:
$ minikube image ls --format table
创建 Pod 并运行该镜像:
$ kubectl run second-container --image=second-image --image-pull-policy=Never --restart=Never
查看日志确认输出:
$ kubectl logs second-container
输出应为:
Hello World
5. Minikube Image Build 命令
第三种方法更直接:使用 minikube image build
直接在 Minikube 中构建镜像。
✅ 步骤如下:
使用 Minikube 构建镜像:
$ minikube image build -t third-image -f ./Dockerfile .
创建 Pod 并运行该镜像:
$ kubectl run third-container --image=third-image --image-pull-policy=Never --restart=Never
查看日志确认输出:
$ kubectl logs third-container
输出应为:
Hello World
⚠️ 注意: minikube image build
实际上是将本地文件复制到 Minikube 虚拟机中并调用 Docker 构建,因此构建过程可能略慢于本地。
6. 总结
本文介绍了三种在 Minikube 中使用本地 Docker 镜像的方式:
方法 | 描述 | 适用场景 |
---|---|---|
docker-env |
将本地 Docker CLI 指向 Minikube 的 Docker Engine | 更灵活,适合熟悉 Docker CLI 的开发者 |
image load |
本地构建镜像后加载到 Minikube | 简单直接,适合已有本地镜像 |
image build |
直接在 Minikube 中构建镜像 | 无需本地 Docker,适合 CI/CD 场景 |
✅ 建议: 如果你已经习惯使用 Docker CLI,推荐使用 docker-env
;如果你希望避免本地依赖,可使用 minikube image build
。
如需进一步了解 Minikube 的镜像管理,可参考其官方文档:Minikube Image Commands。