Docker Compose部署LNMP架构

  • 首先在项目根目录下编写一个docker-compose.yml文件
services:
  web:
    image: nginx:latest
    restart: always
    ports:
      - 80:80
    volumes:
      - /data/lnmp/nginx/conf.d:/etc/nginx/conf.d
      - /data/lnmp/nginx/html:/usr/share/nginx/html
      - /data/lnmp/nginx/log:/var/log/nginx
    depends_on:
      - php
      - mysql
    networks:
      - lnmp-network
  php:
    image: php:7.4-fpm
    restart: always
    volumes:
      - /data/lnmp/nginx/html:/usr/share/nginx/html
    networks:
      - lnmp-network
    depends_on:
      - mysql
  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - /data/lnmp/dbdata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: login
    networks:
      - lnmp-network
networks:
  lnmp-network:
    driver: bridge
volumes:
  dbdata: null
  • 运行docker-compose.yml
[root@localhost lnmp]# docker compose up -d
[root@localhost lnmp]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                 NAMES
825b8630de47   nginx:latest   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp   lnmp-web-1
d1d6339ba0d7   lnmp-php       "docker-php-entrypoi…"   4 minutes ago   Up 4 minutes   9000/tcp                              lnmp-php-1
109672c0b1f0   mysql:5.7      "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   3306/tcp, 33060/tcp                   lnmp-mysql-1
  • 在/data/lnmp/nginx/conf.d/nginx.conf中写入nginx的配置文件
server {
        listen 80;
        root /usr/share/nginx/html;
        location / {
                index index.php index.html;
         }

        location ~ \.php$ {
                fastcgi_pass php:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
         }
}
  • 准备探针测试一下
    在/data/lnmp/nginx/html/info.php中准备php探针
<?php
    phpinfo();
?>

在这里插入图片描述
测试数据库连接
在/data/lnmp/nginx/html/mysql.php中准备探针

<?php
    $dbhost = "mysql";
    $dbuser = "root";
    $dbpass = "123456";
    $db = "login";
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $db) or exit("数据库连接失败!");
    echo "数据库连接成功";
?>

访问后会发现廉洁数据库会出现错误,那是因为php官方构建的php没有mysqli模块,所以我们需要定制带有mysqli模块的php,在项目根目录编写如下dockerfile

FROM php:7.4-fpm
ENV: TZ=Asia/Shanghai
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
  && sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list \
  && sed -i -e 's|security.debian.org/\? |security.debian.org/debian-security |g' \
  -e 's|security.debian.org|mirrors.ustc.edu.cn|g' \
  -e 's|deb.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' \
  /etc/apt/sources.list \
  && apt-get update && apt-get install -y \
  libfreetype6-dev \
  libjpeg62-turbo-dev \
  libpng-dev \
  && docker-php-ext-configure gd -with-freetype -with-jpeg \
  && docker-php-ext-install -j$(nproc) gd mysqli && docker-php-ext-enable mysqli

然后修改docker-compose.yml

# docker-compose build lnmp

services:
  web:
    image: nginx:latest
    restart: always
    ports:
      - 80:80
    volumes:
      - /data/lnmp/nginx/conf.d:/etc/nginx/conf.d
      - /data/lnmp/nginx/html:/usr/share/nginx/html
      - /data/lnmp/nginx/log:/var/log/nginx
    depends_on:
      - php
      - mysql
    networks:
      - lnmp-network
  php:
    # image: dockerfile:php:7.4-fpm
    # 这里来让compose自动构建,指定dockerfile的文件位置即可
    build:
      context: .
      dockerfile: dockerfile
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - /data/lnmp/nginx/html:/usr/share/nginx/html
    networks:
      - lnmp-network
    depends_on:
      - mysql
  mysql:
    image: mysql:5.7
    restart: always
    volumes:
      - /data/lnmp/dbdata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_DATABASE: login
    networks:
      - lnmp-network
networks:
  lnmp-network:
    driver: bridge
volumes:
  dbdata: null

然后再次运行测试

[root@localhost lnmp]# docker compose up -d
[root@localhost lnmp]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                 NAMES
825b8630de47   nginx:latest   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp   lnmp-web-1
d1d6339ba0d7   lnmp-php       "docker-php-entrypoi…"   4 minutes ago   Up 4 minutes   9000/tcp                              lnmp-php-1
109672c0b1f0   mysql:5.7      "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   3306/tcp, 33060/tcp                   lnmp-mysql-1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值