记录一下自己使用docker安装mysql的过程。
我对比了一下。发现第一个是mysql官方推出的,而第二是docker自带library推出的。那么我肯定选择mysql官方推出的mysql了。
既然确定了要安装的包,那么就要开始拉取了。
上面是可以安装的版本。那么我肯定是安装latest的。
那么执行代码如下:
docker pull mysql/mysql-server
如果想要安装5.7版本的,可以执行以下命令:
docker pull mysql/mysql-server:5.7
好了等待之后,就安装成功了,接下来,我们看看我们在本地存储的镜像。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql/mysql-server latest 1fdf3806e715 5 weeks ago 309MB
接下来执行创建容器的命令。
docker run --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:latest
在这里要注意的是最后的:latest
,这个是可省略的。如果刚才安装的是指定版本,比如5.7,那么我们就需要执行以下命令了:
docker run --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7
好了,安装完成,就可以使用PHP进行连接测试了。
$pdo = new \PDO("mysql:host=127.0.0.1;dbname=mysql", "root", "123456");
$data = $pdo->query("select version()");
foreach($data as $item) {
var_dump($item);
}
会提示如下错误:
Host '172.17.0.1' is not allowed to connect to this MySQL server
那么我们只能登录mysql进行修改数据了,首先是登录mysql,密码就是我们设置的123456:
$ docker exec -it mysql1 mysql -uroot -p
Enter password:
然后执行如下命令:
use mysql;
update user set host = '%' where user = "root";
flush privileges;
我们继续测试PHP脚本,发现链接就正常了:
$ php ./demo.php
/Users/baoguoxiao/demo.php:5:
array(2) {
'version()' =>
string(6) "8.0.12"
[0] =>
string(6) "8.0.12"
}
docker logs mysql1
docker exec -it mysql1 bash
docker stop mysql1
docker start mysql1
docker restart mysql1
docker stop mysql1
docker rm mysql1
暂无
其实我们在创建container的时候就已经用了一个环境变量了,就是MYSQL_ROOT_PASSWORD
,现在我们来介绍一些其他的环境变量
MYSQL_ROOT_PASSWORD
设置了或者MYSQL_ALLOW_EMPTY_PASSWORD
设置为true了),意思是在启动docker容器时随机生成root密码。密码打印到日志中。查看随机密码的方式如下:
$ docker logs mysql1 2>&1 | grep GENERATED GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs MYSQL_ROOT_PASSWORD
设置了或者MYSQL_ALLOW_EMPTY_PASSWORD
设置为true了)root用户的密码设置为expired,必须先修改密码才能使用。
MYSQL_USER
和MSQL_PASSWORD
,则会创建用户并授予该数据库对应的用户权限。如果指定的数据库已经存在了,则该变量无效。
MYSQL_DATABASE
变量指定的数据库的超级用户权限。如果两个变量没有设置,则其他会被忽略。如果两个变量都已设置但是没有设置MYSQL_DATABASE
,则创建的用户没有任何权限。
172.17.0.1
(默认的docker网关IP)允许来自运行容器的主机的连接。但是该选项仅接受一条记录,但是允许使用通配符(例如,MYSQL_ROOT_HOST=172...*或MYSQL_ROOT_HOST=%)。
docker logs mysqld-container
进行查看。
history
查看命令历史从而获取创建的密码。所以最好是试用默认设置。