我一直在使用Docker来容器化一个简单的PHP web应用程序,该应用程序连接到mySQL数据库并使用mySQL数据库从中提取数据。它还包括phpmyadmin作为数据库管理的UI。我已经设法在本地主机上使用Docker将其分解为3个容器,一个Apache web服务器容器、一个mySQL容器和一个phpmyadmin容器。我现在需要以工作负载的形式将这些容器部署到Rancher上,但我很难理解工作负载如何相互通信。
在Dockerfiles和php代码中,我可以引用相关容器的名称以便连接到它,例如php页面可以引用"mydb"容器的名称以连接到它($host=mydb容器名称(,并从数据库中提取数据,就像phpmyadmin Dockerfile一样,以便连接到mySQL服务器(PMA_host=mydb(。然而,在Rancher/kubernetes上,你不能在工作负载等方面做到这一点。有人能向我解释一下更改代码的方法吗?
我已经包含了一些代码,试图更清楚地描述我的问题。
SQL Dockerfile
FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD=mypassword1234
ENV MYSQL_DATABASE=MY_SQL_DATABASE
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=password
EXPOSE 9906
phpmyadmin Dockerfile
FROM phpmyadmin/phpmyadmin
ENV PMA_HOST=my-own-sql-container //(Here would be where the database container name is referenced.)
EXPOSE 8080
需要连接到mySQL容器的php脚本页面示例
$host = 'my-own-sql-container'; //Should it reference something on Rancher like the hostname of an ingress?
// Database use name
$user = 'root';
//database user password
$pass = 'mypassword1234';
// database name
$mydatabase = 'MY_SQL_DATABASE';
// check the mysql connection status
$conn = new mysqli($host, $user, $pass, $mydatabase);
if($conn->error){
echo "not connected".$conn->error;
}
为了进行基于DNS的服务发现,您可以在kubernetes中创建服务对象,这些对象引用pod并可用于连接到这些pod。
文件:https://kubernetes.io/docs/concepts/services-networking/service/