当前位置:   article > 正文

docker-compose搭建lnmp环境_lnmp docker-compose

lnmp docker-compose

使用命令创建文件和文件夹

mkdir -p {php,nginx/{,conf.d},www,mysql}
touch nginx/conf.d/php.conf
touch nginx/nginx.conf
touch php/php.ini
touch www/index.php
  • 1
  • 2
  • 3
  • 4
  • 5

将以下代码保存为docker-compose.yml文件


version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./www/:/www:rw
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - php

  php:
    image: php:7-fpm
    container_name: php
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./www:/var/www/html
      - ./php/php.ini:/usr/local/etc/php/php.ini
      - ./php/php-extensions:/usr/local/lib/php/extensions
      - ./mysql:/var/lib/mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_HOST=mysql
      - MYSQL_USER=root
      - MYSQL_PASSWORD=123456
      - MYSQL_DATABASE=mydb
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7.24
    container_name: mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=mydb
    command: "--default-authentication-plugin=mysql_native_password --server-id=1  --log-bin=mysql-bin --binlog-format=ROW --lower-case-table-names=1 --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  --max_connections=3000  --event_scheduler=on --expire_logs_days=7 --socket=/var/lib/mysql/mysql.sock"
    ports:
      - "3306:3306"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mysql:/var/lib/mysql

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

其中,nginx使用的是最新版本的nginx镜像,监听80端口,将本地的nginx.conf文件挂载到容器的/etc/nginx/nginx.conf路径下。

php使用的是php:7-fpm镜像,将本地的www目录挂载到容器的/var/www/html路径下,将本地的php.ini文件挂载到容器的/usr/local/etc/php/php.ini路径下,设置了连接mysql数据库的环境变量。

mysql使用的是mysql:5.7镜像,设置了root用户的密码和创建的数据库名称,并监听3306端口,将本地的mysql目录挂载到容器的/var/lib/mysql路径下。

在本地创建一个www目录,然后在该目录下创建一个index.php文件,内容如下:

<?php
$servername = "mysql";
$username = "root";
$password = "123456";

// 创建连接
$conn = new mysqli($servername, $username, $password);

// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

该文件是一个简单的mysql连接测试文件,使用mysqli连接mysql数据库,连接成功后输出“连接成功”。

在本地创建一个nginx目录, 然后在该目录下创建一个nginx.conf文件,内容如下:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

在本地创建一个nginx/conf.d目录 然后在该目录下创建一个php.conf文件,内容如下:

server {
    listen       80;
    root   /www;
    index   index.html index.htm index.php;


    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location / {
        index  index.html index.htm index.php ;
        try_files $uri $uri/ /index.php?$query_string;
        autoindex  on;
    }


    location ~ \.php$ {
        #php73是容器命名
        root   /var/www/html;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

该文件是一个简单的nginx配置文件,监听80端口,将/var/www/html目录设置为根目录,将php文件的请求转发到php容器的9000端口处理。

在本地创建一个php目录 然后在该目录下创建一个php.ini文件,内容如下:

memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
date.timezone = Asia/Shanghai
pdo_mysql.default_socket= /var/lib/mysql/mysql.sock
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/mysqli.so
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo_mysql.so
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/pdo.so
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
docker-compose up -d
  • 1

接下来给php安装msyql扩展

docker exec -it php bash #进入php容器

docker-php-ext-install pdo pdo_mysql mysqli
docker-php-ext-enable pdo pdo_mysql mysqli

#退出容器后重启容器
exit
docker restart php
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

等待容器启动完成后,访问http://localhost,即可看到“连接成功”的输出。

注意:在执行docker-compose up -d命令之前,需要先在本地创建好www和mysql目录,并将上述代码保存为docker-compose.yml、index.php和nginx.conf文件。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/829054
推荐阅读
相关标签
  

闽ICP备14008679号