Docker与MariaDB

Docker,云计算时代的宠儿

不知道你是否遇到过没这情况:本地开发完美运行,怎么不部署到线上就崩了呢?

有?那试试docker吧

介绍

Docker是一个轻量级开源容器,用go语言写成,利用容器技术实现应用的虚拟化并独立运行。不管是数据库服务器,或网页服务器,还是Linux,都能通过Docker运行。相对于虚拟机,容器少了一层操作系统,故性能开销比较小

容器虚拟化并不是一项新技术,但Docker的出现解决了很多生产中的问题,如前面说的开发与生产环境不一致导致的运行失败,或主机中某个程序占资源过高影响其他程序,或应用扩展的不便。

了解过Java的人都知道,它的口号是“write once, run anywhere”,而Docker则是“Build once, Run anywhere”,构建镜像后发布到仓库,然后可以到任何一台装了Docker的机器,拉取仓库里的镜像并运行。第一种问题解决

Docker可以按照用户的意愿来限制容器的资源。每个容器都只能占用一定配额的资源,并独立运行,不会对其他应用造成影响。第二种问题解决

Docker通过配置文件,可以弹性扩展应用。若想实现负载均衡,方法不仅简单而且快速。于是,第三种问题解决

当然,还有其他问题如管理,迁移等,就不再赘述

入手

在Arch Linux 中使用Docker

1
2
3
4
5
6
7
8
## 安装docker和docker-compose
sudo pacman -S docker docker-compose

## 把自己的用户添加到docker组,这样每次使用docker命令都无需sudo
sudo gpasswd -a $USER docker

## 开机启动docker服务
sudo systemctl enable docker.service

重启系统,然后在终端中输入docker versiondocker info,可以查看docker的信息

至于用法网上很多优秀的教程,当然,英文好的可以直接看官方文档,啥都有

切记,善用dockerdocker helpdocker --help),最好用的命令就是它了

MariaDB镜像

下面展示MariaDB镜像的使用,至于MariaDB是什么不必多说了吧(也就MySQL的分支和替代)

Docker官方仓库有MariaDB的镜像,直接用就行

1
2
3
4
5
6
7
8
9
10
11
12
## 从官方仓库拉取镜像
docker pull mariadb

## 运行容器实例,--name可以指定容器名称,-e是环境变量设置root的密码,-d让容器在后台运行
docker run --name mariadb -e MYSQL_ROOT_PASSWORD=000 -d mariadb

## 进入容器,-it的作用是启用交互式和分配一个tty
## 可通过docker exec --help查看命令说明
docker exec -it [容器id] bash

## 现在已经进入linux的bash环境里了,可执行以下命令然后输入密码登录MariaDB服务器
mysql -u [用户名] -p

这样的MariaDB需要进入容器操作,但外部程序访问不了,那

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 停止上面运行的容器;启动某个容器,把stop换成start即可
docker stop mariadb

## 移除占用了mariadb这个名称的容器,当然也可以不移除,但要--name时指定另一个名称
docker container rm mariadb

## -p映射容器端口到主机,这里都采用默认的3306端口
docker run --name mariadb -e MYSQL_ROOT_PASSWORD=000 -d -p 3306:3306 mariadb

## 主机安装MariaDB客户端,用于登录MariaDB服务器
sudo pacman -S mariadb-clients

## 在主机里运行以下命令登录容器里的数据库
mysql -u root -p -h 127.0.0.1

默认情况下,MariaDB容器的存储方式由Docker管理,这种方式的优点是对用户透明,比较容易,缺点是主机程序无法读取到数据文件;另一种方法,指定主机的目录映射到容器,也就步骤稍微多一点点,但这方式方便数据的迁移,主机里的其他程序也能读取数据文件。具体用法参考Docker官方仓库里的MariaDB镜像的DESCRIPTION好了(英文的~)

参见

  1. What is a Container | Docker
  2. Docker Documentation | Docker Documentation
  3. mariadb - Docker Hub