Mysql Docker 镜像使用
Mysql 镜像获取
- 打开docker官方registry https://hub.docker.com/
- 搜索Mysql关键字
- 选择官方Mysql镜像
- 选择需要的版本,复制命令拉取镜像
Mysql镜像如何使用
在上图3的链接中【https://hub.docker.com/_/mysql?tab=description】,有详细的使用说明。简单罗列如下:
- 启动mysql server 实例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
some-mysql:容器名
my-secret-pw: mysql root账号密码
tag:mysql版本号
比如:
docker run --name msyql5.7 -e MYSQL_ROOT_PASSWORD=123456 -d -P mysql:5.7
- 使用mysql 客户端命令行连接到mysql server
docker run -it --rm mysql:tag mysql -hsome.mysql.host -usome-mysql-user -p
比如:
docker run -it --rm mysql:5.7 mysql -h172.17.0.2 -uroot -p
- 查看mysql server日志
docker logs some-mysql
比如:
docker logs msyql5.7
如何配置Mysql
镜像的默认配置位于/etc/mysql/my.cnf,该配置文件主要引用位于目录/etc/mysql/conf.d/
和 /etc/mysql/conf.d/
中的配置。
my.cnf:
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
如果想要用自己的配置文件来启动mysql,可以将自己的配置文件目录挂载容器的/etc/mysql/conf.d/上,这样mysql就自动引入自定义配置了:
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
/my/custom: 本地的配置文件路径,比如里面有配置文件config-file.cnf,那么容器启动后,在容器的/etc/mysql/conf.d目录中就会存在config-file.cnf文件,那么也会被my.cnf加载。
如果自定义的配置项少,也可以直接给mysqld传递参数的方式配置:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
使用下面这条命令可以查询所有可配置的选项(本质运行mysqld --verbose --help 命令):
docker run -it --rm mysql:tag --verbose --help
环境变量
MYSQL_ROOT_PASSWORD
用来设置root账号的密码
MYSQL_DATABASE
用来指定数据库
MYSQL_USER
, MYSQL_PASSWORD
用来指定用户和密码
MYSQL_ALLOW_EMPTY_PASSWORD
是否允许root账号是空密码
MYSQL_RANDOM_ROOT_PASSWORD
为root账号随机生成密码
MYSQL_ONETIME_PASSWORD
设置root账号登录后必须修改密码
数据存储
容器中的数据目录位于 /var/lib/mysql 中。那么基于docker的数据卷管理,有两种管理数据存储方式:
- 使用docker内部的数据卷管理机制,这种方式非常方便,不需要你做额外的处理,不好的是不方便在宿主机上找到对应的数据目录。
- 自己在宿主机上创建数据目录,并mount到容器中的 /var/lib/mysql 目录上。这种方式好处是数据目录容易找到,不好的是你需要确保宿主机上的数据目录存在,权限正确等额外的管理工作。
一般我们开发在本地使用时,使用第一种方式就好了。
对于第二种方式,可使用如下命令来将宿主机的目录映射到容器中:
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
其他注意事项
-
使用已经存在的数据库
此时MYSQL_ROOT_PASSWORD环境变量设置会被忽略。
-
使用特定的账号运行
docker run -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-
dump & restore
dumps:
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
restore:
docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql