非常感谢您对Docker的关注,下面我将为您详细介绍使用Docker搭建外部可以访问的Mysql数据库的完整攻略。
前提条件
在开始之前,请确保您的系统已经安装Docker和Docker Compose。
第一步:编写docker-compose文件
我们需要编写一个docker-compose文件来描述我们的容器集合、它们的映像和它们的关系。在这个例子中,我们将使用docker-compose.yml
文件来描述MySQL数据库和一个PHP应用程序的容器。docker-compose.yml
文件应该如下所示:
version: '3'
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_mysql_root_password
ports:
- "3306:3306"
web:
build: .
ports:
- "80:80"
depends_on:
- db
environment:
DB_HOST: db
这个docker-compose文件包含了两个服务:db
和web
。db
服务使用了官方的MySQL镜像,它会在Docker容器中启动MySQL,并将3306端口映射到本地宿主机上的3306端口。同时,web
服务则使用了Dockerfile构建镜像,将80端口映射到本地宿主机上的80端口,并且依赖MySQL数据库服务db
。其中,web
服务的DB_HOST
环境变量指向了db
服务,以便应用程序连接到MySQL数据库。
第二步:编写Dockerfile
接下来,我们需要在当前目录下创建一个Dockerfile
,并将以下代码复制到该文件中:
FROM php:apache
COPY . /var/www/html/
RUN docker-php-ext-install mysqli
这个Dockerfile会构建一个基于Apache和PHP的镜像,并将当前目录下的文件复制到容器中。同时,它会安装MySQLi PHP扩展,以便我们的应用程序能够连接到MySQL数据库。
第三步:启动服务
运行以下命令以启动服务:
docker-compose up -d
这个命令将启动我们在docker-compose文件中定义的所有服务,并且使用-d
标志使它们在后台运行。如果一切顺利,你会在浏览器中看到PHP应用程序的欢迎界面。
第四步:访问数据库
现在,我们需要在PHP应用程序中连接到MySQL数据库。打开PHP源代码中的config.php
文件,并将以下代码复制到该文件中:
connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
?>
这个PHP脚本将使用MySQLi PHP扩展连接到MySQL数据库。其中,DB_HOST
环境变量将从docker-compose.yml
文件中传递给应用程序,以便它可以连接到MySQL服务。
第五步:测试
现在,我们可以测试PHP应用程序是否可以连接到MySQL数据库。运行以下命令以创建一个新的MySQL数据库:
docker exec -it mysql -uroot -p
在进入MySQL shell之后,运行以下命令以创建一个新的MySQL数据表:
CREATE DATABASE your_database_name;
USE your_database_name;
CREATE TABLE persons (id int, name varchar(255));
INSERT INTO persons (id, name) VALUES (1, 'John Doe');
现在,我们可以在PHP应用程序中查询MySQL数据库。打开浏览器并访问以下网址:http://localhost
。如果一切正常,你将看到PHP应用程序中的“Hello World!”消息。
如果您跟着以上步骤,你已经成功地使用Docker搭建了一个外部可以访问的MySQL数据库,并与PHP应用程序连接。