【问题标题】:Deploying a docker-compose app on Kubernetes on Docker for Windows在 Docker for Windows 上的 Kubernetes 上部署 docker-compose 应用程序
【发布时间】:2018-03-20 23:49:06
【问题描述】:

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

我正在使用适用于 Windows 的 Edge 版本的 Docker——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 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。

【问题讨论】:

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


    【解决方案1】:

    由于缺乏对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 的设置方式。

    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 .
    

    【讨论】:

    【解决方案2】:

    有一个项目:

    https://github.com/kubernetes/kompose

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

    【讨论】:

      【解决方案3】:

      按照官方的说明,我也遇到了同样的问题。

      为了绕过这个问题,我选择使用 kubectl 将 docker 镜像部署到本地 k8s,而不是使用 docker stack(似乎根本原因可能是 --orchestrator kubernetes 标志,它不起作用)。

      步骤如下:

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

        在Windows Powershell下运行&amp; 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

      【讨论】:

        【解决方案4】:

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

        有一些工具可以让你的生活变得简单。

        Move2Kube (https://github.com/konveyor/move2kube) 就是一个这样的工具。你可以这样做

        move2kube translate -s <folder containing the dockerfiles>
        

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

        【讨论】:

          猜你喜欢
          • 2020-07-22
          • 2021-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          • 1970-01-01
          相关资源
          最近更新 更多