我正在寻找最好的Kubernetes配置,以便能够在本地Kubernete环境中运行此命令(通过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安装命令完成,因此容器退出(。我知道pod有一个restartPolicy配置参数,但我不想为我的其他容器(web和应用程序(设置这个值。所以,最好只为composer创建一个单独的deployment.yml文件?
另一个选项(我保留到最后,因为我不是它的真正粉丝(是在我的php-fpm映像中安装composer。
干杯!
您应该构建一个包含应用程序代码的自定义Docker映像。composer install
命令应该在您的Dockerfile
中。当您构建要部署的应用程序的新版本时,您(或者更好的是,您的CI系统(需要docker build
一个新映像,docker push
它到注册表,然后更新Kubernetes部署对象中的版本标记。
"运行Docker容器"的Docker开发模式(其中映像只有语言运行时,应用程序代码实际上位于绑定安装的主机目录上(在Kubernetes或任何其他集群安装中都不起作用(出于类似的原因,人们在Docker Swarm中也很难做到这一点(。