Docker搭建nginx+php5.6+mysql5.7开发环境

Docker   2023-12-07 10:03   142   0  

常用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

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。