在Docker for Windows上的Kubernetes上部署docker-compose应用程序

时间:2018-03-20 23:49:07

标签: docker kubernetes docker-compose docker-for-windows

我正在尝试按照https://docs.docker.com/docker-for-windows/kubernetes/#use-docker-commands上的说明在Docker for Windows上针对kubernetes运行docker-compose.yml文件。

我使用的是Docker for Windows的Edge版本 - 18.03.0-ce-rc4 - 我启用了kubernetes。

我在https://docs.docker.com/compose/gettingstarted/#step-3-define-services-in-a-compose-file使用示例docker-compose app,即

version: '3.3'
services:
  web:
    build: .
    ports:
      - '5000:5000'
  redis:
    image: redis

此示例适用于docker-compose builddocker-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服务,以及“忽略不受支持的选项:构建”错误

我也尝试在上面链接的文档中使用示例docker-compose.yml文件,但它也没有用,但错误完全不同。

简而言之,通过遵循文档,我无法在Docker for Windows上部署到kubernetes。

4 个答案:

答案 0 :(得分:3)

由于缺少对build的支持,因此image服务容器不会运行web

Compose可以在单个Docker主机上管理您的构建。由于Swarm和Kubernetes通常在多个节点上运行,因此image应引用网络上可用的注册表,以便所有节点都可以访问同一图像。

Dockers stack deploy example包含setup a private registry的步骤,并将其用于图片来源:

services:
  web:
    image: 127.0.0.1:5000/stackdemo

解决方法

在这种情况下,由于在一个Docker实例下运行的所有内容,可能可以手动构建映像并引用该映像名称,这取决于Kubernetes的设置方式。< / p>

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 .

答案 1 :(得分:2)

有一个项目:

  

https://github.com/kubernetes/kompose

称为 Docker Kompose ,可通过将现有的docker-compose文件自动转换为许多yaml文件来帮助已拥有docker-compose文件的用户尽可能轻松地在Kubernetes上部署其应用程序。

答案 2 :(得分:0)

按照官方指示我遇到了同样的问题。

要绕过此问题,我选择使用kubectl来将docker映像部署到本地k8,而不是使用docker stack(似乎根本原因可能是--orchestrator kubernetes标志,它不是工作)。

以下是步骤:

  1. 在每个终端上使用Kubernetes的Docker注册表(重要)

    在Windows Powershell下运行& minikube docker-env | iexiexInvoke-Expression的别名)

    在bash环境下运行eval $(minikube docker-env)

    然后,运行docker image ls,确保将您的Docker注册表设置为Kubernetes的env。 (您应该在“ k8s.gcr.io”域下看到一些默认图片。)

    如果打开了多个终端,则可能需要在每个终端中执行此操作。

  2. 重建您的Docker映像

    运行docker-compose -f /path/to/your/docker-compose.yml build

    您的图片应显示在K8s的本地注册表中。

  3. 使用“ kubectl”运行图像

    运行kubectl run hello-world --image=myimage --image-pull-policy=Never

参考文献:

https://stackoverflow.com/a/48999680/4989702

答案 3 :(得分:0)

尽管可以按照建议在kubernetes中部署docker compose yamls。最好创建正确的kubernetes yaml以部署在您的特定群集上。

有一些工具可以使您的生活变得简单。

此类工具之一就是Move2Kube(https://github.com/konveyor/move2kube)。你可以做

move2kube translate -s <folder containing the dockerfiles>

它可以创建部署您的应用程序所需的相关部署,服务,入口等。