前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker下搭建MySQL+php-fpm+nginx容器环境

docker下搭建MySQL+php-fpm+nginx容器环境

作者头像
菲宇
发布2019-06-11 17:48:16
2.9K0
发布2019-06-11 17:48:16
举报
文章被收录于专栏:菲宇菲宇

准备镜像

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

先准备好三个镜像

docker pull mysql:5.7

docker pull php:5.60-fpm

docker pull nginx:latest

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

一、构建mysql容器

代码语言:javascript
复制
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mysql:/var/lib/mysql --name your_mysql mysql:5.7

配置容器

代码语言:javascript
复制
docker exec -it   your_mysql    bash

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

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

此时可以使用客户端连接一下看看。

二、构建php-fpm容器

准备工作

php.ini 默认是不存在的

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

创建容器

代码语言:javascript
复制
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 

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

代码语言:javascript
复制
docker-php-ext-install pdo_mysql

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

并加入到php.ini

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
  }
}

创建容器

代码语言:javascript
复制
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,否则访问会有权限问题

代码语言:javascript
复制
chown -R www-data:www-data www

四 、 测试

1、查看服务

代码语言:javascript
复制
docker  ps -a

STATUS 皆为up ,即运行中

2、测试 php解析

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

代码语言:javascript
复制
<?php echo phpinfo();

3、测试mysql 链接

修改 index.php

代码语言:javascript
复制
<?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 , 到正确的输出,就证明我们的配置成功了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档