学习容器化基于MySQL的服务器和PHPMyAdmin

414 阅读9分钟

容器化基于MySQL的服务器和PHPMyAdmin

MySQL是一个开源的关系型数据库管理系统(RDBMS),拥有庞大的用户群。你可以使用几个RDBMS来运行SQL查询,如MySQL、PostgreSQL、SQLite、SimpleDB和Elasticsearch。

有时,在你的本地计算机上设置一个SQL服务器会变得很忙。例如,假设你在Windows环境下工作,运行MySQL数据库服务器。在这种情况下,你必须下载像WAMP、MySQL workbench和XAMPP这样的软件来运行SQL命令,访问你的数据库和记录。

在你的本地系统中安装这些软件时,有可能会出现故障,比如由于支持这些程序的依赖关系和库而出现错误。这使得它很难,特别是对于初学者。

比方说,你安装一个MySQL服务器来运行SQL查询。即使这样,也很难指定需要哪个版本的MySQL。根据要求,你将不得不下载那个特定的版本,并在你的电脑上重新安装。

有了[docker],事情就变得简单一些。

这一次,你不需要安装所有的依赖性来建立一个MySQL服务器。Docker帮助你将这些依赖物容器化,因此你可以将它们作为容器运行。

Docker会执行某些指令,将应用程序容器化,建立一个特定的环境,并提供完全打包和容器化的应用程序,以及它们的依赖关系和库。在这里,我们可以指定要安装的MySQL服务器的版本。

使用Docker,你不需要安装和配置MYSQL环境来访问数据库和记录。相反,它为你提供了图像(官方软件),你用来在docker容器内运行应用程序,如PHPMyAdmin、Adminer和Sequel Pro(用于macOS)。

当你需要执行SQL查询时,你只需要设置一个dockeryml 文件,运行几个命令,docker就会为你设置好一切。因此,作为一个初学者,你可以在容器化环境中运行和使用SQL查询。

在本教程中,我们将学习如何对MySQL数据库服务器进行dockerize(创建一个docker镜像),并设置PHPMyAdmin或Adminer与MySQL数据库进行交互。

每当你对一个应用程序进行docker化时,你首先需要编写一个docker-compose 文件,并指定你想要容器化的实例以形成你的堆栈。

前提条件

作为一个先决条件,你必须下载Docker,这取决于你使用的操作系统。

一旦你安装,确保你在命令行中运行docker 。如果你没有错误,那么你就可以开始了。

用docker拉动MySQL

为了在docker中创建和测试数据库服务器,你要做的第一件事就是用这个简单的命令从Docker中心拉出一个MySQL镜像。

docker pull mysql:latest

docker pull 将通知Docker hub你想下载这个指定的镜像到你的本地docker引擎。

你可以看一下Docker hub中的[MYSQL镜像]。

MySQL服务器有不同的发布版本,每个版本都不同,与之前的版本不兼容。所以,你需要指定要下载的MYSQL的版本。

最好的做法是下载最新的稳定的MYSQL服务器版本。这就是为什么我们要在docker pull mysql 中添加latest 标志。如果你想下载一个特定的版本,那么你必须指定像docker pull mysql:8

然后,你可以运行docker images ,看到你从docker hub拉来的docker镜像的列表。就在那里,我们可以看到MySQL镜像现在可以用于我们本地安装的docker。

Docker images

创建一个MYSQL镜像容器

有了MySQL的docker镜像,我们现在可以创建一个容器来运行这个镜像。

要做到这一点,我们将运行以下命令。

docker run --name mysql_db -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypassword mysql:latest
  • docker run 将自动运行一个创建的docker容器。
  • --name mysql_db - 标志 将指示Docker创建一个名为 的容器。--name mysql_db
  • -d - 这个可选的标志代表了detouch模式。当包括在内时,MySQL数据库将作为一个docker demon在后台运行。
  • -p 3306:3306 - 这个端口号将把MySQL服务器映射到其默认端口,即 。3306
  • -e MYSQL_ROOT_PASSWORD = mypassword - 标志 ,代表环境变量。在这种情况下,我们需要一个根密码来访问MySQL服务器。我们将把根密码指定为一个环境变量。e
  • mysql:latest 指定我们想包含在这个容器中的镜像。这个镜像必须被下载/拉动并在本地docker中可用。

当你执行上面的命令时,一个容器将被创建,并有一个容器ID。如果你运行docker ps ,你可以看到创建的容器被分配到mysql_db

mysql db container

从容器中运行MySQL服务器

现在,我们将直接从我们创建的容器中执行MySQL服务器的恶魔。

我们将遵循下面的指示。

  • docker exec 将执行一个docker命令并将其直接指向指定的docker容器。
  • -it - 代表交互式, 代表终端。i t
  • mysql_db 指定你要执行的容器的名称。
  • /bin/bash 指定你想使用的shell。你甚至可以使用 或 。cmd PowerShell

在这种情况下,我选择使用git bash 。所以,要确保你的电脑中安装了git bash,这样/bin/bash 才能工作。

总结出来的单一命令将是。

docker exec -it mysql_db /bin/bash

A bash shell

我们现在可以连接到MySQL服务器,并使用SQL命令开始交互。我们可以使用环境变量中的密码来访问服务器。

要登录到服务器,我们需要一个用户名和密码。在这种情况下,用户名应该是默认的root ,密码应该是mypassword ,如下所示。

mysql -uroot -pmypassword
  • mysql 为MySQL服务器。
  • -uroot - 为默认的根用户名。
  • -pmypassword - 为设置的根密码。

