Docker搭建 LNMP 环境

2021-04-17  本文已影响0人  刘小白DOER

    今天继续在腾讯云逛逛,发现了腾讯云的开发者实验室,笔者在上面有很多实验都是基于云的真实标准的实验环境。笔者测试了两个,和笔者的虚拟机是一模一样的。现在根据实验,笔者在本地安装了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脚本。

上一篇 下一篇

猜你喜欢

热点阅读