Docker搭建LNMP

1 篇文章 0 订阅

Docker搭建LNMP环境

  1. 准备工作

    #docker拉取mysql,php,nginx镜像
    docker pull mysql:5.6
    docker pull nginx
    docker pull php:7.2-fpm
    

    查看

    docker images
    在这里插入图片描述

  2. 运行容器

    1.启动mysql容器
       docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.6
       
     2.启动php容器
       docker run -d \
       -p 9000:9000 \
       -v /mnt/www/html:/var/www/html \
       --link mysql:mysql \
       --name php7 php:7.2-fpm
       
         #建立文件:
         cd /mnt/www/html
         touch index.php   # phpinfo();
     
        #在php容器中安装mysql扩展
        docker-php-ext-install pdo_mysql
        docker-php-ext-install mysqli
        
        #在容器里查看扩展模块
     	php -m
        
    3.启动nginx容器
      docker run -d -p 80:80 -v /mnt/www/html:/var/www/html -v /mnt/nginx/conf/conf.d:/etc/nginx/conf.d  --link php7:phpfpm --name nginx nginx:latest
     或者
     docker run -d -p 80:80 \
     -v /mnt/www/html:/usr/share/nginx/html \
     -v /mnt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
     -v /mnt/nginx/conf/conf.d:/etc/nginx/conf.d \
     --link php7:phpfpm \
     --name nginx nginx:latest
    
    
     说明:-v ~/nginx/conf/conf.d:/etc/nginx/conf.d
     实现容器和主机之间的数据共享,即主机的/nginx/conf/conf.d目录与容器中的/etc/nginx/conf.d目录数据共享,这样在宿主机中就可以操作容器里面的配置(数据卷volume运用)
    
    

    启动Nginx关联php时失败N次

     #循序渐进
      #首先简单启动Nginx
     docker run -d -p 81:80 \
     -v /mnt/www/html:/usr/share/nginx/html \
     -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf \
     -v /etc/nginx/conf.d:/etc/nginx/conf.d  \
     --name nginx1 nginx
     #成功启动且访问了主机的/mnt/www/html/index.html 文件
     #但是访问index.php时却成了下载项(PHP与Nginx没有关联起来的原因)
     
     #启动并关联上PHP-fpm
     docker run -d -p 81:80 \
     -v /mnt/www/html:/usr/share/nginx/html \
     -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf \
     -v /etc/nginx/conf.d:/etc/nginx/conf.d  \
     -v /mnt/hosts:/etc/hosts \
     --link php7:phpfpm \
     --name nginx1 nginx
    
    #运行还是出现问题 :  File not found.&& Primary script unknown && "GET /index.php" 404
    # 分析:如果"GET /"后面接的是404,这意味着nginx正确的将请求传达给了php-fpm
    #碰到进容器后无权限,要在-v挂载后加-privileged=true
    
    docker run -d -p 82:80 \
     -v /mnt/www/html:/var/www/html\
      -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf \
     -v /etc/nginx/conf.d:/etc/nginx/conf.d  \
      -v /mnt/hosts:/etc/hosts \
     --privileged=true \
     --link php7:phpfpm \
     --name nginx2 nginx
    
      #终于成功!
      
    

    在这里插入图片描述

	进入conf.d目录中编辑文件
	location ~ \.php$ {
    root           /var/www/html;
    fastcgi_index  index.php;
    fastcgi_pass   phpfpm:9000;//这里改成我们之前--link进来的容器,也可以直接用php容器的ip
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;//如果你的根目录和php容器的根目录不一样,这里的$document_root需要换成你php下的根目录,不然php就找不到文件了
    include        fastcgi_params;                                                                                                                                              
}

参数说明
-t 在容器里生产一个伪终端
-i 对容器内的标准输入 (STDIN) 进行交互
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-v 添加目录映射,即主机上的/var/nginx/www/html和容器中/var/www/html目录是同步的
–name 容器的名字
–link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。
docker inspect 容器ID 查看容器的数据券是否挂载成功

  1. 测试运行

查询虚拟机端口号 ifconfig -> 192.168.19.101
在这里插入图片描述在这里插入图片描述在这里插入图片描述

无法访问此网站192.168.19.101 拒绝了我们的连接请求

Nginx没有启动成功

在使用docker容器时,有可能没有安装vi,
安装vi : apt-get install vim
如果提示:Unable to locate package vim
则需要敲:apt-get update, 等更新完毕以后再敲命令: apt-get install vim

访问php文件的时候不解析,直接下载

1、确定你能够正常访问php的容器(端口有没有开放、容器内能不能ping通)
2、fastcgi_pass是不是正确的php-fpm的地址
在不同的容器,
nginx配置文件中需要写成类似下面的
php:9000
其中php表示你的php(php-fpm)容器名称
还要使用–network指定nginx和php使用相同的网络

docker PHP+nginx : File not found. && Primary script unknown. && “GET /index.php” 404
在这里插入图片描述>出现这种情况的原因是

一是说:
nginx容器和php-fpm容器,
使用了不同的html映射目录或数据卷。
解决的方法是:
nginx容器的html映射到宿主目录,
在php-fpm(php)容器也要做相同的映射
二是:
分析:如果"GET /"后面接的是404,这意味着nginx正确的将请求传达给了php-fpm
#碰到进容器后无权限,要在-v挂载后加-privileged=true
(本人是通过第二种方法解析php成功!)

Docker日志: docker logs -f --tail 1 php7

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.248.1, server: 115.182.68.147, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://172.18.0.2:9000", host: "192.168.248.129"


问题原因:
php默认监听的是本地的9000端口

解决方法:
修改php-fpm所在容器的/etc/php-fpm.d/www.conf文件
把listen = 127.0.0.1:9000修改为
listen = 0.0.0.0:9000

辅助命令

# 查看容器所有状态信息
docker inspect NAMES 

# 查看 容器ip 地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' ID/NAMES

# 容器运行状态
docker inspect --format '{{.Name}} {{.State.Running}}' NAMES

#查看容器进程
docker top NAMES

#查看容器端口
docker port ID/NAMES
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值