# 背景
使用Docker容器搭建数据库,可以极为方便的移植到其他环境。本文有两种配置方式,一种是在全部文件数据都在容器内部,一种是挂载到外部配置和数据,这要的好处是打包的容器不会随着使用而越来越大。
这里使用的mysql 5.7.36版本,具体需要哪个版本,在[dockerHub][https://hub.docker.com/]搜索查看
# 一、挂载在容器内部配置文件和数据
# docker拉取最新MySQL
sudo docker pull mysql:5.7.36
sudo docker images //查看是否有镜像
1
2
2
# 启动docker,创建MySQL
sudo docker run --name=mysql -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
1
这里挂载内部文件的就完成了,这种方法最快,但改配置不方便
# 二、挂载外部配置文件和数据
# docker拉取MySQL
docker pull mysql:5.7.36
1
# 创建配置文件
可以根据需要设置到合适的目录
mkdir -p /home/mysql/conf
mkdir -p /home/mysql/data
mkdir -p /home/mysql/logs
1
2
3
2
3
# 创建MySQL配置文件
vi /home/mysql/conf/my.cnf
1
复制以下内容,为了解决中文乱码问题
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
# Custom config should go here
!includedir /etc/mysql/conf.d/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 运行容器
docker run --restart=always -d -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/mysql/logs:/logs -v /home/mysql/data/mysql:/var/lib/mysql -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.36
1
2
2
参数解释
--restart=always -> 开机启动容器,容器异常自动重启
-d -> 以守护进程的方式启动容器
-v /home/app/mysql/conf.d/my.cnf:/etc/mysql/my.cnf -> 映射配置文件
-v /home/app/mysql/logs:/logs -> 映射日志
-v /home/app/mysql/data/mysql:/var/lib/mysql -> 映射数据
-p 3306:3306 -> 绑定宿主机端口
--name mysql -> 指定容器名称
-e MYSQL_ROOT_PASSWORD=123456 -> 写入配置root密码
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
使用数据连接工具连接(比如Navicat)能连上就表示安装成功了