在 Docker 上为 Windows 在 Kubernetes 上部署 docker-compose 应用程序
Deploying a docker-compose app on Kubernetes on Docker for Windows
我正在尝试按照 https://docs.docker.com/docker-for-windows/kubernetes/#use-docker-commands 上的说明进行 运行 一个针对 Docker 上的 kubernetes 的 docker-compose.yml 文件 Windows.
我正在为 Windows 使用 Docker 的 Edge 版本 -- 18.03.0-ce-rc4 -- 并且我启用了 kubernetes。
我在 https://docs.docker.com/compose/gettingstarted/#step-3-define-services-in-a-compose-file 使用 docker-compose 应用示例,即
version: '3.3'
services:
web:
build: .
ports:
- '5000:5000'
redis:
image: redis
此示例适用于 docker-compose build
和 docker-compose up
但是根据上面为 docker stack
链接的文档,我得到以下信息:
PS C:\dev\projects\python\kubetest> docker stack deploy --compose-file .\docker-compose.yml mystack
Ignoring unsupported options: build
Stack mystack was created
Waiting for the stack to be stable and running...
- Service redis has one container running
PS C:\dev\projects\python\kubetest> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d
redis ClusterIP None <none> 55555/TCP 8s
请注意,它不会创建 Web 服务以及 "ignoring unsupported options: build" 错误
我也尝试使用上面链接的文档中的示例 docker-compose.yml 文件,但它也没有用,出现完全不同的错误。
简而言之,按照文档,我无法将任何东西部署到 Docker 上的 kubernetes for Windows。
由于缺少对 build
的支持,web
服务容器将没有 image
到 运行。
Compose 可以在单个 Docker 主机上为您管理构建。由于 Swarm 和 Kubernetes 通常 运行 跨多个节点,image
应该引用网络上可用的注册表,以便所有节点都可以访问相同的图像。
Dockers stack deploy
example includes a step to setup a private registry 并将其用作图片来源:
services:
web:
image: 127.0.0.1:5000/stackdemo
解决方法
在这种情况下,由于 运行ning 在 Docker 实例,这取决于 Kubernetes 的设置方式。
version: '3.3'
services:
web:
build: .
image: me/web
ports:
- '5000:5000'
redis:
image: redis
在外部构建映像
docker-compose build web
或直接用 docker
:
docker build -t me/web .
我运行按照官方说明遇到了同样的问题
为了绕过这个问题,我选择使用 kubectl
将 docker 图像部署到本地 k8s 而不是使用 docker stack
(似乎根本原因可能是 --orchestrator kubernetes
标志,它不起作用)。
步骤如下:
每个终端使用 Kubernetes 的 docker 注册表(重要):
运行 & minikube docker-env | iex
在 Windows Powershell 下(iex
是 Invoke-Expression
的别名)
或
运行 eval $(minikube docker-env)
在 bash 环境下。
之后,运行 docker image ls
,确保您的 docker 注册表设置为 Kubernetes 的环境。 (您应该会在 'k8s.gcr.io' 域下看到一些默认图像。)
如果打开了多个终端,您可能需要在每个 终端中执行此操作。
重建您的 docker 图像:
运行 docker-compose -f /path/to/your/docker-compose.yml build
您的镜像应该出现在 K8s 的本地注册表中。
运行 你的头像 'kubectl':
运行 kubectl run hello-world --image=myimage --image-pull-policy=Never
参考文献:
有一个项目:
称为 Docker Kompose,它可以帮助已经拥有 docker-compose 文件的用户通过自动转换他们的文件,尽可能轻松地在 Kubernetes 上部署他们的应用程序现有 docker-将文件组合成许多 yaml 文件。
尽管可以按照建议在 kubernetes 中部署 docker compose yaml。最好创建正确的 kubernetes yaml 以部署在您的特定集群上。
有一些工具可以让您的生活变得简单。
一个这样的工具是 Move2Kube (https://github.com/konveyor/move2kube)。你可以做到
move2kube translate -s <folder containing the dockerfiles>
它可以创建部署应用程序所需的相关部署、服务、入口等。
我正在尝试按照 https://docs.docker.com/docker-for-windows/kubernetes/#use-docker-commands 上的说明进行 运行 一个针对 Docker 上的 kubernetes 的 docker-compose.yml 文件 Windows.
我正在为 Windows 使用 Docker 的 Edge 版本 -- 18.03.0-ce-rc4 -- 并且我启用了 kubernetes。
我在 https://docs.docker.com/compose/gettingstarted/#step-3-define-services-in-a-compose-file 使用 docker-compose 应用示例,即
version: '3.3'
services:
web:
build: .
ports:
- '5000:5000'
redis:
image: redis
此示例适用于 docker-compose build
和 docker-compose up
但是根据上面为 docker stack
链接的文档,我得到以下信息:
PS C:\dev\projects\python\kubetest> docker stack deploy --compose-file .\docker-compose.yml mystack
Ignoring unsupported options: build
Stack mystack was created
Waiting for the stack to be stable and running...
- Service redis has one container running
PS C:\dev\projects\python\kubetest> kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d
redis ClusterIP None <none> 55555/TCP 8s
请注意,它不会创建 Web 服务以及 "ignoring unsupported options: build" 错误
我也尝试使用上面链接的文档中的示例 docker-compose.yml 文件,但它也没有用,出现完全不同的错误。
简而言之,按照文档,我无法将任何东西部署到 Docker 上的 kubernetes for Windows。
由于缺少对 build
的支持,web
服务容器将没有 image
到 运行。
Compose 可以在单个 Docker 主机上为您管理构建。由于 Swarm 和 Kubernetes 通常 运行 跨多个节点,image
应该引用网络上可用的注册表,以便所有节点都可以访问相同的图像。
Dockers stack deploy
example includes a step to setup a private registry 并将其用作图片来源:
services:
web:
image: 127.0.0.1:5000/stackdemo
解决方法
在这种情况下,由于 运行ning 在 Docker 实例,这取决于 Kubernetes 的设置方式。
version: '3.3'
services:
web:
build: .
image: me/web
ports:
- '5000:5000'
redis:
image: redis
在外部构建映像
docker-compose build web
或直接用 docker
:
docker build -t me/web .
我运行按照官方说明遇到了同样的问题
为了绕过这个问题,我选择使用 kubectl
将 docker 图像部署到本地 k8s 而不是使用 docker stack
(似乎根本原因可能是 --orchestrator kubernetes
标志,它不起作用)。
步骤如下:
每个终端使用 Kubernetes 的 docker 注册表(重要):
运行
& minikube docker-env | iex
在 Windows Powershell 下(iex
是Invoke-Expression
的别名)或
运行
eval $(minikube docker-env)
在 bash 环境下。之后,运行
docker image ls
,确保您的 docker 注册表设置为 Kubernetes 的环境。 (您应该会在 'k8s.gcr.io' 域下看到一些默认图像。)如果打开了多个终端,您可能需要在每个 终端中执行此操作。
重建您的 docker 图像:
运行
docker-compose -f /path/to/your/docker-compose.yml build
您的镜像应该出现在 K8s 的本地注册表中。
运行 你的头像 'kubectl':
运行
kubectl run hello-world --image=myimage --image-pull-policy=Never
参考文献:
有一个项目:
称为 Docker Kompose,它可以帮助已经拥有 docker-compose 文件的用户通过自动转换他们的文件,尽可能轻松地在 Kubernetes 上部署他们的应用程序现有 docker-将文件组合成许多 yaml 文件。
尽管可以按照建议在 kubernetes 中部署 docker compose yaml。最好创建正确的 kubernetes yaml 以部署在您的特定集群上。
有一些工具可以让您的生活变得简单。
一个这样的工具是 Move2Kube (https://github.com/konveyor/move2kube)。你可以做到
move2kube translate -s <folder containing the dockerfiles>
它可以创建部署应用程序所需的相关部署、服务、入口等。