网站搜索

如何使用 Docker Compose 安装 phpMyAdmin


轻松使用 Docker 启动并运行 phpMyAdmin — 我们的指南提供了快速、顺利设置的所有要素。

二十多年来,phpMyAdmin 一直是管理 MySQL 和 MariaDB 数据库的首选解决方案。

它是一个用 PHP 编写的免费开源工具,允许用户处理各种数据库活动,例如创建、修改和删除数据库;管理表、字段和索引;执行SQL语句;通过方便的基于 Web 的界面管理用户和权限。

但是,要安装它,您需要安装 PHP 并使用 Web 服务器配置 php-fpm 支持,无论是 NGINX、Apache 还是其他服务器。幸运的是,Docker 简化了这个过程,使您能够在几分钟内快速设置 phpMyAdmin。这使您可以立即专注于管理 MySQL/MariaDB 数据库,而不必陷入初始设置的困境。

本指南将引导您使用 Docker Compose 设置 phpMyAdmin 容器,并涵盖每个场景,以确保它与您的 MySQL/MariaDB 数据库正确连接。那么,让我们开始吧!

先决条件

在继续安装之前,请确保您的系统上已安装 Docker。但如果你没有,也不要害怕;以下任何指南都将帮助您快速获得它。在以下链接之一中选择您正在使用的发行版:Ubuntu 24.04、Debian 12、Arch、Alma/Rocky、Fedora、Linux Mint 22、Pop!_OS 22.04 或 Raspberry Pi OS。

另一个重要组件是 Docker Compose。最近的 Docker 版本现在通过安装“docker-compose-plugin”包来包含 Docker Compose。因此,如果您的设置中尚未安装它,请安装它。

但是,如果您愿意,可以使用下面的两个命令单独获取它。在这种情况下,请记住,运行该工具时,输入“docker-compose”而不是“docker compose”。 ”

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

一起运行 phpMyAdmin 和 MySQL 容器

当 MySQL 通过附带的 phpMyAdmin 容器启动来管理数据库时,这是最常见的情况。为此,第一步是创建将放置 Docker Compose 部署文件的项目目录。

然后切换到它;从现在开始,您需要从该位置执行本指南中的所有命令。

mkdir phpmyadmin
cd phpmyadmin

创建一个名为“docker-compose.yml”的文件。该文件将为我们的 phpMyAdmin 和 MySQL 实例定义服务和卷,告诉 Docker 要做什么以及如何设置部署。

打开您最喜欢的文本编辑器并将以下内容粘贴到其中:

nano docker-compose.yaml
services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=0
      - PMA_HOST=db
    restart: unless-stopped
    depends_on:
      - db
  db:
    image: mysql:latest
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
    restart: unless-stopped
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

如您所见,部署非常简单。它涉及运行两个容器:一个用于 MySQL 服务器,另一个用于 phpMyAdmin 应用程序本身。让我们回顾一下关键设置。

将“PMA_ARBITRARY”设置为 0 会删除在 phpMyAdmin 登录屏幕上输入自定义主机的选项。这是因为我们使用特定的预定义“db”来连接 phpMyAdmin 容器。

“phpmyadmin”服务部分中最重要的部分是“PMA_HOST”。它指定 phpMyAdmin 应连接的 MySQL 服务器的主机名。

然而,在我们的设置中,由于 MySQL 在同一 Docker 部署中作为另一个容器运行,因此我们通过引用其服务名称来连接它,我们将其设置为“db”。

在部署 MySQL 服务器的“db”服务器部分中,请务必将“MYSQL_ROOT_PASSWORD”选项的值更改为安全选项。当然,我们还通过创建命名的Docker卷来保证MySQL数据的持久性。

我们都准备好了!键入以下命令在后台启动并运行容器:

docker compose up -d

Docker 镜像将开始下载。您应该会看到类似于下图的屏幕,通知您 phpMyAdmin/MySQL 安装已成功部署,并且容器已启动并正在运行。

现在,打开浏览器并导航到“http://localhost:8080”或“http://:8080”。您应该看到 phpMyAdmin 登录页面。

要登录,请使用 Docker Compose 文件中定义的用户名“root”和密码作为“MYSQL_ROOT_PASSWORD”选项的值。就是这样! phpMyAdmin 将连接到 MySQL 实例并准备好为您服务。

但是,根据您的需求,现在让我们看看您可能遇到的其他一些 phpMyAdmin 用例。

将 phpMyAdmin 连接到主机上安装的 MySQL