你可以看到我们登录了MySQL服务器,并准备运行SQL命令。

Docker MySQL server

让我们在这里执行一个创建数据库的例子。

CREATE DATABASE my_test_db;

Docker create mysql database

就这样吧!你可以看到Query Ok 和受影响的行,表明查询已经正确执行。你可以使用查看可用数据库的列表。

SHOW databases;

Docker show databases

正如你所看到的,我们已经创建了my_test_db 数据库。

现在,你可以开始与这个数据库进行交互,并在其中执行MySQL查询。运行use my_test_db ,切换到数据库并执行查询,如。

  • 创建一个表。
CREATE TABLE users ( id int not null auto_increment, name varchar(225) not null, constraint pk_example primary key (id));
  • 向该表插入。
INSERT INTO users ( id, name ) VALUES ( null, 'Alexa' );
  • 从这个表中选择。
SELECT * FROM users;

MySQL server docker queries

从docker化的MySQL服务器环境中执行这些SQL查询是很直接的。

在上面的所有例子中,我们使用终端来运行这些查询。这对初学者来说可能有点困难。

我们将学习如何设置一个PHPMyAdmin来帮助你与服务器互动,并在不使用命令行的情况下执行查询。

使用PHPMyAdmin

方法1:连接MySQL和PHPMyAdmin容器

我们将创建一个额外的phpmyadmin 容器,然后将其与之前的mysql_db 容器连接。

docker pull phpmyadmin/phpmyadmin

在准备好图像后,我们现在可以创建一个容器来运行这个图像,并将其与mysql_db 容器连接起来。

要做到这一点,我们将遵循以下说明。

  • docker run 将自动运行一个已创建的docker容器。
  • --name phpmyadmin - 标志 将指示docker创建一个名为 的容器。--name phpmyadmin
  • -d - 这个可选的标志代表了detouch模式。当包括在内时,MySQL数据库将作为docker demon在后台运行。
  • -p 8068:80 - 这个端口号将映射PHPMyAdmin并使其可以通过浏览器访问。
  • --link mysql_db:db 将链接 容器到 。phpmyadmin mysql_db
  • phpmyadmin 指定我们想包含在这个容器中的图像。这个镜像必须被下载/拉动,并在本地docker中可用。
docker run --name phpmyadmin --link mysql_db:db -p 8068:80 -d phpmyadmin

现在,你可以打开浏览器,并使用http://localhost:8068/ 来访问PHPMyAdmin。这就加载了PHPMyAdmin页面。

你可以用用户名root ,密码mypassword 来登录。就像我们在创建mysql_db 容器时定义的那样。

A linked docker MySQL server and phpmyadmin

方法2:使用docker-compose旋转MySQL和PHPMyAdmin

要做到这一点,我们将设置一个docker-compose.yml ,设置MySQL服务器和PHPMyAdmin,并在一个容器中运行两者。

让我们继续创建一个样本文件夹。你可以使用你喜欢的文本编辑器,如[Visual Studio Code]。

然后我们将创建一个docker文件。

注意:将这个文件命名为Dockerfile

将这些MySQL说明添加到这个文件中。

FROM MySQL:latest
ENV MYSQL_DATABASE: my_db
ENV MYSQL_USER: my_password
ENV MYSQL_PASSWORD: secret
ENV MYSQL_ROOT_PASSWORD: secret
EXPOSE 3307:3307

在同一目录下,创建一个docker-compose.yml 文件。

我们将使用docker命令,而不是使用docker-compose来设置这个容器。

继续写MySQL和PHPMyAdmin的说明,如下所示。

version: "3.8"
services:
  mysql_db:
    build:
      context: .
      dockerfile: Dockerfile
    image: mysql:latest
    container_name: mysql
    restart: unless-stopped

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    restart: unless-stopped
    environment:
      PMA_HOST: mysql_db
    depends_on:
      - mysql_db
    ports:
      - "8080:80"

在你的终端上运行,docker compose up -d

这将下载在docker-compose.yml 文件中设置的任何额外的库,并将MySQL服务器与PHPMyAdmin一起旋转起来。标志-d 将在detouch模式下运行这个堆栈,也就是说,在后台。

现在,你可以通过在浏览器上执行localhost端口8080 ,即http://localhost:8080/ ,用PHPMyAdmin访问你的MySQL服务器。你可以使用相同的凭证登录,如前所述。

A localhost dockerized phpmyadmin

就这样,你已经准备好以更多的互动方式执行SQL查询。

作为PHPMyAdmin的替代品,也可以使用[Adminer]。Adminer最好的一点是,它很容易与各种关系型数据库兼容,如MySQL、SimpleDB、SQLite、PostgreSQL和Elasticsearch。

因此,你可以用Adminer服务替换下面的PHPMyAdmin服务。

adminer:
  image: adminer:latest
  restart: unless-stopped
  ports:
    - 8000:8080
  depends_on:
    - mysql_db
  environment:
    ADMINER_DEFAULT_SERVER: mysql_db

Adminer

提供用户名为root ,密码为secret ,与PHPMyAdmin相同。

A localhost dockerized adminer

总结

我们学到了一个安装和运行关系型数据库的简单方法。

这个方法也可以用于其他关系型数据库,如PostgreSQL。在这种情况下,你拉出一个[PostgreSQL镜像],并将其与[pgadmin4镜像]一起旋转,你将能够在容器中同样运行它。

在这篇文章中,我们已经看到了如何使用Docker来容器化和运行MySQL服务器。我们已经简化了安装、配置和运行数据库的整个过程。