美文网首页
docker配置lnmp环境

docker配置lnmp环境

作者: 月圆星繁 | 来源:发表于2019-12-16 10:38 被阅读0次

    安装docker

    按照官网上面安装就可以了

    拉取镜像文件

    一开始我拉取的都是latest镜像,后面我把docker run 这些镜像写在shell脚本中,去执行,发现有些状态是退出,然后一直没有成功,后面我就单独拿出来docker run又成功了。

    我shell脚本执行的时候如果后面没有带 TAG,就会一直起不来是退出状态,我也很诧异,百度也没能拯救我,所以后面我的都是带有版本的。

    创建目录

    mkdir  -p /myDocker/firstDemo/nginx/html  
    mkdir  -p /myDocker/firstDemo/nginx/log
    mkdir  -p /myDocker/firstDemo/nginx/conf.d
    

    编写三个shell文件:

    如果这几个shell脚本不能跑起来容器,那就直接将文件里面的内容拿出了跑吧。

    • docker_nginx.sh
    #!/usr/bin bash
    docker run -p 80:80 --name nginx \
    -v /myDocker/firstDemo/nginx/html:/usr/share/nginx/html \
    -v /myDocker/firstDemo/nginx/log/:/var/log/nginx \
    -v /myDocker/firstDemo/nginx/conf.d:/etc/nginx/conf.d \
    --privileged=true \
    -idt nginx:1.16
    
    • docker_php.sh
    #!/usr/bin bash
    docker run -p 9000:9000 --name php \
    -v /myDocker/firstDemo/nginx/html:/var/www/html/ \
    --privileged=true \
    -d php:7.2-fpm
    
    • docker_mysql.sh
    #!/usr/bin bash
    docker run -p 3306:3306 --name mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -v /usr/lib/mysql:/usr/lib/mysql \
    -d mysql:5.7
    
    执行shell脚本
    sh docker_nginx.sh
    sh docker_php.sh
    sh docker_mysql.sh
    

    编写nginx配置文件

    创建default.conf文件
    vim /myDocker/firstDemo/nginx/conf.d/default.conf
    
    nginx配置如下
    server {
        listen       80;   #监听80端口,接收http请求
        server_name  mgk.com;   #就是网站地址
        root /usr/share/nginx/html; # 准备存放代码工程的路径
        #路由到网站根目录www.example.com时候的处理
        location / {
            index index.php index index.html index.htm;   #跳转到mgk.com/index.php
            autoindex on;
        }   
    
         #当请求网站下php文件的时候,反向代理到php-fpm
         location ~ \.php$ {
            fastcgi_pass   172.16.236.190:9000; #nginx fastcgi进程监听的IP地址和端口,docker中要写内网的ip,127.0.0.1不行
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;#这里要写/var/www/html,不然 php fastcgi解析不了目录
            include        fastcgi_params;
        }
    }
    
    重启nginx
    docker restart nginx
    

    测试

    /myDocker/firstDemo/nginx/html中编写测试代码

    echo "<?php echo phpinfo(); ?>" > index.php

    然后浏览访问出现php相关信息。

    总结

    • 出现的很多问题:
      • 服务启不来然后直接docker run ...
      • nginx解析不了PHP,不是权限的问题,是nginx配置问题,上面的配置文件作了说明
    • 没有复杂的操作
      • PHP的扩展
      • MYSQL的使用测试
      • 其他服务的配置redis、swoole等

    补充说明:

    出现了502错误,检查了半天的nginx配置,后来发现反向代理地址配置有问题:
    proxy_pass http://127.0.0.1:8888;
    因为nginx在docker中,所以不能使用127.0.0.1:8888来访问宿主机里的nodejs应用,docker内部实际上实现了一个虚拟网桥docker0,所以要通过宿主机内网地址(192.168.102.1)来访问.

    补充php+mysql测试

    创建文件

    vim mysql.php

    编辑内容
    <?php 
        $link=mysqli_connect("172.16.236.190","root","root"); 
        if(!$link) echo "FAILD!连接错误,用户名密码不对"; 
        else echo "OK!可以连接"; 
    ?> 
    
    • 一开始会报错 mysql_connect()不可用,PHP7不支持,改用mysqli。
    • mysqli_connect()不可用,没有开扩展。
    • mysql连接的host写localhost报错,应该需要写内外ip

    解决mysqli扩展:

    1、先得进入容器:docker exec -it php_server /bin/bash
    2、然后运行 docker-php , 按两下tab键会有提示

    root@781322cc6de5:/var/www/html# docker-php-
    docker-php-entrypoint     docker-php-ext-configure  docker-php-ext-enable     docker-php-ext-install    docker-php-source 
    

    3、执行docker-php-ext-install mysqli
    4、重启php
    5、访问成功

    相关文章

      网友评论

          本文标题:docker配置lnmp环境

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