Docker使用MariaDB

这篇文章主要分为两个部分。
第一部分通过描述使用场景介绍为什么要使用 Docker 以及在 Docker 中使用 MariaDB 有什么优势。
接下来在第二部分中详细介绍如何安装 Docker ,使用 MariaDB 镜像以及如何挂载数据卷以及迁移数据的技巧。

为什么要使用 Docker

程序的开发过程中,尤其是涉及服务器的开发,往往部署的服务器和开发的电脑不是一样的环境,而在现实中,不同的开发者的开发环境不同,甚至同一个人,办公室的开发机,自己的 Laptop ,家里的电脑所使用的系统、环境也不一样。这就可能导致写好的程序在服务器上运行出现问题,或者在办公室未完成的程序,回到家想继续写代码,却又发现因为系统环境不一样而又出现意料之外的 Crash 。
因此,我们就有理由寻找一种能让我们专注解决问题,而从不断地配置、调试系统环境这些非问题根源的杂务中解放出来。Docker 正是能解决这一需求的一个利器。

在 Docker 中使用 MariaDB 的优势

在我的工作中,开发服务器在公司,生产服务器位于云端,他们都是基于 Ubuntu 的 Linux 系统,而我在公司的开发机是一台 WIndow10 的 WorkStation,另外还有一台 Mac 系统的 Laptop 用来移动办公以及回家使用。
在开发的过程中,服务器和开发机分别是三个不同的系统,然而又因为开发服务器属于公司的内网,因此如果在家还想继续工作的话,连接上开发服务器又不太方便。而为三个系统都安装上 MariaDB 以及其他相应的服务,配置和维护,共享数据库中的数据,都需要花费大量的时间和精力。
如果使用 Docker , 那么情况将简单很多。Docker 提供了 Window、 Linux、 MacOS 三个系统的支持,那么只需要在三个系统中都安装好 Docker 服务,然后使用 MariaDB 的 Images,通过 Docker 提供的挂载 Volume 在共享数据库,即可大量减少花费在维护、配置不同系统、服务版本不同的时间。

Docker 安装

Docker 安装可以参考 Docker 官网。Window 和 MacOS 系统均有一件安装包,Ubuntu 系统可以他通过下载安装包安装,详细可参照官网介绍。
安装完成后,由于国内网络原因,连接 Docker Hub 速度有点慢,因此可以替换国内的镜像源。
这里我使用阿里云提供的 Docker Hub 镜像加速服务,使用这个服务需要先注册一个阿里云开发者账号。详细参照以下操作文档: 阿里云Docker镜像站点
Docker 安装完成后,还可以根据需要更改 Docker Images 存放的位置,因为 Docker Images 所占的容量都比较大,因此可以自己开发机或者服务器的具体情况更改。

MariaDB 镜像使用

Docker 中提供了很多 MariaDB 的镜像,可以通过以下命令查询

docker search mariadb

一般而言,我们使用官方提供的镜像,以下为获取下载镜像,默认获取最新的版本

docker pull mariadb

接下来,我们将启动一个 MariaDB 容器

docker run --name mariadb_test -e MYSQL_ROOT_PASSWORD=my-secret=pw -d mariadb
> f5605d02f9f50d1bc813423454fb421ba17513c440487f26b41e26844d652136
docker ps -a
> CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
  f5605d02f9f5        mariadb             "docker-entrypoint..."   20 seconds ago      Up 18 seconds              3306/tcp            mariadb_test

我们可以看到,一个 ID 为 f5605d02f9f5 的 MariaDB 容器已经在运行中。
接下来,我们将进入容器,并查看数据库

docker exec -it f5605d02f9f5 bash
> root@f5605d02f9f5:/#
# 已经进入容器 f5605d02f9f5 中
root@f5605d02f9f5:/# mysql -u root -p
Enter password: my-secret-pw
> Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.2.8-MariaDB-10.2.8+maria~jessie mariadb.org binary distribution

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
# 以 root 身份进入 mysql client
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
# 可以看到数据库内数据库信息

这时的 MariaDB 已经可以正常使用,但是无法远程连接,因此我们需要映射端口来让我们的数据库能被远程访问。

docker run -d -P --name mariadb_connect -e MYSQL_ROOT_PASSWORD=my-secret-pw mariadb
> bf2280bb46bc3d624e6c0596c1545c39d4da249590a739401ec64635129d297b
docker ps -a
> CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
  bf2280bb46bc        mariadb             "docker-entrypoint..."   7 seconds ago       Up 5 seconds        0.0.0.0:32769->3306/tcp   mariadb_connect

我们可以看到,通过 -P 参数,Docker 会为我们自动分配一个未被使用的端口,这里是 32769,接下来,我们可以通过 Navicat 工具来测试一下是否能连接。

Navcat 连接成功截图

我们可以看到,通过在 Navicat 中正确填入主机地址、端口号、用户名及密码,然后点击 Test Conection 即可看到连接测试成功。
上面我们绑定的参数 -P 是让 Docker 随机映射一个可用的端口,如果我们要自定义映射的端口,可以用 -p hostPort:containerPort

挂载数据卷用于保存数据库数据

为了方便迁移数据库中的数据,我们可以通过挂载数据卷来实现。

# 以挂载本地 /data/Db/mariadb 为例
docker run -d --name mariadb_volume -P -v /data/Db/mariadb:/var/lib/mysql mariadb

这样,数据库中的数据将保存在我们挂载的本地文件 /data/Db/mariadb 上。我们可以迁移或者备份这个文件夹,来实现数据库迁移。
一般一个自动生成的空数据库文件,大概有 100多兆 ,而且这个文件夹中包含很多子文件,因此如果通过 SSH 或者 FTP 传输都需要比较长的时间,这里我们可以通过压缩打包来减少文件夹的容量。

# Ubuntu 压缩
cd /data/Db
tar zcvf mariadb.tar.gz mariadb
# Mac Window 直接在图形界面压缩

打包压缩后,容量会大幅度减少,在 Ubuntu 上,压缩后的文件大小大概在 2兆 左右。然后就可以将这个压缩文件传输要目标计算机,解压到恰当的路径即可使用。

# Ubuntu 解压
tar zxvf mariadb.tar.gz

有一点值得注意,如果我们在数据库中创建了新的用户,我们将这个存储数据库数据的数据卷迁移到其他地方,再重新挂载启动数据库后,这些数据库用户也是可用的。因此如果挂载有数据的数据卷时,可以不用 MYSQL_ROOT_PASSWORD 这个参数。

参考资料

Docker —— 从入门到实践
library/mariadb - Docker Hub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,415评论 15 147
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 不要让自己情绪失控,从保证一天不发火开始。 这是我昨天给乐妹的承诺。 休假三天,感情培养的高潮期,我陪着她驮着她养...
    安玲123阅读 465评论 2 1
  • 下载 Composer 安装前请务必确保已经正确安装了PHP。打开命令行窗口并执行php -v查看是否正确输出版本...
    南滨月亮阅读 499评论 0 0