如何在 Linux 中使用 Docker 设置 MySQL

如果您是 MySQL 新手或希望快速轻松地安装 MySQL 数据库的人,那么本文适合您。 在本文中,我们将学习如何在 Linux 中使用 Docker 和 Docker compose 设置 MySQL。

让我们首先设置 docker 环境来启动 MySQL 容器。

1.安装Docker

在启动 MySQL docker 容器之前,您需要在您的机器上安装 docker 和 docker-compose。 如果您还没有安装 docker 和 docker-compose,请参考以下指南:

  • 如何在 CentOS 中安装 Docker
  • 如何在 Ubuntu 中安装 Docker

您还可以参考下面给出的官方 Docker 文档链接,了解如何设置 Docker 和 Docker compose。

您可以运行以下命令来检查您正在运行的 docker 和 docker-compose 版本。

$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown

2. 下载 MySQL Docker 镜像

前往 码头工人中心 得到 MySQL 泊坞窗图像. 重要的是您必须决定要运行的 MySQL 版本。

运行以下命令将 MySQL 映像从 docker hub 拉到您的机器上。

$ docker pull mysql:latest

小心: 没必要使用标签”latest“,默认会拉取最新的图片。

要检查图像是否在本地可用,可以运行以下命令:

$ docker images mysql

样本输出:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    b05128b000dd   12 days ago   516MB

现在图像已准备好启动容器。 您也可以跳过此步骤并运行“docker run” 命令如下一节所示,如果本地不可用,它将拉取图像。

3. 启动 MySQL 容器

运行以下命令来启动 MySQL docker 容器:

$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
启动 MySQL 容器

让我们分解上面的命令,看看每个标志的作用。

--name → 为您的容器命名。 如果您没有指定此标志,docker 将分配一些随机生成的名称。

-p → 端口映射。 MySQL 将监听端口 3306 所以我们正在映射端口(33063306) 从您的主机到 docker 容器。 主机端口不是必须的 3306,它可以是任何可以使用的东西。

运行以下 netstat 启动容器后,在本地计算机中检查映射端口是否正在侦听。

$ netstat -tlnup | grep -i 3306

样本输出:

tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      168870/docker-proxy 
tcp6       0      0 :::3306                 :::*                    LISTEN      168878/docker-proxy 

-v → 将卷附加到容器。 docker 的默认行为是一旦容器被移除它就不会持久化数据,所以你会丢失所有的数据。

为了创建持久存储,我创建了名为“mysql_volume“. MySQL 将数据存储在 /var/lib/mysql/ 在容器内,在这里它被映射到 localhost 目录 /var/lib/docker/volumes/mysql_volume1/_data,因此您的数据将是持久的。

如果您想了解有关 docker 卷的更多信息,请查看我们的详细信息 文章 在同一。

-d → 将以分离模式启动和运行容器。 如果你省略 -d 标志,然后您将在终端中看到容器启动日志,您必须打开一个新的终端会话才能连接到容器。

-e → 环境变量。 你必须 设置mysql root用户密码 使用以下任一参数。

  • MYSQL_ROOT_PASSWORD → 使用此环境变量设置您自己的密码。
  • MYSQL_ALLOW_EMPTY_PASSWORD → 将设置空白或空密码。 你必须设置 MYSQL_ALLOW_EMPTY_PASSWORD=1.
  • MYSQL_RANDOM_ROOT_PASSWORD → 容器启动时会生成随机密码。 你必须设置 MYSQL_RANDOM_ROOT_PASSWORD=1 生成随机密码。

如果跳过此步骤,则会抛出错误,如下所示。

环境变量错误

4. 检查 MySQL 容器状态

您可以使用以下命令检查启动的容器状态:

$ docker ps

样本输出:

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
e1fb895f6f0f   mysql     "docker-entrypoint.s..."   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

5. 连接 MySQL 数据库

运行以下命令以连接到 MySQL 容器。

$ docker exec -it mysql bash

连接到 MySQL 数据库作为 root 用户通过运行以下命令。 就我而言,我已经通过以下方式设置了自己的密码 MYSQL_ROOT_PASSWORD.

$ mysql -u root -p
连接到数据库 连接到数据库

如果你用过 MYSQL_RANDOM_ROOT_PASSWORD=1 启动容器时,您可以从日志中获取自动生成的密码。

$ docker logs
$ docker logs mysql
生成的根密码 生成的根密码

自动生成的root密码会很长,不需要记住。 您可以通过运行以下查询来重置 root 密码。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';

用您自己的密码替换密码“mysqlpassword”。 您还可以创建自己的用户并根据需要授予他权限。

6. 加载样本数据

设置 mysql 的主要目的是加载一些数据并对其运行查询。 有几种方法可以加载数据。 我有一个名为“load_data.sql“其中包含以下查询。

