docker 构建 mysql 服务101

构建

为了使用 Docker 构建一个 MySQL 5.7 服务,您需要遵循以下步骤:

  1. 安装 Docker(如果尚未安装) 首先,请确保您已安装了 Docker。 如果尚未安装,请访问 https://docs.docker.com/get-docker/ 进行安装。
  2. 拉取 MySQL 5.7 镜像 打开终端,并使用以下命令拉取 MySQL 5.7 的官方镜像:
   docker pull mysql:5.7
  1. 运行 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
  1. 通过命令行访问 MySQL 使用以下命令进入 MySQL 容器并连接到 MySQL 服务。将 <your_password> 更改为您在上一步中设置的密码。
   docker exec -it mysql_server mysql -uroot -p<your_password>

完成以上步骤后,您现在可以在命令行中访问已经运行的 MySQL 5.7 服务。此外,其他应用程序也可以通过主机的 3306 端口访问该服务。

指定数据目录

要指定 MySQL 容器的数据目录,您需要在运行容器时使用 -v 参数将主机上的一个目录挂载到容器内的 /var/lib/mysql 目录。请按照以下步骤操作:

  1. 创建主机上的数据目录 在主机上创建一个新目录,用于存储 MySQL 的数据。例如,创建名为 mysql_data 的目录:
   mkdir mysql_data
  1. 运行带有挂载卷的 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。请按照以下步骤操作:

  1. 先确保您已经运行了一个名为 mysql_server 的 MySQL 5.7 容器,如前面的回答所示。
  2. 使用以下命令进入 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 容器,您需要执行以下步骤:

  1. 在 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
  1. 配置 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 地址和映射到宿主机上的端口来连接。按照以下步骤进行操作:

  1. 确保 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
  1. 获取运行 MySQL 容器的宿主机的 IP 地址。这可以是内网或外网 IP 地址,具体取决于您的网络设置以及 Laravel 应用程序和 MySQL 容器之间的连通性。
  2. 更新 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>
  1. 要使这些设置生效,请确保重启 Laravel 服务。

完成以上步骤后,您的 Laravel 应用程序应已成功连接到位于另一个宿主机上的 Docker 中运行的 MySQL 容器。请注意,由于涉及到网络通信,可能需要配置防火墙规则以允许连接。

停止和启动 MySQL 实例

要停止运行中的 MySQL 容器,请使用 docker stop 命令。具体操作如下:

  1. 打开终端。
  2. 使用以下命令停止名为 mysql_server 的 MySQL 容器:
   docker stop mysql_server

执行此命令后,名为 mysql_server 的 MySQL 实例将被停止。如果您想要重新启动该实例,请使用 docker start 命令:

docker start mysql_server

发表评论