前言
MySQL是最受欢迎的关系型数据库,是开发人员选择最为广泛的数据存储数据库。以下将介绍Docker安装MySQL的方式。
Docker安装MySQL需要涉及的内容:
- Docker –network模式。要了解Docker容器网络,先了解Docker的网络模型CNM(Container Network Model)
- Docker -v 共享目录
1. Docker NetWork
Docker默认会提供三个网络:host,bridge,none。网络隔离是基于Linux内核的Namespace技术实现资源隔离的。可参考 Docker底层网络隔离
- None网络:不会为容器分配单独的网络环境/资源,容器之间无法通信。
- Bridge网络:默认的网络类型,当启动容器的时候,会默认创建一个网络名为docker0的网络,并分配IP地址。可通过该IP地址访问容器。
- Host网络:当使用host网络时,容器启动后并不会分配虚拟的docker0,而是直接使用宿主机的网络,即 容器与宿主机的网络没有隔离。
注意:通过docker run创建容器时,该容器会默认分配bridge网络。
2. mysql容器
创建容器的方法其实很简单,但是基本都是创建一个单独网络环境的mysql容器,并通过端口映射来访问数据库。下面将创建基于bridge网络的mysql容器 以及 基于host网络的mysql容器。
2.1 基于bridge网络的mysql容器
创建bridge网络的容器命令如下:
1 | docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 |
注意:
- 由于默认创建的容器使用的是bridge网络,因此想通过外网访问数据库,则需要将宿主机的3306端口与容器的3306端口做映射。(宿主机并不一定开通3306,其他端口也可以)。
- 如果其他处于bridge网络下的容器,也需要访问mysql容器。解决办法有两个:
- 通过 宿主机外网IP:3306 来访问
- 启动不同容器时,将他们的网络设置为同一个bridge网络,然后通过 网络别名:3306 来访问
2.2 基于host网络的mysql容器
创建host网络的容器命令如下:
1 | docker run --restart=always --network host -d --name mysql -v /var/lib/mysql-files:/var/lib/mysql-files -v /etc/mysql:/etc/mysql -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' mysql --default-authentication-plugin=mysql_native_password |
注意:
- 启动命令直接指定—network参数为host
- 本地创建 /var/lib/mysql-files 和 /var/lib/mysql空目录,用于存储数据库的数据
- 共享/etc/mysql目录,主要配置数据库相关参数
设定以上参数的目的:
通过以上命令创建成功后,可直接通过宿主机127.0.0.1:3306即可访问mysql容器提供的数据库服务,因为mysql容器和宿主机处于一个网络
mysql容器保存的数据存储在宿主机,以免容器挂掉,数据丢失
3 /etc/mysql数据库配置
基于2.2中的容器启动方式,路径/etc/mysql下的文件如下所示:
|— mysql
|— config
|— docker.cnf
|— mysql.cnf
my.cnf
3.1 my.cnf配置
1 | [mysqld] |
/etc/mysql/my.cnf为启动mysql的时候会被主动加载的文件。理解了my.cnf中的众多配置,才可以对数据库进行性能优化。以下对my.cnf参数做简单的解释:
客户端参数解释:
1 | [client] #客户端设置,即客户端默认的连接参数 |
服务端参数解释
1 | [mysqld] #服务端基本设置 |
更多参数可参考: 参数解释地址
3.2 docker.cnf配置
1 | [mysqld] |
3.3 mysql.cnf配置
1 | [mysql] |