PHP本地开发-使用minikube还是docker-compose?

3

我正在开发一个PHP应用程序 - 意味着在开发过程中,我只使用基础的php容器,而不复制任何应用程序代码。

我的docker-compose设置如下:

version: "3.3"
services:
    db:
        image: postgres:10.0
        container_name: app-db
        ports:
            - 65432:5432
        environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: secret

    web:
        image: falnyr/php-images:7.2-apache-postgres
        container_name: app-webserver
        volumes:
            - .:/var/www/html
        ports:
            - 8081:80

所以端口被转发到本地主机,并且卷被挂载。docker-compose.yml文件将被提交到仓库中,因此克隆代码的任何人都可以运行docker-compose up来使其运行。
转换到Kubernetes时,我希望仅针对开发保持相同的行为,因此通常具有以下规范的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  selector:
    matchLabels:
      app: php-app
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: php-app
        tier: backend
    spec:
      volumes:
      - name: src
        hostPath:
          path: /home/falnyr/projects/php-app
      containers:
      - name: php-app
        image: falnyr/php-images:7.2-apache-postgres
        volumeMounts:
        - mountPath: /var/www/html
          name: src
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 80

我非常清楚 volume 下的 hostPath 不支持相对路径,因为 Pod 不知道当前的工作目录。

我所需要做的就是提供一种方法,使所有开发人员只需拉取代码,运行一个命令,并使其运行起来。我可以想象这可以通过 makefile 处理,但如果有更简单的方法,我真的很想避免使用它。

问题是本地开发 PHP 应用程序的最佳实践方法是什么?我们应该坚持使用 docker-compose 还是改用带有 minikube 的 Kubernetes?


我认为PHP开发的最佳方法是避免使用容器,而是使用类似XAMPP的东西:https://www.apachefriends.org/ - Philipp Ludwig
2
我无法指出有多少理由反对使用XAMPP,你是来自哪个世纪的? - Jan Richter
我真的很想知道反对使用XAMPP的许多原因。 - Philipp Ludwig
3
您被绑定在主机设备上。那么,如果您同时在多个项目中使用不同版本的PHP呢?如果有自定义的PHP扩展呢?如果有Apache、MySQL和PHP以外的其他部分呢?比如Redis、Elasticsearch或者像Postgres这样的不同数据库?更不用提生产环境中需要与本地环境匹配的微服务了。如果您认为PHP世界只有WordPress、Joomla、Drupal等等,那就用XAMPP吧。但对于软件开发来说,它并不适用。 - Jan Richter
@falnyr 你目前使用makefile吗?或者你找到了其他的解决方案吗? - Alexey Prokhorov
2个回答

0

文档所述,您可以使用postStart脚本来设置您的依赖项:

spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]

在 section 命令中,您可以在容器中执行任何类型的脚本。

0

它是 PHP,真的重要吗?例如如果是 Python 是否会有所不同?

如果没有区别,那么你应该考虑 helm。这是一个 Kubernetes 的包管理器。只需执行 helm install package,它将安装所有依赖项以使您的完整应用程序运行。

使用 helm,我认为,您可以构建自己的定制图表。


这并没有解决hostPath问题,因为CWD是未知的。我仍然需要使用makefile或其他方式来构建值。 - Jan Richter
我的回答是关于如何为您的团队制作一个易于安装的应用程序。抱歉,你不能将它定义为一个变量,然后引用它吗? - suren
好的,唯一合理的方法就是使用makefile来找到当前工作目录(CWD),然后用它来填充配置值。 - Jan Richter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接