CREATE DATABASE IF NOT EXISTS football;

USE football;

CREATE TABLE IF NOT EXISTS players (
    player_name     VARCHAR(16)     NOT NULL,
    player_age      INT             NOT NULL,
    player_club     VARCHAR(16)     NOT NULL,
    player_country  VARCHAR(16)     NOT NULL
);

INSERT INTO players VALUES ("Messi",34,"PSG","Argentina");
INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal");
INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil");
INSERT INTO players VALUES ("Kane",28,"SPURS","England");
INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");

第一种方法是使用“docker cp“ 命令。

$ docker cp load_data.sql mysql:/tmp

$ docker exec -it mysql bash

$ ls -l /tmp/

现在您可以连接到 mysql 客户端并运行 source 命令或将文件重定向到 mysql 客户端。

$ mysql -u root -p

mysql> source /tmp/load_data.sql

或者

$ mysql -u root -p < /tmp/load_data.sql

连接到数据库并查询您的表。

$ mysql -u root -p

mysql> show databases;

mysql> use football;

mysql> show tables;

mysql> select * from players;

球员表 球员表

第二种方法是重定向 .sql 运行文件时 docker exec 命令。

$ docker exec -i mysql mysql -u root -p < load_data.sql

7. 使用 Docker-Compose 设置 MySQL 容器

而不是拉动图像并运行 docker run 命令,你可以使用 码头工人撰写 快速启动容器。 当您要创建多个容器时,Docker-compose 最适合。

创建一个名为 docker-compose.yml 或者 docker-compose.yaml 文件。 复制并粘贴以下 yaml 代码。 这与我在前几节中手动运行的相同。

version: '3.8'
services:
  database:
    image: mysql:latest
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: temp1234
    ports:
      - "3306:3306"
    volumes:
      - mysql_volume:/var/lib/mysql
volumes:
  mysql_compose_volume:

现在运行以下命令,它将启动 MySQL docker 容器。

$ docker-compose up

使用 Docker Compose 启动 MySQL 容器 使用 Docker Compose 启动 MySQL 容器

运行以下命令以使用 docker-compose 检查已启动容器的状态:

$ docker-compose ps

样本输出:

Name              Command             State                          Ports                       
-------------------------------------------------------------------------------------------------
mysql   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp

8. 使用 MySQL Workbench 连接到 MySQL 数据库

到目前为止,我们已经了解了如何使用 mysql 客户端从容器内部连接到数据库。 您还可以使用任何 GUI 客户端(如 mysql workbench、dbeaver、Heidi SQL 等)连接到数据库。

无论您使用什么 GUI 客户端,需要注意的重要一点是启动容器时映射的端口。

就我而言,我已经映射 本地主机 (3306) -> 容器 (3306)。 所以如果我必须建立到数据库的连接,我必须连接到 localhost:3306 或者 127.0.01:3306.

我使用 MySQL Workbench 作为我的 GUI 客户端。 如果您还没有在您的机器上安装 MySQL 工作台,那么您可以使用下面的说明来安装它。

8.1。 在 Linux 中安装 MySQL Workbench

导航到 官方网站 下载包文件。 您必须选择您的操作系统才能下载 .deb 或者 .rpm 文件。

为 MySQL Workbench 选择操作系统 为 MySQL Workbench 选择操作系统

在下一步中,它将要求您登录或注册。 您可以通过单击“不,谢谢,开始我的下载”选项跳过登录或注册。

跳过登录或注册选项 跳过登录或注册选项

在基于 Debian 的系统上,安装 MySQL Workbench,如下所示:

$ cd <path to downloaded .deb file>

$ sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb

在基于 RHEL 的系统上,安装 MySQL Workbench,如下所示:

$ cd <path to downloaded .rpm file>

$ sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm

安装完成后,您可以从菜单或破折号启动 mysql 工作台。

启动 MySQL 工作台

启动 MySQL 工作台

8.2. 连接到 MySQL 数据库

连接到在 docker 容器内运行的数据库。 您应该尝试连接到 localhost:3306 或者 localhost:<port-no> 取决于您的容器的设置方式。

管理 MySQL 连接 管理 MySQL 连接

在连接到数据库之前,您可以按“测试连接” 检查 MySQL 工作台是否能够成功连接到数据库实例。

测试 MySQL 连接 测试 MySQL 连接

现在您可以开始针对您创建的表运行查询。

在 MySQL Workbench 中运行示例查询 在 MySQL Workbench 中运行示例查询

9. 结论

在本文中,我们简要介绍了如何使用 docker 在 docker 中启动 MySQL 容器 docker rundocker-compose 方法。 如果您想设置 MySQL 用于测试或学习目的,Docker 绰绰有余。

希望这可以帮助。