美文网首页
docker上 利用centos镜像搭建lnmp环境

docker上 利用centos镜像搭建lnmp环境

作者: 蛐蛐儿阳 | 来源:发表于2020-03-15 19:29 被阅读0次

    前言:
    学完docker有一阵子了,早就想用这个练练手,这不今天有空,就来折腾一把。其实坑我都踩的差不多了,今天就算总结一下。
    首先拉下镜像

    docker pull centos
    

    现在的镜像速度快多了,不像几年前必须换国内地址才能用。
    下面是开启容器代码

    docker run -itd  -p 6001:80 -p 6002:3306 -p 6003:9000 -p 6004:6379 -v /Users/guanliyang/php:/data/ --name centos --privileged=true 470671670cac /sbin/init
    

    其实没-itd 也能用,没有-d的话,exit退出时,容器也停止。没-it, 容器开启后不是启动状态,需手动启动下。
    -p 指定端口, 80是我们的浏览器端口,3006是数据库mysql默认端口,9000是php-fpm默认端口,这个其实可以省略,因为我们外部不需要这个端口,6379是redis默认端口。
    -v 指定挂载目录data
    --name 是我给容器起个名字。
    --privileged=true 和/sbin/init 是让systemctl命令可用,启动成功后进入容器

    docker exec -it 容器名字或id  /bin/bash
    

    先装nginx

    yum install nginx
    

    别笑,我们采用了这种最简单的安装,而不是编译安装,其实编译安装更好玩儿一些,会多敲很多下键盘,但我实在玩腻了。
    你会多敲几下 y, 让安装继续,不想敲y,可以换下命令

    yum install -y nginx
    

    nginx,被我们敲烂的几行代码这里敲一下

    nginx -h   #帮助
    nginx -c /etc/nginx/nginx.conf   #让配置文件生效,你需要先执行下次语句,再启动nginx。
    #好多时候你改了配置文件,都得运行下此语句,再启动nginx。你可以故意写错配置文件,再执行此语句。
    #它甚至可以把你配置错误的行号打印出来。
    nginx -s reload #重启
    

    那么直接访问下http://localhost:6001/
    你就能看到欢迎页面。
    我们要更换下nginx访问目录,改成我们挂载的目录。

    yum install vim #我比较习惯用vim,裸机当然木有,安装下。
    #绝大多数刚刚安装好的系统,vim是没有的,但都有vi
    vim /etc/nginx/nginx.conf
    # 看着有些闹心, 好多配置我们是不需要的,我现在只改下server里面的root目录
    root         /usr/share/nginx/html;
    #改成
    root         /data;
    #就是改成我们的映射目录,然后重启
     nginx -s reload
    #data下准备个index.html文件,刷新下地址,可以正常访问
    

    安装php \color{red}{这里切记里面配置 我listen = 后面忘写端口号了, 报错找了半天}

    yum install php
    php -v #查看php版本
    php-fpm #启动php
    # 这里报错 未发现/run/php-fpm/www.sock文件
    #需要我们改下配置
    vim /etc/php-fpm.d/www.conf
    #这里会卡住很多人,我直接贴配置
    listen.owner = nginx
    listen.group = nginx
    listen = 127.0.0.1:9000
    user = nginx
    group = nginx
    #这里我们指定开启php-fpm进程的用户是nginx
    #但还是报错,nginx用户并没有创建文件的权限
    #我们手动创建下文件
    /run/php-fpm/php-fpm.pid
    #再直接启动
    php-fpm
    #启动成功,好玩的是你去看我们创建的文件,它只写入了主进程id号
    

    下面我们修改下nginx配置文件,让它支持php

    vim /etc/nginx/nginx.conf  
    #一个被我配置烂了的文件
    #我就直接贴server{}里的内容了
        server {
            listen       80;
           # listen       [::]:80 default_server;
           # server_name  _;
            root         /data;
            location / {
               if (!-e $request_filename) {
                    rewrite  ^(.*)$  /index.php?s=/$1  last;
                }
                   index index.html index.htm index.php;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
             location ~ ^/assets/.*\.php$ {
                 deny all;
             }
    
             location ~ \.php$ {
                 include fastcgi_params;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                 fastcgi_pass 127.0.0.1:9000;
                 try_files $uri =404;
             }
        }
    #那个if写法是支持TP的配置
    #我们去目录下新建一个index.php文件,内容是
    echo $_SERVER['SERVER_ADDR'];
    phpinfo();
    #我看到第一行输出的ip是172.17.0.6
    #我们安装下ifconfig命令
    yum install net-tools
    #然后查看下ip确实是172.17.0.6
    

    然后我们安装下数据库

    #这里不要直接
    yum install mysql
    #这样安装成功后,你连启动命令也找不到。写mysql的大佬,自mysql被甲骨文收购后,
    #在甲骨文工作了几年,因为理念不合离职了,自己mysql名字也算是甲骨文的版权,
    #于是他改了个名mariadb, 八卦想看的自行百度,这里我们安装mariadb
    yum install mariadb mariadb-server
    #mariadb 客户端        
    #mariadb-server 服务器
    # 自己理解下,其实我们只安装mariadb-server就可以
    #启动服务
    systemctl restart mariadb
    #相关命令自行google下,无非就是启动,暂停,重启,查看状态,开机启动等等
    mysql -uroot #就可以进入数据库了
    #这时我们用主机,直接连数据库是连不上的,默认mysql都不支持远程ip链接,得开下权限。这里我们新建一个用户
    create user 'guanliyang'@'%'  IDENTIFIED BY '123456';
    #给权限
    GRANT ALL ON *.* TO 'guanliyang'@'%';
    #这里我们用户是新建的,不用刷新权限,更不用重启服务,链接证明连上了。
    ip:localhost
    端口:6002 # 我们开容器的时候 6002:3306
    用户名:guanliyang
    密码:123456
    

    好,最后一步是php链接mysql,我们查看下phpinfo(); 发现pdo我们还没安装,先安装一下。

    yum install php-pdo
    yum install php-pdo_mysql
    #重启php-fpm
    

    好,准备测试php链接数据库代码

    <?php
    try {
        $dbh = new PDO('mysql:host=localhost;port=6002;dbname=mysql', 'guanliyang', '123456');
        foreach($dbh->query('SELECT * from user') as $row) {
            print_r($row);
        }
        $dbh = null;
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
    ?>
    

    嗯哼,一次成功。
    我们6002是映射到本机的端口。至此,大工告成。

    感觉好多,自己读了一遍感觉好少,再添加点内容吧,你可以导出镜像,上传到docker云,这样就永远不怕丢失了。这里有两点“无趣”的地方。
    1,上传速度还行,但下载自己镜像时速度巨慢。
    2,不要相信镜像大小。centos本身,在docker images 时大概237MB,但你导出本地的images,标志的是1.3G左右。上传后,273M左右。
    嗯?我一度怀疑我导出的只是centos,但你下载下来,里面又确实安装的软件一个不少。
    我的猜测是: 所谓的云嘛,就是不存储重复文件。
    命令很简单,就随便敲两下代码以示结束

    docker save ***
    docker tag ***
    docker push ***
    docker pull ***
    

    哦,我还给redis留了个端口,下次再说吧...

    相关文章

      网友评论

          本文标题:docker上 利用centos镜像搭建lnmp环境

          本文链接:https://www.haomeiwen.com/subject/rgluehtx.html