常用docker+mysql命令,这里不错操作
#docker search mysql #docker pull mysql #dockers pull mysql:5.6 #docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
拉取镜像:
docker pull nginx docker pull php:5.6-fpm docker pull mysql:5.7
新建目录:
mkdir -p /web/www/ mkdir -p /web/mysql/data mkdir -p /web/mysql/conf mkdir -p /web/mysql/conf. mkdir -p /web/nginx/conf.d
启动MYSQL:
docker run -dit --name=mysqldocker --restart=always -e MYSQL_ROOT_PASSWORD=123456 -p 8081:3306 -v /web/mysql/data:/var/lib/mysql -v /web/mysql/conf:/etc/mysql/conf.d -v /web/mysql/mysql_sock:/var/run/mysqld mysql:5.7
注意:
1.折腾一天始终连不上MYSQL的原因是空密码,但是我设置的是123456,为什么不起作用
2.这里测试这能用5.7版本,5.6和8.0都不能启动服务
3.允许空密码登录设置环境变量MYSQL_ALLOW_EMPTY_PASSWORD为yes:docker run --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.7
参数说明:
-dit -d是守护进程,-it是容器交互
–name mysqldocker指定容器名称为mysqldocker
--restart=always 指定容器在退出时总是自动重启
-e MYSQL_ROOT_PASSWORD=123456 初始化root用户的密码为123456
-p 8081:3306将容器的3306端口映射到主机的8081端口
-v /web/mysql/data:/var/lib/mysql 将主机/web/mysql/data目录挂载到容器数据库目录/var/lib/mysql
-v /web/mysql/conf:/etc/mysql/conf.d 将主机/web/mysql/conf/my.cnf挂载到容器配置路径/etc/mysql/my.cnf
-v /web/mysql/mysql_sock:/var/run/mysqld 将主机/web/mysql/mysql_sock目录挂载到容器/var/run/mysqld目录(为防止php容器无权限读取mysql容器的sock文件)
-d 后台运行
启动php-fpm:
docker run -dit --name=phpdocker --restart=always -p 8082:9000 -v /web/www/:/var/www/html -v /web/mysql/mysql_sock/:/var/run/mysqld --link mysqldocker:mysql php:5.6-fpm
参数说明:
-dit -d是守护进程,-it是容器交互
–name phpdocker指定容器的名称为phpdocker
--restart=always 指定容器在退出时总是自动重启
-p 8082:9000 将容器9000端口映射到主机的8082端口
-v /web/www:/var/www/html将主机的/web/www目录挂载到容器的/var/www/html目录
-v /web/mysql/mysql_sock:/var/run/mysqld 将主机/web/mysql/mysql_sock目录挂载到容器的/var/run/mysqld(为防止php容器无权限读取mysql容器的sock文件)
–link mysql:mysql 将mysql容器的网络并入phpdocker容器,实现容器间的通信
-d 保持后台运行
编辑nginx配置文件:
vi /web/nginx/conf.d/default.conf
填写内容:
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; include fastcgi_params; } }
启动nginx:
docker run -dit --name=nginxdocker --restart=always -p 8083:80 -v /web/www:/usr/share/nginx/html -v /web/nginx/conf.d:/etc/nginx/conf.d --link phpdocker:php nginx
参数说明:
-dit -d是守护进程,-it是容器交互
–name nginxdocker 指定当前容器名称为nginxdocker
--restart=always 指定容器在退出时总是自动重启
-p 8083:80 将容器的80端口映射到主机的8083端口
-v /web/www:/usr/share/nginx/html 将主机的/web/www目录挂载到容器的/usr/share/nginx/html
-v /web/nginx/conf.d:/etc/nginx/conf.d 将主机的 ~/web/nginx/conf.d 目录挂载到容器的 /etc/nginx/conf.d
–link phpdocker:php 将phpdocker容器的网络并入nginx容器,实现容器间的通信
创建index.php:
vi /web/www/index.php
输入内容:
<?php echo phpinfo();
访问:http://localhost:8083/
容器配置:
进入phpdocker容器:
docker ps docker exec -it 5f62382452fa /bin/bash whereis php cd /usr/local/bin
给php-fpm安装扩展:
./docker-php-ext-install mysql ./docker-php-ext-install mysqli ./docker-php-ext-install pdo
辅助命令:
重启php容器:docker restart 5f62382452fa
重启nginx容器:docker restart dcc061d5db49
重启mysql容器:docker restart 3bf50de17638
查看容器IP:docker inspect mysqldocker --format='{{.NetworkSettings.IPAddress}}'
查看容器IP:docker network inspect bridge | grep IPv4Address
查看容器IP:docker exec 5f62382452fa ifconfig
查看容器IP:ifconfig
查看容器IP:ip addr
查看容器IP:docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
在/web/www目录下新建mysql.php:
<?php $con = mysqli_connect("mysqldocker","root","123456","test"); if($con){ echo "连接成功"; }else{ echo "连接失败 "; } //$connection = new mysqli("172.17.0.3","root","123456","test"); //if ($connection->connect_error) { // die("连接失败: " . $connection->connect_error); //} //echo "连接成功";
注意连接地址不能用127.0.0.1,localhost,只能用容器名称或者容器IP,例如172.17.0.3
访问:http://localhost:8083/mysql.php
导出镜像导本地:
docker save -o php.tar php docker save -o mysql.tar mysql docker save -o nginx.tar nginx
导入已经导出的镜像:
docker load -i php.tar docker load -i mysql.tar docker load -i nginx.tar
容器之间互PING:
docker exec -it phpdocker ping mysqldocker
进入MYSQL容器:
docker exec -it mysqldocker mysql -u root -p
或者进入容器后:mysql -uroot -p
show databases;
use mysql;
select host from user where user='root';
update user set host = '%' where user ='root';
flush privileges;
创建user表示例:
create database news;
use news;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(20) DEFAULT NULL,
`password` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
INSERT INTO `user`(`id`,`username`,`password`) VALUES (1,'张三','123'),(2,'lisi','456');
其它相关命令:
show tables;//查看当前数据库的所有表
alter user 'root'@'%' identified with mysql_native_password by '123456';//更改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';//或者用这个更改密码
FLUSH PRIVILEGES;
select host, user, authentication_string, plugin from user; //查看root用户登录加密方式
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -e identified=mysql_native_password mysql:8.0.24//在容器启动时配置加密方式为mysql_native_password
Mysql编码问题解决办法:
1.修改my.cnf文件:
cd /etc/mysql/ //进入my.cnf文件中的目录
vim my.cnf //编辑my.cnf文件
2.出现bash: vim: command not found提示需要安装一下vim:
apt-get update
apt-get install vim -y
3. 在my.cnf文件中[mysql]下面添加default-character-set=utf8mb4,然后:wq退出,没有[mysql]的话就写一个,然后看一下mysql的字符集已变成utf8mb4了,这样就可以解决中文乱码问题了。
参考:https://www.dandelioncloud.cn/article/details/1673539787241533441