前提:安装好Docker服务。
1、拉去镜像
docker pull mysql/mysql-server:tag 默认版本5.7.21
docker pull mysql/mysql-server:5.6 版本5.6.39
2、启动一个实例
docker run -d --name=mysql -p 3306:3306 mysql/mysql-server
3、查看初始化密码
docker logs mysql 2>&1 | grep GENERATED
4、用获取到的密码登录数据库,并修改root密码
docker exec -it mysql mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
5、从宿主机访问数据库容器
docker exec -it mysql bash
6、启动时配置MySQL
docker run -d --name=mysql -p 3306:3306 mysql/mysql-server--character-set-server=utf8mb4 --collation-server=utf8mb4_col
备注:以上参数效果是使用 utf8mb4默认字符集和 utf8mb4_col数据库的默认排序规则
7、将增量数据映射到宿主机,达到持久数据效果
docker run -d --name=mysql -p 3306:3306 -v /path:/var/lib/mysql mysql/mysql-server
备注:1、这样做的原因是容器一旦被删除,容器里的数据也将会丢失,这对于数据库来说是不能接受的。所以应当将其映射到宿主机中。
2、宿主机中的/path目录路径 权限应该是 mysql:mysql 且为755
8、将配置文件映射到宿主机,达到配置更改效果
docker run -d --name=mysql -p 3306:3306 -v /root/docker_data:/var/lib/mysql -v /root/mysql_conf/my.cnf:/etc/my.cnf mysql/mysql-server
备注:1、
2、宿主机中my.cnf必须已经存在[mysqld] user=mysql ;即允许用户为mysql
9、运行其他初始化脚本
如果在创建数据库后立即想要在数据库上运行任何脚本.sh或 .sql脚本,可以将它们放入主机目录,然后将该目录挂载 /docker-entrypoint-initdb.d/到容器内。
docker run -d --name=mysql -p 3306:3306 -v /path:/docker-entrypoint-initdb.d mysql/mysql-server
备注:已目录的形式将初始化脚本挂载进初始化目录中;此项笔者暂时没场景测试,还不知其能达到的效果。
10、从另一个Docker容器中的应用程序连接到MySQL
方法1、以link方式即可(推荐)
方法2、通过容器IP直接连接(不推荐),可能存在重启后更改IP的情况
方法3、将3306端口映射到宿主机上(不推荐),采取该方式一定要配置好宿主机的防火墙规则和MySQL的连接权限,否则安全性将非常低。
以上内容均参考MySQL的官方安装文档,笔者一直未将MySQL放置于容器中,总觉得没必要,或者说现在还没适合的场景来如此使用。
参考文件:https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html
网友评论