我有2个Docker容器。一个包含tomcat服务器,另一个包含MySQL数据库。我想在单个容器上运行这些容器,因为tomcat必须访问MySQL数据库。
我尝试过的事情:
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-mysql-pod
labels:
app: tomcat-mysql-pod
spec:
containers:
- name: kubernetestomcatcontainer
image: suji165475/vignesh:tomcatserver
ports:
- containerPort: 8080
containers:
- name: kubernetesmysqlcontainer
image: suji165475/vignesh:latest
ports:
- containerPort: 3306
我使用
kubectl apply -f pod.yaml
然后我使用
kubectl expose pod tomcat-mysql-pod --type=NodePort --port=8080
当前,我只能使用https://serveripaddress:nodeport
访问tomcat主页,而不能使用https://serveripaddress:nodeport/data-core-0.0.1-SNAPSHOT
访问我的spring boot应用程序?
注意:使用docker-compose.yaml然后使用docker-compose up命令运行容器时,该应用程序可以正常运行并完美运行。但是,当我在kubernetes上运行它时,在启动我的war文件时,我在tomcat的管理器应用程序中得到了Catalina生命周期异常。
答案 0 :(得分:0)
YAML代码段中的containers:
行是集合的名称,应使用同一列上的短划线来枚举集合中的项目。
您应该尝试类似的操作
apiVersion: v1
kind: Pod
metadata:
name: tomcat-mysql-pod
labels:
app: tomcat-mysql-pod
spec:
containers:
- name: kubernetestomcatcontainer
image: suji165475/vignesh:tomcatserver
ports:
containerPort: 8080
- name: kubernetesmysqlcontainer
image: suji165475/vignesh:latest
ports:
containerPort: 3306
答案 1 :(得分:0)
不建议在同一容器中同时运行ui和数据库服务。这将使ui和db之间实现硬耦合。
最好在单独的Pod中运行ui和db。 UI可以使用服务dns通信mysql数据库。考虑在状态集中运行mysql以维持应用程序状态
答案 2 :(得分:0)
好吧,我为持久性卷和持久性卷声明创建了mysql状态集。运行此命令后,该Pod处于待处理状态,因为该Pod具有未绑定的立即PersistentVolumeClaims。我该如何解决此问题?
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: statefulset-mydb
spec:
serviceName: mydb-pod
template:
metadata:
labels:
name: mydb-pod
spec:
containers:
- name: mysql-database
image: suji165475/vignesh:latest
ports:
- containerPort: 3306
volumeMounts:
- name: volume-mydb
mountPath: /docker-entrypoint-initdb.d
volumes:
- name: volume-mydb
persistentVolumeClaim:
claimName: config-mydb
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: sfg-dev-mysql-pv-volume
labels:
type: local
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/data" //this is where my sql script is present
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: config-mydb
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
我使用以下docker文件构建了图像
FROM mysql
ENV MYSQL_ROOT_PASSWORD=root
ADD init.sql /docker-entrypoint-initdb.d
FROM picoded/tomcat7
COPY data-core-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/data-core-0.0.1-SNAPSHOT.war