美文网首页
Docker搭建 LNMP 环境

Docker搭建 LNMP 环境

作者: 刘小白DOER | 来源:发表于2021-04-17 21:03 被阅读0次

        今天继续在腾讯云逛逛,发现了腾讯云的开发者实验室,笔者在上面有很多实验都是基于云的真实标准的实验环境。笔者测试了两个,和笔者的虚拟机是一模一样的。现在根据实验,笔者在本地安装了docker的ubuntu上来实验Docker搭建 LNMP 环境,用来开发测试。

    1、下载三个镜像

    docker pull nginx:alpine

    docker pull php:7-fpm-alpine

    docker pull postgres:alpine

    因PostgreSQL 更适合于容器化,所以使用选择PostgreSQL。

    2、使用 docker-compose 管理并启动

    通过pip安装 docker-compose,笔者的环境是基于python3

    sudo apt-get install -y python-pip && sudo pip install docker-compose

    建立docker_files目录,下目录里面操作yml文件。docker_files/docker-compose.yml

    version: "3"

    services:

      Nginx:

        image: nginx:alpine

        ports:

          - 80:80

        volumes:

          - ./web:/usr/share/nginx/html:ro

          - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

      PHP:

        image: undefined01/php:7-fpm-alpine

        volumes:

          - ./web:/var/www/html:rw

      Database:

        image: postgres:alpine

        environment:

          POSTGRES_USER: "postgres"

          POSTGRES_PASSWORD: "rootroot"

        volumes:

          - ./data:/var/lib/postgresql/data:rw

    image:表示该服务使用的镜像。

    ports:表示该服务开放的端口。

    volumes:表示将某目录或文件挂载到容器的相应位置上,后面的ro、rw表示对于容器是否可读写。此处挂载了配置文件、数据库和网站代码。

    enviornment:设置该容器的环境变量。此处通过环境变量的形式设置数据库的账号和密码。

    3、/docker_files新建nginx.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 容器与 php 容器通讯?nginx.conf里用到了PHP:9000这样的地址,让 nginx 能够将请求顺利的转交给 php 处理。由 docker-compose 启动的所有容器,都会自动加入由 docker 维护的局域网中,并且会自动为其他容器将某容器的名称(如PHP)解析成相应的局域网IP。

    4、启动LAMP服务

     运行命令创建:docker-compose up -d

    可以使用docker ps查看运行的容器。

    在/docker_files/web目录下新建index.php文件,内容如下:

    <?php

    phpinfo();

    ?>

    浏览器输入 localhost ,因笔者使用的是虚拟机的NAT,所以可以使用curl localhost 可以查看运行是否正常。

    6、测试pg数据库

    在/docker_files/web目录下新建pg.php文件。

    <?php

    $dbconn = pg_connect('host=Database user=postgres password=rootroot')

        or die('Could not connect: ' . pg_last_error());

    pg_query('CREATE TABLE IF NOT EXISTS test ( tester INT )');

    pg_query('INSERT INTO test VALUES (0)');

    $res = pg_query('SELECT * FROM test') or die('Query failed: ' . pg_last_error());

    $num = pg_num_rows($res);

    echo "You have visited this site $num times";

    pg_free_result($res);

    pg_close($dbconn);

    ?>

    使用 curl localhost/pg.php来测试:

        docker-compose down可以停止服务并自动销毁相应的容器,也可以docker-compose stop来停止服务,但是容器依然存在,可以使用docker ps -a来查看,停止后可以使用docker-compose start来重新启动服务。

        使用  docker-compose可以轻松而优雅地部署多种服务,nginx.conf里面的 PHP:9000可以处理时容器之间通信时,使ngin可以识别处理php脚本。

    相关文章

      网友评论

          本文标题:Docker搭建 LNMP 环境

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