如何在小型(Kubernetes)环境中运行作曲家安装

时间:2018-07-23 16:38:14

标签: docker kubernetes composer-php containers minikube

我正在寻找最佳的Kubernetes配置,以便能够在本地Kubernetes环境(通过Minikube)中运行此命令

composer install

我希望做的是类似docker版本的事情: 这将启动一个容器,运行composer install命令,然后再次删除该容器。

docker run --rm -i -t -v $(pwd):/app composer:latest composer install

这不起作用,因为kubectl没有安装卷的选项(这是指示项目的composer.json文件所必需的)

我现在要做的是,在Kubernetes deployment.yml文件中包括一个 composer容器配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-site
  labels:
    app: web
spec:
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        # The Application
        - name: api-app
          image: api_app:my_company
          volumeMounts:
            - name: shared-api-data
              mountPath: /var/www
          env:
            - name: DB_HOST
              value: "xx.xx.xx.xx"
            - name: DB_DATABASE
              value: "my_database"
            - name: DB_USER
              value: "my_database_user"
            - name: DB_PASSWORD
              value: "my_database_password"
        # The Web Server
        - name: api-web
          image: api_web:my_company
          volumeMounts:
            - name: shared-api-data
              mountPath: /var/www
          ports:
            - containerPort: 80
        # Composer
        - name: composer
          image: composer
          volumeMounts:
            - name: shared-api-data
              mountPath: /app
           args:
            - composer
            - install
      volumes:
        - name: shared-api-data
          hostPath:
            path: /var/www

我使用以下命令创建实际部署:

kubectl create -f deployment.yml

我一直在我的Minikube仪表板中看到此错误:“退避未能重新启动容器”(可能是因为composer install命令完成,因此容器退出了)。我知道Pod有一个 restartPolicy 配置参数,但是我不想为其他容器(Web和应用程序)设置此值。因此,最好只为作曲家创建一个单独的deployment.yml文件?

另一个选择(我一直坚持下去,因为我并不是真的那么喜欢它)是在我的php-fpm映像中安装composer。

干杯!

1 个答案:

答案 0 :(得分:1)

您应该构建一个包含应用程序代码的自定义Docker映像。 composer install命令应该在您的Dockerfile中。当您构建要部署的应用程序的新版本时,您(或者更好的是,您的CI系统)需要docker build新映像,docker push到注册表,然后更新Kubernetes部署对象中的版本标签。

“运行Docker容器”的Docker开发模式中,映像仅具有语言运行时,而应用程序代码实际上位于绑定安装的主机目录中,在Kubernetes或任何其他集群安装中,它并没有真正起作用(人们出于类似原因,在Docker Swarm中尝试执行此操作也遇到了麻烦。