安装和运行MariaDB作为Docker容器

欢迎来到我们的基础教程,该教程介绍如何将MariaDB作为Docker容器安装和运行。根据 Docker网站,“ Docker是一个用于开发,发布和运行应用程序的开放平台”。一个 容器 “一方面”是打包代码及其所有依赖项的软件的标准单元,因此应用程序可以从一个计算环境快速运行到另一个计算环境。 Docker容器映像是一个轻量级的,独立的,可执行的软件软件包,其中包括运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。

安装和运行MariaDB作为Docker容器

安装Docker引擎

必须先在系统上安装Docker Engine,然后才能将MariaDB作为Docker容器安装和运行。请按照以下链接在CentOS 8 / Ubuntu 20.04系统上安装Docker Engine;

在CentOS 8上安装和使用Docker CE

在Ubuntu 20.04上安装Docker CE

下载MariaDB Docker映像

每个泊坞窗容器均基于特定的映像。 Docker映像包含运行容器所需的所有内容,因此是一系列定义应用程序运行方式的指令。

您可以构建自己的Docker映像,也可以简单地使用社区创建的映像。您可以在 Docker中心

在本教程中,我们将利用社区可用的Docker映像。

搜索MariaDB Docker映像

首先,您需要标识特定的MariaDB Docker映像的名称。要在docker hub上搜索映像,只需运行以下命令;

docker search mariadb

您将获得大量已创建的MariaDB映像。

NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mariadb                                MariaDB is a community-developed fork of MyS…   3572                [OK]                
linuxserver/mariadb                    A Mariadb container, brought to you by Linux…   151                                     
bitnami/mariadb                        Bitnami MariaDB Docker Image                    120                                     [OK]
toughiq/mariadb-cluster                Dockerized Automated MariaDB Galera Cluster …   41                                      [OK]
...

通常,无前缀的映像被认为是正式的docker hub映像,稳定且正在维护。它还包含 [OK]官方 柱。因此,我们将从上面的列表中拉出第一张图像。

从Docker Hub下载MariaDB Docker映像

要下载Docker映像,请使用 docker pull 命令。在这种情况下,我们的图片名称是 mariadb

docker pull mariadb

该命令将映像下载到您的系统(如果尚不存在)。

默认情况下,当您拉取Docker映像时,将下载该映像的最新版本。如果您需要下载其他版本的MariaDB Docker映像,例如MariaDB 10.3 Docker映像,只需使用以下命令即可;

docker pull mariadb:10.3

您会看到各种各样的标签,可用于 Docker Hub MariaDB 页。

列出下载的Docker映像

您可以使用 docker images 命令。

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              8075b7694a2d        8 days ago          407MB

我们已经下载了最新的MariaDB Docker映像。

运行MariaDB Docker容器

放置好Docker映像后,即可基于该映像创建并运行Docker容器。 docker run 是用于运行Docker容器的Docker命令。

运行MariaDB容器时,需要指定以下环境变量之一:

  • MYSQL_ROOT_PASSWORD:指定将为MariaDB设置的密码 root (必填)。
  • MYSQL_ALLOW_EMPTY_PASSWORD:为MariaDB根用户帐户设置一个空密码(可选)。接受值,是或否
  • MYSQL_RANDOM_ROOT_PASSWORD:为MariaDB根用户帐户设置随机密码(可选)。接受值,是或否

在我们这里的例子中,图片的名称是 mariadb (与 latest 作为标签);

docker run --name mariadbdemo -e MYSQL_ROOT_PASSWORD=password -d mariadb

上面的命令基本上可以创建并运行(在后台, -d)基于最新可用映像版本的MariaDB Docker容器,将MariaDB数据库根密码设置为 密码-e MYSQL_ROOT_PASSWORD=password),容器名称为 mariadbdemo--name mariadbdemo,通常会为容器设置随机名称(如果您未指定名称)。

如果您有其他版本的MariaDB Docker映像,则可以指定标签以基于该特定映像运行容器。例如,假设我们有MariaDB 10.4映像,并且我们希望基于该映像运行容器,则可以将标签指定为, mariadb:10.4

 docker run --name mariadbdemo -d -e MYSQL_ROOT_PASSWORD=password mariadb:10.4

检查一下 docker run --help 有关更多选项。

列出正在运行的容器

运行容器后,您可以使用 docker ps 命令。

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ce03099cfffa        mariadb             "docker-entrypoint.s…"   43 seconds ago      Up 39 seconds       3306/tcp            mariadbdemo

要列出所有正在运行和已停止的容器,请使用 docker ps -a 命令。

只获取正在运行的容器ID;

docker ps -q

检查MariaDB容器日志

您可以使用 docker logs 命令;

docker logs mariadbdemo

要么

docker logs ce03099cfffa

访问MariaDB Docker容器

您的MariaDB泊坞窗容器现在正在后台运行。您可以通过以下方式访问它:

  • 启动容器的交互式外壳
  • 使用mysql客户端从您的主机通过docker网络登录到MariaDB Docker容器。

要为MariaDB docker容器启动交互式bash shell,请使用 docker exec -it

docker exec -it mariadbdemo bash

