zoukankan      html  css  js  c++  java
  • docker下搭建MySQL+php-fpm+nginx容器环境

    准备镜像

    我使用的centos系统,docker-ce最新版本。

    先准备好三个镜像

    docker pull mysql:5.7

    docker pull php:5.6-fpm

    docker pull nginx:latest

    注意,mysql和php不要使用最新版本,坑很多。

    docker images #查看镜像

    一、构建mysql容器

    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=ziqin666 -v /mysql:/var/lib/mysql --name your_mysql mysql:5.7

    配置容器(进入容器)

    docker exec -it   your_mysql    bash

    进入之后,要对用户进行授权,以便使用远程连接

    连接mysql 输入密码:ziqin666 执行如下命令

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'ziqin666';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'ziqin666';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'ziqin666';
    FLUSH PRIVILEGES;

     此时可以使用客户端连接一下看看。(一定要把安全组规则对应端口打开)

    二、构建php-fpm容器

    准备工作

    php.ini 默认是不存在的

    在/home/app/phpfile文件夹下创建 php.ini文件和conf.d文件夹

    创建容器

     docker run -p 9000:9000 --name your_phpfpm -v /home/app/html:/var/www/html -v /home/app/phpfile:/usr/local/etc/php --link your_mysql:mysql  -d php:5.6-fpm
    

     命令说明:

    • --name your_phpfpm : 将容器命名为 your_phpfpm。
    • -v /home/app/html:/var/www/html : 将主机中项目的目录 /home/app/html 挂载到容器的 /var/www/html

    安装 pdo 以便后边测试数据库连接,在docker的php容器中可以这样来安装

    docker-php-ext-install pdo_mysql

    安装其他插件也可以使用这种办法

    并加入到php.ini

    extension=php_curl.dll
    extension=php_gd2.dll
    extension=php_mysql.dll
    extension=php_mysqli.dll
    extension=php_pdo_mysql.dll
    extension=php_pdo_odbc.dll
    extension=php_pdo.dll

    如果插件还不够就需要自己定制镜像

    FROM php:7.0.12-fpm
    MAINTAINER Tairy <tairyguo@gmail.com>
    
    WORKDIR /working
    RUN apt-get update --fix-missing && apt-get install -y 
        g++ autoconf bash git apt-utils libxml2-dev libcurl3-dev pkg-config 
        && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
        && echo "Asia/Shanghai" > /etc/timezone 
        && docker-php-ext-install iconv curl mbstring 
            xml json mcrypt mysqli pdo pdo_mysql zip 
        && docker-php-ext-configure gd 
            --with-gd 
            --with-freetype-dir=/usr/include/ 
            --with-png-dir=/usr/include/ 
            --with-jpeg-dir=/usr/include/ 
        && docker-php-ext-install gd 
        && docker-php-ext-enable gd 
        && pecl install /pecl/redis-3.0.0.tgz 
        && docker-php-ext-enable redis 
        && apt-get purge -y --auto-remove 
        && rm -rf /var/cache/apt/* 
        && rm -rf /var/lib/apt/lists/* 
        && rm -rf /pecl

    三、安装nginx

    配置文件目录:/home/app/nginx/conf.d (注释:没有的文件自主创建哈)

    在配置文件目录新建 default.conf

    server
    {
         listen 80;
         server_name localhost;
    
         location / { 
               root /usr/share/nginx/html; 
               index index.html index.htm; 
         }
          location ~ .php$ { 
               fastcgi_pass your_phpfpm:9000;  #此处写docker里边php 的名称: your_phpfpm
               fastcgi_index index.php; 
               fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
               include fastcgi_params; 
         } 
    
         error_page 500 502 503 504 /50x.html;
         location = /50x.html {
               root /usr/share/nginx/html;
         }
    }

    注释:这里遇到了个小问题nginx启动不了,把上面的配置项中的所有tab空格重新换成空格键敲出来的空格,当然你也可以直接复制我上面的,因为它是正确的

    创建容器

    docker run -p 81:80  --name your_nginx 
       -v /home/app/nginx/www:/usr/share/nginx/html 
       -v /home/app/nginx/conf.d:/etc/nginx/conf.d 
       --link your_phpfpm:phpfpm  
       -d nginx:latest

    映射容器中的phpfpm和mysql都为固定,不能修改!

    这里需要配置nginx使用用户,即把/etc/nginx/nginx.conf里的nginx用户修改为www-data,

     

    同时把/home/app/nginx/www下的文件所有者改为www-data:www-data,否则访问会有权限问题

    chown -R www-data:www-data www

    四 、 测试

    1、查看服务

    docker  ps -a

    STATUS 皆为up ,即运行中

    2、测试 php解析

    宿主机 /home/app/nginx/www/目录下修改 index.php 文件。

    <?php echo phpinfo();

    3、测试mysql 链接

    修改 index.php

    <?php
    //echo phpinfo();
    $dbms='mysql';     //数据库类型
    $host='your_mysql'; //数据库主机名,此处写mysql 容器的名字
    $dbport = '3306';
    $dbName='mysql';    //使用的数据库
    $user='root';      //数据库连接用户名
    $pass='123456';          //对应的密码
    $dsn="$dbms:host=$host;port=$dbport;dbname=$dbName";
    
    try {
        $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
        echo "successful<br/>";
       //你还可以进行一次搜索操作
        // foreach ($dbh->query('SELECT * from user') as $row) {
        //     print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
        // }
        
        $dbh = null;
    } catch (PDOException $e) {
        die ("Error!: " . $e->getMessage() . "<br/>");
    }

    访问ip , 到正确的输出,就证明我们的配置成功了。

  • 相关阅读:
    将n个不同的球放到m个相同的袋子里有多少种方案?

    平面分割直线2
    差分
    并查集(UnionFind)
    约瑟夫环公式
    Kruskal
    线性欧拉筛
    SPAF
    Dijkstra
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/12933974.html
Copyright © 2011-2022 走看看