docker 搭建nginx php mysql_docker下如何搭建MySQL+php-fpm+nginx容器环境,本文详解

本文介绍了如何在Docker环境下搭建MySQL 5.7、PHP 5.6-fpm和Nginx容器。首先,通过拉取镜像开始,然后分别构建并配置MySQL和php-fpm容器,包括授权设置和安装必要的PHP扩展。接着,部署Nginx容器,配置默认站点以代理PHP请求,并解决权限问题。最后,通过测试PHP解析和MySQL连接验证配置成功。
摘要由CSDN通过智能技术生成

准备镜像

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

先准备好三个镜像

docker pull mysql:5.7

docker pull php:5.6-fpm

docker pull nginx:latest

注意,mysql和php不要使用最新版本,坑很多。另外注意:很多人在学Java高级过程中难免会遇到各种问题解决不了。为此我建了个裙 783802103,里面很多架构师一起交流解答,薪资低于8k的勿进哦!

c15de7eec8c172648a9ae19c49257c63.png

docker images #查看镜像

cdb42fda04cde43a643a9a02639117cf.png

一、构建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;

21af826c665bf171a25dce31f6fbf287.png

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

2bd6ff32a0013cec2faaa07f32ce1bb8.png

二、构建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

ee0e6187afc506f2bc57679d4e0bb4f3.png

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

docker-php-ext-install pdo_mysql

287412a759dc6b0223df0c47af09598e.png

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

并加入到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

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;

}

}

创建容器

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

0c274be00a996056831dde134e81c662.png

映射容器中的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 文件。

1620

3、测试mysql 链接

修改 index.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
";

//你还可以进行一次搜索操作

// foreach ($dbh->query("SELECT * from user") as $row) {

// print_r($row); //你可以用 echo($GLOBAL); 来看到这些值

// }

$dbh = null;

} catch (PDOException $e) {

die ("Error!: " . $e->getMessage() . "
");

}

访问ip , 到正确的输出,就证明我们的配置成功了。最后注意:很多人在学Java高级过程中难免会遇到各种问题解决不了。为此我建了个裙 783802103,里面很多架构师一起交流解答,没基础勿进哦!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值