Docker-Compose快速搭建LNMP

发布时间 2023-04-02 22:35:06作者: 小白一号(本降专)

Docker-Compose

1.安装Docker

sudo apt -y install docker.io

docker version 查看版本号

docker help 查看帮助文档


2.更换镜像源

sudo su -
cat >> /etc/docker/daemon.json <<- EOF
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
systemctl restart docker
exit

3.下载镜像

sudo docker pull nginx:alpine

sudo docker pull php:7-fpm-alpine

sudo docker pull postgres:alpine


4.启动容器

sudo docker run --rm -d -p 80:80 --name nginx nginx:alpine
  • 这个命令中涉及到的参数有:
    -- rm:表示这个容器执行完后会被直接销毁。
    --name:指定这个容器的名称。
    -d:表示这个容器会在后台运行。
    -p:表示开放容器的80端口到主机的80端口。
    -v:表示将nginx的配置文件挂载到容器的对应目录下。
  • localhost:80访问nginx

5.停止容器

docker stop dockerId

6.安装docker-compose工具

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

7.配置docker-compose.yml

touch ~/docker/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
# ./ 指.yml所在的路径
  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
  • 这个配置文件中涉及到的参数有:
    • version:表示这个配置文件使用第三套标准。
    • services:表示需要启动的服务(容器)列表。
  • 对于每一个服务,又有:image:表示该服务使用的镜像。
    • ports:表示该服务开放的端口。
    • volumes:表示将某目录或文件挂载到容器的相应位置上,后面的ro、rw表示于容器是否可读写。此处挂载了配置文件、数据库和网站代码。
    • enviornment:设置该容器的环境变量。此处通过环境变量的形式设置数据库的账号和密码。

8.配置nginx.conf

touch ./nginx.conf #docker-compose.yml所在路径

截图

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;
    }
}

9.启动docker-compose

sudo docker-compose up -d

sudo docker container ls #查看启动服务
  • 给映射文件夹赋权限,避免没有权限而导致的访问失败
sudo chmod -R 777 ./data ./web

10.测试

  • 创建index.php touch ~/docker/web/index.php
<?php
phpinfo();
?>
  • 创建test.php touch ~/docker/web/test.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);
?>
  • 停止服务
    sudo docker-compose stop