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不要使用最新版本,坑很多。
一、构建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
docker-php-ext-install pdo_mysql
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
chown -R www-data:www-data www
四 、 测试
1、查看服务
docker ps -a
STATUS 皆为up ,即运行中
2、测试 php解析
在宿主机 /home/app/nginx/www/目录下修改 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
";
//你还可以进行一次搜索操作
// foreach ($dbh->query("SELECT * from user") as $row) {
// print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
// }
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "
");
}
访问ip , 到正确的输出,就证明我们的配置成功了。
docker下搭建MySQL+php-fpm+nginx容器环境相关教程