这将带您进入容器交互式bash shell;

[email protected]:/#

您也可以使用主机上的mysql客户端登录到MariaDB容器。

为此,您需要安装MySQL客户端。例如,在Ubuntu系统上,您可以通过运行以下命令来安装MySQL客户端

apt install mysql-client

接下来,获取分配给您的MariaDB容器的IP地址。要获取容器的IP地址,请使用 docker inspect 该命令提供有关容器的完整详细信息。

docker inspect mariadbdemo | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

在这种情况下,我们的MariaDB容器被分配了IP地址 172.17.0.2

使用MySQL主机客户端连接到我们的容器;

mysql -u root -p -h 172.17.0.2

该命令假定容器正在侦听默认端口3306。

您将需要使用通过密码指定的密码。 MYSQL_ROOT_PASSWORD 在上面运行容器时变量。

Enter password: password
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.5.5-10.5.4-MariaDB-1:10.5.4+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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>

在外壳内,您现在可以像在主机上运行时一样管理MariaDB。

注意:分配给您的Docker容器的IP地址是动态的,如果您碰巧重启了该容器,则会在Docker网络中为其分配一个新的IP地址。

从外部访问MariaDB Docker容器

如果您有一些外部应用程序需要访问在MariaDB容器上运行的数据库,则需要通过主机系统将容器端口公开给外部。默认情况下,只能在主机系统内访问该容器

例如,我们的MariaDB容器正在侦听默认端口3306。

如果您在主机上检查自己的侦听端口以查找MariaDB端口,则不会找到任何端口。

ss -altnp | grep 3306

要暴露容器端口,请使用 docker run 选项, -p :。请参见下面的示例命令,以使用同一端口通过主机公开MariaDB容器端口3306;请参阅下面的示例命令。

docker run --name mariadbdemoport -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mariadb

如果需要为容器使用相同的名称,只需停止现有容器并将其删除,然后使用相同的名称重新启动新容器。

让我们验证端口暴露情况

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
3489ce131cce        mariadb             "docker-entrypoint.s…"   4 minutes ago       Up 2 seconds        0.0.0.0:3306->3306/tcp   mariadbdemoport
ce03099cfffa        mariadb             "docker-entrypoint.s…"   About an hour ago   Up 40 seconds       3306/tcp                 mariadbdemo

如果您检查 港口 列中,您意识到对于我们的新容器,容器端口暴露在主机上的端口3306上,并且正在侦听所有接口;

如果需要指定主机的IP地址,请使用 -p host-IP-address:Port:

再次检查主机上的监听端口;

ss -altnp | grep 3306
LISTEN   0        4096                   *:3306                *:*

如果需要将容器端口映射到动态主机端口,请使用选项。

-p 
docker run --name mariadbdemo-dport -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mariadb
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
bee9f036aedd        mariadb             "docker-entrypoint.s…"   8 seconds ago       Up 3 seconds        0.0.0.0:32768->3306/tcp   mariadbdemo-dport
3489ce131cce        mariadb             "docker-entrypoint.s…"   12 minutes ago      Up 7 minutes        0.0.0.0:3306->3306/tcp    mariadbdemoport
ce03099cfffa        mariadb             "docker-entrypoint.s…"   About an hour ago   Up 8 minutes        3306/tcp                  mariadbdemo

如您所见,容器端口位于动态端口32768上。

您始终可以使用以下命令找到容器端口映射到的动态端口 docker port 命令;

docker port mariadbdemo-dport
3306/tcp -> 0.0.0.0:32768

设置MariaDB Docker容器的持久数据量

删除容器后,所有已写入其内部卷的数据也将全部删除。为了确保数据在容器删除之间是持久的,您可以将MariaDB Docker容器内部卷映射到某个主机目录。

要将内部Docker卷绑定到外部主机卷,请使用 -v : 的选择 docker run 命令。

MariaDB容器的默认数据目录是 /var/lib/mysql

例如,如果我希望将容器数据写入我的主机目录 /opt/mariadb/data,首先创建目录,然后使用来运行一个映射数据目录的容器 -v 选项。

mkdir -p /opt/mariadb/data
docker run --name mariadbdemo-volume -v /opt/mariadb/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mariadb

因此,任何写入容器数据目录的容器数据, /var/lib/mysql,将被写入主机上的数据目录, /opt/mariadb/data 与此同时。

停止,暂停,重新启动删除Docker容器

要停止正在运行的容器,请使用 docker stop 命令;

docker stop [option] 
docker stop mariadbdemo

您可以使用其ID停止所有容器;

docker stop $(docker ps -q)

处理完容器后,可以选择将其删除。

docker rm [option] 
docker rm mariadbdemo

强制拆除;

docker rm --force mariadbdemo

暂停容器;

docker pause mariadbdemo

重启;

docker restart mariadbdemo

列出docker卷;

docker volume ls

使用查找特定的Docker容器体积 docker inspect 命令。

除去特定体积;

docker volume rm volume-name

这标志着我们关于如何将MariaDB作为Docker容器安装和运行的指南的结尾。

参考

Docker文档

MariaDB – Docker集线器

Sidebar