但是,如果您的 MySQL/MariaDB 服务器直接安装在主机上而不是部署为 Docker 容器怎么办?在这种情况下,phpMyAdmin 容器无法直接看到它,因为它位于单独的 Docker 网络上,与主机网络隔离。

因此,为了将 phpMyAdmin 连接到本地安装的 MySQL,我们需要在 phpMyAdmin 和 MySQL 端进行一些额外的配置。最终 phpMyAdmin 的“docker-compose.yml”文件应如下所示:

services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - 8080:80
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - PMA_ARBITRARY=0
      - PMA_HOST=host.docker.internal
    restart: unless-stopped

这里的关键部分是“host.docker.internal:host-gateway”选项。这是 Docker 识别的特殊 DNS 名称。它解析为路由到主机的 IP 地址,当您需要容器来访问主机上运行的服务时,它特别有用。更多相关内容——这里。

此外,对于“PMA_HOST”选项,请指定此 Docker 特定的 DNS 名称“host.docker.internal”。

在 MySQL 端,确保“bind-address”选项设置为“0.0.0.0”而不是“127.0.0.1”在 MySQL 配置文件中。这允许 MySQL 接受来自任何 IP 地址的连接。

进行更改后,请记住重新启动 MySQL 服务器以确保更改生效。您可以运行以下命令来验证一切设置是否正确。检查输出以查看 MySQL 行是否显示“0.0.0.0”。

netstat -tulnp

现在,使用命令“docker-compose up -d”启动 phpMyAdmin 容器,并使用 MySQL 服务器的 root 帐户登录。

要成功连接,请确保 root 用户或您用于通过 phpMyAdmin 连接到 MySQL 服务器的任何其他用户已启用远程连接权限。有关如何管理 MySQL 用户的更多详细信息,请查看我们有关该主题的指南。

重要提示:上述设置将使您的 MySQL 服务器可以从互联网或外部网络访问。这通常不安全,并且是一种糟糕的安全做法。

为了防止未经授权的访问尝试,设置防火墙非常重要,该防火墙仅允许来自特定的连接网络(例如您的内部网络)会阻止所有其他网络。

将 phpMyAdmin 连接到现有 MySQL 容器

最后一个场景是当我们已经部署了 MySQL/MariaDB 容器并希望添加 phpMyAdmin 来通过方便的图形界面管理我们的数据库时。要实现这一目标,只需满足一个条件 - 两个容器必须共享相同的 Docker 网络(彼此可见)。

因此,首先,我们必须创建两个容器将共享的 Docker 网络。您可以通过执行以下命令轻松创建一个名为“mysql_network”的网络:

docker network create mysql_network

要显示可用 Docker 网络的列表,请运行以下命令:

docker network ls

现在,停止 MySQL 容器并通过添加服务部分来修改其部署:

networks:
  - mysql_network

并在其末尾定义网络。最终版本应该与此类似:

services:
  db:
    image: mysql:latest
    container_name: mysql
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: mypassword
    ports:
      - 3306:3306
    restart: unless-stopped
    networks:
      - mysql_network

volumes:
  dbdata:

networks:
  mysql_network:
    name: mysql_network
    external: true

对 phpMyAdmin 容器也执行相同的操作,当然,请确保在“PMA_HOST”选项中正确指定 MySQL 服务名称:

services:
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=0
      - PMA_HOST=db
    restart: unless-stopped
    networks:
      - mysql_network

networks:
  mysql_network:
    name: mysql_network
    external: true

现在,两个容器将共享相同的网络,即我们之前创建的“mysql_network”。因此,他们将彼此可见。

最后,运行容器,您应该通过 phpMyAdmin 无缝登录到您的 MySQL 实例。

结论

将 phpMyAdmin 与 Docker 集成提供了一种简化且高效的方法来管理 MySQL/MariaDB 数据库。

无论您是在 Docker 容器中将 phpMyAdmin 与 MySQL 一起部署、连接到主机上的 MySQL 服务器,还是与现有 MySQL 容器集成,我们的指南都会为您提供实现这一目标所需的所有答案。

这可以节省宝贵的时间并减少配置错误的可能性,使您能够更多地关注数据库管理,而不是设置复杂性。

有关创建部署时可用选项的更多信息,请查看 Docker Hub 上的 phpMyAdmin 和 MySQL 文档。

感谢您抽出时间!如果您有任何疑问,请在下面的评论部分留下。

相关文章: