Docker MySQL容器

前言

在Docker容器中,如果启动的容器需要将数据持久化到本机上,这个时候通常使用docker run -v的命令将本地路径挂载到docker容器中。

1
docker run -v 宿主目录:容器挂载的目录 镜像

本章就来说明一下Docker如何部署MySQL服务,同时持久化数据。

Docker 目录挂载

Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:

1
$ docker run -it -v /test:/soft centos /bin/bash

容器挂载有两点需要说明:

  1. 如果在容器内修改了目录,那么对应的挂载点目录也会改变。
  2. 容器销毁了,在宿主机上新建的挂载目录不会消失。

部署MySQL容器步骤

拉取MySQL镜像,如果速度较慢的,可以采用网易的镜像加速。

1
$ docker pull mysql:5.7 #使用5.7v的MySQL

创建用于挂载的目录

1
2
$ sudo mkdir /my/mysql/datadir #用于挂载mysql数据文件
$ sudo mkdir /my/mysql/conf.d #用于挂载mysql配置文件

使用镜像创建容器

1
$ docker run --name mysql5.7.1 -p 3306:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

参数解析:

–name:容器名
–p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器

进入到正在执行的容器中

1
$ docker exec -it mysql5.7.1 /bin/bash

登录MySQL

1
$ mysql -u root -p

你想输入的替代文字

容器目录到宿主机

上面已经成功启动了MySQL服务,下面继续在该容器中添加上记录,观察一下宿主机有没有保存该记录。

在MySQL容器中创建数据库和表:

1
2
3
4
5
6
7
8
9
10
CREATE DATABASE test;

CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`nickname` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_jhib4legehrm4yscx9t3lirqi` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

插入数据:

1
INSERT INTO  t_user (id, username,nickname, password)  VALUES (1, "jintx", "jiagu", "22");

退出容器到宿主机上查看,刚刚新建的表以及数据的确存放在了/my/mysql/datadir,这样可以保证就算该容器重启后,但是数据已经做到了持久化,所以容器重启后数据还是在的。

你想输入的替代文字