如何在Docker容器上设置和使用MariaDB

时间:2020-03-05 15:30:24  来源:igfitidea点击:

我正在遵循我的系列文章关于Devops生态系统的岩石星星。
在当今的文章中,将介绍如何在Docker容器上设置和使用MariaDB,并且作为奖金我们将能够重用我的预览文章中使用的简单NodeJS API来向我们展示我们如何从另一个容器与MariaDB交互。

介绍

通过介绍,我想提及一些关于MariaDB的有趣点。
第一部分是MariaDB已经与创建了MySQL的同一个人创建,实际上,MariaDB从MySQL的Repo叉开始。
2008年已被Oracle收购,经过一年,似乎Widenius先生MySQL的创始人并没有找到与的共同之处,因此,他留下了Oracle创建MariaDB。
第二点,MariaDB确保产品仍然是100%开源,因此,所有补丁,更新和修复,安全性和其他人都可以为每个人开放和访问。
第三点是MariaDB的社区确保后者与MySQL的API完全兼容。
在最后一点中,我会提到几个基准显示MariaDB Out执行MySQL。
我会在这里停下来开始我们的主要目标,这是Docker下的MariaDB。

启动MariaDB实例

要使用MariaDB与容器,我们有两个选项,这对于任何不仅是MariaDB的软件有效,第一个选项是找到一个图像,其中MariaDB安装了所有所需的依赖项,我们所要做的所有依赖项都可以安装从这个图像射击一个容器;一点点复杂的第二种选项是为自己在操作系统上为自己构建图像,例如Ubuntu,Debian,CentOS等,我们必须安装MariaDB和所需的依赖项。
正如我们所知道的,最常用和方便的方式是第一个,几乎所有的软件提供商现在都提供了他们的官方Docker图像;所以,L'll也与第一个方法一起去。
第一件事,我必须找到并安装MariaDB图像,这样做,只需连接到Docker集线器(集线器。
Docker)和使用"MariaDB"这个词搜索,官方图像始终标记官方,如屏幕截图所示以下:

让我们创建一个dockerfile来创建MariaDB容器实例:

>>  docker-mariadb git:(master) ✗ cat Dockerfile
FROM mariadb:latest
ENV MYSQL_ROOT_PASSWORD test

我们的Docker文件将使用MariaDB最新图像,我们还通过env键值命令填充env变量MySQL_Root_Password更多替换项如下所示:

让我们使用Docker Build命令构建MariaDB镜像

>>  docker-mariadb git:(master) ✗ docker build -t theitroad/mariadb:v1 .
Sending build context to Docker daemon 34.82 kB
Step 1 : FROM mariadb:latest
latest: Pulling from library/mariadb
…
Successfully built a33014d19bcb

构建图像后,我们可以使用它来运行我们的容器,如下所示:

>>  ~ docker run -d theitroad/mariadb:v1
35d67d1643b44f1063500e38805e5c54545540c37d1c0179acb5cc953076ee09

说明:

如果我们不想使用dockerfile,我们可以使用下面使用命令行运行一个容器,但Dockerfile是首选,因为它允许我们保存我们的构建配置,例如在我们的情况下,它只是一个简单的env变量mysql_root_password,但你可以想象一堆设置的情况。

让我们列出我们的容器:

>>  ~ Docker ps
Container id        image                 command                  created             status              ports               names
35d67d1643b4        theitroad/mariadb:v1   "docker-entrypoint.sh"   5 minutes ago       up 5 minutes        3306/tcp            silly_davinci

使用容器ID连接到我们的容器Bash(查看上面最后一个命令的结果)。
连接后,我们可以使用mysql -User = Root --password = $MySQL_Root_Password启动数据库服务器;在编写MySQL时,仍然是启动MariaDB服务器的入口点:

>>  ~ docker exec -it 35d67d1643b4 bash
root@35d67d1643b4:/# mysql --user=root --password=test
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.19-MariaDB-1~jessie mariadb.org binary distribution
 
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]>

使用"退出"退出MariaDB控制台和第二个"退出"以退出容器Bash。

要检查服务器的日志,请使用docker logs docker_id命令。

说明:

以下是我们可以在我们的dockerfile中使用的一些env变量:

  • mysql_root_password [必填]:指定DB服务器的root用户的密码
  • mysql_database [可选]:如果我们想在DB服务器的启动时按名称创建特定数据库
  • mysql_user,mysql_password [可选]:如果我们想在启动时创建新用户,所以我们可以指定用户的名称和密码
  • mysql_allow_empty_password [可选]:如果等于是的,则容器将开始允许root用户的空白密码
  • mysql_random_root_password [可选]:将随机密码分配给root用户在启动时,密码将在stdout中打印

从外部连接到玛丽亚二

既然我们创建了一个数据库服务器,我们可以从外部击中它,理想情况下,在本文中为我们我们可以使用另一个容器来执行此操作。
所以,我会在预览文章中重用我的示例NodeJS应用程序来冒充容器。
首先,通过查看下面的命令输出中的"ipaddress"行来查看并检查我们的MariaDB容器的IP地址:

>>  msg-api git:(master) ✗ docker inspect 35d67d1643b4
"IPAddress": "172.17.0.2"

请注意,我将更改我的nodejs应用程序的IP地址,我将建立一个新图像,详细信息请参考上面提到的我的预览文章,否则我们可以按照我已经推出Docker的以下步骤遵循以下步骤图片到Docker Hub,Docker会发现并将其从Docker Hub中提取:

>>  msg-api git:(master) ✗ docker build -t theitroad/msg-api:v0.0.5 .
Sending build context to Docker daemon 9.728 kB
Step 1 : FROM node:latest
…
Successfully built e0f9596397a3

现在让我们运行一个与端口前进的Docker容器能够从外部击中它:

>>  msg-api git:(master) ✗  docker run -d -p 8080:8080 --name msg-api theitroad/msg-api:v0.0.5
8f70e4261bc6676467fe4f59fc67fa7e4659860d20f2e55dd3dec48ed3ee0d70

让我们使用"/ping"端点查看我们的应用健康:

>>  docker-mariadb git:(master) ✗ curl localhost:8080/ping
hello there! I m up and running!%

现在我要连接到MariaDB服务器并插入一些数据:

>>  msg-api git:(master) ✗ docker exec -it 35d67d1643b4 bash
root@35d67d1643b4:/# mysql --user=root --password=test
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.1.19-MariaDB-1~jessie mariadb.org binary distribution
 
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| k8smysqldb         |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.04 sec)
MariaDB [(none)]> use k8smysqldb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [k8smysqldb]> insert into messages values 'first faked msg over here';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''first faked msg over here'' at line 1
MariaDB [k8smysqldb]> insert into messages(text) values('first faked msg over here');
Query OK, 1 row affected (0.02 sec)
MariaDB [k8smysqldb]> insert into messages(text) values('Second faked msg over here');
Query OK, 1 row affected (0.03 sec)
MariaDB [k8smysqldb]>

现在,我将使用NodeJS应用程序使用MSG-API /所有端点来检索此数据:

>>  docker-mariadb git:(master) ✗ curl localhost:8080/msg-api/all
[{"id":1,"text":"first faked msg over here"},{"id":2,"text":"Second faked msg over here"}]%

所以一切都在工作。

停止和删除MariaDB容器

完成使用Docker容器后,我们要删除它们只是运行:

  • Docker PS -A列出所有容器,
  • 查找要删除的容器的ID
  • 确保首先停止它们,否则我们会收到错误,这样做,Docker stop your_container_id1 your_container_id1 ...
  • 然后运行docker rm your_container_id1 your_container_id1 ...删除它们