我正在寻找最佳的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。
干杯!
答案 0 :(得分:1)
您应该构建一个包含应用程序代码的自定义Docker映像。 composer install
命令应该在您的Dockerfile
中。当您构建要部署的应用程序的新版本时,您(或者更好的是,您的CI系统)需要docker build
新映像,docker push
到注册表,然后更新Kubernetes部署对象中的版本标签。
“运行Docker容器”的Docker开发模式中,映像仅具有语言运行时,而应用程序代码实际上位于绑定安装的主机目录中,在Kubernetes或任何其他集群安装中,它并没有真正起作用(人们出于类似原因,在Docker Swarm中尝试执行此操作也遇到了麻烦。