docker 简单搭建lnmp环境

本文详细介绍了如何在Ubuntu 16环境中使用Docker搭建LNMP(Nginx, PHP-FPM)环境。首先,通过Docker拉取Nginx镜像并启动容器,然后将宿主机目录挂载到容器中,接着配置Nginx以显示自定义内容。随后,拉取PHP-FPM镜像,并解决跨容器通信问题,通过--link参数或--network指定网络实现Nginx与PHP-FPM的连接。最后,成功运行并访问PHP文件,显示phpinfo()。" 119183742,9636156,C#计算连续输入数的差值,['C#'],"['C#', '编程', '计算', '差值', '序列', '用户输入']
摘要由CSDN通过智能技术生成

1.环境

ubuntu16 vscode  docker  docker compose

2.步骤

2.1 拉取nginx镜像

docker pull nginx

启动容器

docker run -rm --name my-nginx -p 8080:80 nginx

--rm 容器停止后可以自动清理容器和相关文件系统,方便调试,避免每次都手动删除然后重启

--name 为容器命名

-p 宿主机8080 端口映射到容器80端口

此时一个ngixn容器已经跑起来了 在宿主机浏览器 输入localhost:8080 便可以正常访问

2.2 指定宿主机目录

在系统创建一个目录 创建一个文件 index.html 里面输入123456

删除之前的容器重新执行命令

docker run --rm --name test-nginx -p 8080:80 -v /docker/www:/usr/share/nginx/html nginx

此时再访问浏览器 localhost:8080 此时打印123456

2.3让nginx配置挂在宿主机文件

我们新建一个nginx  config文件

server {
    root /usr/share/nginx/html;
    index  index.html index.php;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
 
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

再新增一个PHP文件 输出 phpinfo()

目录结构如下

删除之前容器再次运行如下命令

 

docker run --rm --name test-nginx -p 8080:80 -v /docker/www:/usr/share/nginx/html -v/docker/nginx:/etc/nginx/conf.d  nginx


3.拉取php-fpm镜像

docker pull php:fpm

docker run --rm --name php-app php:fpm

此时再次输入localhost:8080/index.php  报502错误 无可用的 cgi

我们请求php文件把这个请求交给php-fpm处理 但是nginx请求fpm的时候请求不了,因为之前的同一台机器里一个机器的各个端口只要处理好可以容易互通,但是现在跨容器怎么关联呢

4.容器的互联

容器是一个虚拟出来的盒子,每个容器都相当于一个进程级别的虚拟环境

4.1 使用--link参数指定连接容器

修改我们刚才创建的ngixn配置文件

server {
    root /usr/share/nginx/html;
    index  index.html index.php;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
 
    location ~ \.php$ {
        fastcgi_pass php-app:9000; # php-app就是我们刚才启动的fpm容器名称
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

增加link 参数重启

 docker run --rm --name test-nginx -p 8080:80 -v /docker/www:/usr/share/nginx/html -v /docker/nginx/:/etc/nginx/conf.d  --link php-app nginx

刷新页面报错file not found 这是因为还没有 为fmp挂载项目代码

继续修改配置文件

server {
    root /usr/share/nginx/html;
    index  index.html index.php;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
 
    location ~ \.php$ {
        root /var/www/html; #php-fpm 默认的根目录
        fastcgi_pass php-app:9000; # php-app就是我们刚才启动的fpm容器名称
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

执行fpm挂载项目根目录 重启

 docker run --rm --name php-app -v /docker/www:/var/www/html php:fpm

 

再次刷新页面 出现phpinfo

4.2.使用 --network 指定使用的容器网络实现互联

1,手动创建一个网络

docker network create my-php-network

2,重启fpm 用 --network 显试的声明使用网络

docker run --rm --name php-app --network my-php-network -v /docker/www:/var/www/html php:fpm

2,重启ngixn用 --network 显试的声明使用网络

docker run --rm --name test-nginx -p 8080:80 -v /docker/www:/usr/share/nginx/html -v /docker/nginx/:/etc/nginx/conf.d  --network my-php-network nginx

刷新页面 同样显示phpinfo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值