使用docker搭建PHP+nginx+mysql环境

常用命令

查看容器ip地址: docker inspect --format='{{.NetworkSettings.IPAddress}}' [容器名称]

安装nginx

  1. 下载镜像, 在终端命令行中执行以下代码:
> docker pull nginx:latest
  1. 创建一个 ningx 容器, 需要同步两个目录, 一个是项目目录, 一个是配置文件目录, 配置文件目录可不同步. 在终端命令行中执行以下代码:
> docker run --name [自定义名称] -p [本机IP]:80 -v [本机项目所在目录]:[容器中项目目录] -v [本机配置文件所在目录]:/etc/nginx/conf.d -d nginx
  1. 修改配置文件
server {
  listen       80;
  root [项目入口文件目录];
  location / {
    index  index.php index.html index.htm;
    autoindex on;
    if (!-e $request_filename) {
      rewrite  ^(.*)$  /index.php?s=/$1  last;
    }
  }

  location ~ .php$ {
    root           [项目入口文件目录];
    fastcgi_pass   [php-fpm的IP]:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

安装php

  1. 下载 php-fpm 镜像, 在终端命令行中执行以下代码:
> docker pull php:8.0.3-fpm
  1. 创建 php-fpm 容器, 因为php-fpm也需要有项目文件, 如果要有多个项目, 最好直接同步存储所有项目的目录, 这样更新任意项目, 在对应的 nginx 容器和此容器内都会更新
docker run -name [容器名称] -p 9000:9000 -v [所有项目目录]:[容器任意目录] -d php
  1. 更新 php-fpm 依赖, 进入容器内部执行以下命令:
> apt-get update
> apt-get install -y libfreetype6-dev libjpeg62-turbo-dev  libmcrypt-dev libpng-dev && docker-php-ext-install -j(nproc) iconv mcrypt && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j(nproc) gd
  1. 下载 pdo 相关依赖, 进入容器内部执行以下命令:
> cd /usr/local/bin
> docker-php-ext-install pdo_mysql
> docker-php-ext-install mysql
> docker-php-ext-install mysqli
  1. 修改 php.ini, 进入容器内部执行以下命令:
> php --ini                        # 此命令查看php.ini所在目录
> cd /usr/local/etc/php            # 进入php.ini所在的目录
> cp php.ini-production php.ini    # 复制php.ini
> vim php.ini                      # 编辑扩展文件
  1. php.ini 中, 将几个扩展开启:
extension_dir = "ext"     // 扩展目录
extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_xmlrpc.dll
extension=php_pdo_odbc.dll
extension=openssl

安装mysql

  1. 下载 mysql 镜像, 在终端命令行中执行以下代码:
> docker pull mysql:8.0.23
  1. 创建 mysql 容器, 在终端命令行中执行以下代码:
> docker run --name [自定义名称] -e MYSQL_ROOT_PASSWORD=[密码] -p 3306:3306 -d mysql
  1. 开放局域网连接, 在容器内执行以下命令:
> mysql -u root -p

执行此命令后, 将弹出输入密码的输入框, 输入密码. 输入密码后将进入mysql命令终端.

  • 方法一:
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
  • 方法二:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '[password]' WITH GRANT OPTION;
mysql> flush privileges;