构建
为了使用 Docker 构建一个 MySQL 5.7 服务,您需要遵循以下步骤:
- 安装 Docker(如果尚未安装) 首先,请确保您已安装了 Docker。 如果尚未安装,请访问 https://docs.docker.com/get-docker/ 进行安装。
- 拉取 MySQL 5.7 镜像 打开终端,并使用以下命令拉取 MySQL 5.7 的官方镜像:
docker pull mysql:5.7
- 运行 MySQL 容器 使用以下命令运行一个名为
mysql_server
的 MySQL 5.7 容器。这个命令将会设置一个名为MYSQL_ROOT_PASSWORD
的环境变量,以便于您可以通过 root 用户登录。记得将<your_password>
替换为您选择的密码。此外,容器的 3306 端口被映射到主机的 3306 端口,以便其他应用程序可以访问数据库服务。
docker run --name mysql_server -e MYSQL_ROOT_PASSWORD=<your_password> -p 3306:3306 -d mysql:5.7
- 通过命令行访问 MySQL 使用以下命令进入 MySQL 容器并连接到 MySQL 服务。将
<your_password>
更改为您在上一步中设置的密码。
docker exec -it mysql_server mysql -uroot -p<your_password>
完成以上步骤后,您现在可以在命令行中访问已经运行的 MySQL 5.7 服务。此外,其他应用程序也可以通过主机的 3306 端口访问该服务。
指定数据目录
要指定 MySQL 容器的数据目录,您需要在运行容器时使用 -v
参数将主机上的一个目录挂载到容器内的 /var/lib/mysql
目录。请按照以下步骤操作:
- 创建主机上的数据目录 在主机上创建一个新目录,用于存储 MySQL 的数据。例如,创建名为
mysql_data
的目录:
mkdir mysql_data
- 运行带有挂载卷的 MySQL 容器 使用以下命令运行一个名为
mysql_server
的 MySQL 5.7 容器。这个命令将会设置一个名为MYSQL_ROOT_PASSWORD
的环境变量,以便于您可以通过 root 用户登录。记得将<your_password>
替换为您选择的密码。此外,容器的 3306 端口被映射到主机的 3306 端口,以便其他应用程序可以访问数据库服务。同时,在运行命令时,请将<path_to_mysql_data>
更改为您在第一步中创建的mysql_data
目录的绝对路径。
docker run --name mysql_server -e MYSQL_ROOT_PASSWORD=<your_password> -p 3306:3306 -v <path_to_mysql_data>:/var/lib/mysql -d mysql:5.7
现在,MySQL 容器将使用主机上的 <path_to_mysql_data>
目录来存储数据。这将允许您更方便地备份、迁移或管理数据库文件。
命令行连接 mysql 实例
要通过命令行连接到运行中的 MySQL 实例,您需要使用 docker exec
命令以及 MySQL 的命令行客户端 mysql
。请按照以下步骤操作:
- 先确保您已经运行了一个名为
mysql_server
的 MySQL 5.7 容器,如前面的回答所示。 - 使用以下命令进入 MySQL 容器并连接到 MySQL 服务。将
<your_password>
更改为设置容器时使用的 root 用户密码。
docker exec -it mysql_server mysql -uroot -p<your_password>
当您执行此命令时,您将被提示输入 root 用户的密码。在成功输入密码后,您将会看到类似以下内容的输出,表示您已成功连接到 MySQL 服务:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.xx MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
现在,您可以在 mysql>
提示符下键入 SQL 命令来管理数据库。要退出 MySQL 客户端,只需键入 exit
或者 \q
并按回车即可。
laravel 连接 MySQL
要让 Laravel 应用程序连接到此 MySQL 容器,您需要执行以下步骤:
- 在 MySQL 中创建一个新的数据库和用户,并授予该用户适当的权限。首先,通过命令行连接到 MySQL 容器(如前面所述),然后运行以下 SQL 命令。记得将
<database_name>
、<username>
和<user_password>
替换为您选择的实际值。
CREATE DATABASE <database_name>;
CREATE USER '<username>'@'%' IDENTIFIED BY '<user_password>';
GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%';
FLUSH PRIVILEGES;
exit
- 配置 Laravel 应用程序以使用新创建的数据库和用户。找到 Laravel 项目目录中的
.env
文件并打开它。更新以下配置变量以匹配您在上一步中创建的数据库、用户名和密码,同时指定数据库主机为mysql_server
(或者 MySQL 容器的 IP 地址)和端口为3306
。
DB_CONNECTION=mysql
DB_HOST=mysql_server
DB_PORT=3306
DB_DATABASE=<database_name>
DB_USERNAME=<username>
DB_PASSWORD=<user_password>
完成以上步骤后,您的 Laravel 应用程序应已成功连接到 Docker 中运行的 MySQL 容器。请注意,要使这些设置生效,您可能需要重启 Laravel 服务。
不在同一台宿主机的连接
如果 Laravel 应用程序和 MySQL 容器不在同一台宿主机上,您可以通过 MySQL 实例宿主机的 IP 地址和映射到宿主机上的端口来连接。按照以下步骤进行操作:
- 确保 MySQL 容器的 3306 端口已经映射到宿主机的端口(例如,将容器的 3306 端口映射到宿主机的 3306 端口)。在运行 MySQL 容器时,使用以下命令(确保替换
<your_password>
):
docker run --name mysql_server -e MYSQL_ROOT_PASSWORD=<your_password> -p 3306:3306 -d mysql:5.7
- 获取运行 MySQL 容器的宿主机的 IP 地址。这可以是内网或外网 IP 地址,具体取决于您的网络设置以及 Laravel 应用程序和 MySQL 容器之间的连通性。
- 更新 Laravel 应用程序中的
.env
文件中的DB_HOST
设置,将其指向 MySQL 容器所在宿主机的 IP 地址。并确保其他数据库配置详细信息与您之前设置的一致:
DB_CONNECTION=mysql
DB_HOST=<mysql_host_IP_address>
DB_PORT=3306
DB_DATABASE=<database_name>
DB_USERNAME=<username>
DB_PASSWORD=<user_password>
- 要使这些设置生效,请确保重启 Laravel 服务。
完成以上步骤后,您的 Laravel 应用程序应已成功连接到位于另一个宿主机上的 Docker 中运行的 MySQL 容器。请注意,由于涉及到网络通信,可能需要配置防火墙规则以允许连接。
停止和启动 MySQL 实例
要停止运行中的 MySQL 容器,请使用 docker stop
命令。具体操作如下:
- 打开终端。
- 使用以下命令停止名为
mysql_server
的 MySQL 容器:
docker stop mysql_server
执行此命令后,名为 mysql_server
的 MySQL 实例将被停止。如果您想要重新启动该实例,请使用 docker start
命令:
docker start mysql_server