docker搭建nginx+php+mysql的容器
docker run 参数说明
docker run 命令为执行运行一个容器,参数如下
- --name 为容器指定一个名称
- --privileged 是否让docker 应用容器 获取宿主机root权限(特殊权限-)
- -i 以交互模式运行容器,通常与-t同时使用
- -t 为容器重新分配一个伪输入终端,通常与-i同时使用
- -p 将容器的80端口映射到主机的8080端口
- -v 将宿主机上的目录挂载到镜像里
- --link 添加链接到另一个容器
- -d 后台运行容器,并返回容器id
- -m 设置容器使用内存最大值
- -h 指定容器的hostname
运行mysql容器
docker run -p 3306:3306 --name dream.mysql \
-v C:/Users/tong/docker/data2/mysql/conf:/etc/mysql \
-v C:/Users/tong/docker/data2/mysql/logs:/logs \
-v C:/Users/tong/docker/data2/mysql/data:/mysql_data \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.6
上面命令创建了一个名为dream.mysql
的容器,并且映射容器内的3306到本地3306端口,挂载了logs目录和mysql_data目录,设置登录密码为123456
运行php容器
docker run --name dream.php -d \
-v C:/Users/tong/docker/data2/nginx/html:/var/www/html:ro \
-v C:/Users/tong/docker/data2/php:/usr/local/etc/php \
php:5.6-fpm
- -v挂载目录 C:/Users/tong/docker/data2/nginx/html 是本地 php 文件的存储目录,/var/www/html 是容器内 php 文件的存储目录,ro 表示只读。
- php.ini位置 /usr/local/etc/php/php.ini
- 安装pdo_mysql扩展,进入容器执行 /usr/local/bin/docker-php-ext-install pdo_mysql mysqli
- 扩展目录 /usr/local/lib/php/extensions/no-debug-non-zts-20131226/
需要进容器内安装一下mysql扩展,然后改一下php.ini;修改extension_dir为上面的扩展目录,然后把mysqli、pdo_mysql扩展打开
运行nginx容器
docker run \
--name dream.nginx \
--privileged \
-it \
-p 8080:80 \
-v C:/Users/tong/docker/data2/nginx/conf.d:/etc/nginx/conf.d:ro \
-v C:/Users/tong/docker/data2/nginx/html:/usr/share/nginx/html:rw \
-v C:/Users/tong/docker/data2/nginx/logs:/var/log/nginx \
--link dream.php:php \
--link dream.mysql:db \
-d nginx
- --link 添加链接到dream.php与dream.mysql容器
- 注意:只能挂载目录,不能挂载文件,挂载目录应该为绝对路径,windows系统下必须为带盘符的绝对路径
- 挂载的conf.d目录中新建一个default.conf文件,内容为容器里面/etc/nginx/conf.d/default.conf的内容
- 需要修改
C:\Users\tong\docker\data2\nginx\conf.d\default.conf
中php的fastcgi_param
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
测试一下
网站目录C:/Users/tong/docker/data2/nginx/html
中新建phpinfo.php、mysqli.php、pdo_mysql.php
- phpinfo.php
<?php
phpinfo();
?>
- mysqli.php
<?php
$con = mysqli_connect("192.168.0.169","root","123456","blog",3306);
if (!$con){
die('Could not connect: ' . mysqli_connect_error());
}
$sql = "set names utf8";
mysqli_query($con,$sql);
$sql = "select * from user";
$result = mysqli_query($con,$sql);
$list = array();
while ($row = mysqli_fetch_row($result)) {
$list[]=$row;
}
var_dump($list);
?>
- pdo_mysql.php
<?php
$dbms='mysql'; //数据库类型
$host='192.168.0.169'; //数据库主机名
$dbName='blog'; //使用的数据库
$user='root'; //数据库连接用户名
$pass='123456'; //对应的密码666
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
$dbh->exec("set names 'utf8'");
echo "连接成功<br/>";
/*你还可以进行一次搜索操作*/
foreach ($dbh->query('SELECT * from user') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
}
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
//$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
- 数据库主机名请使用本机ip地址,不能使用
localhost
或127.0.0.1
,否则可能连接不上mysql容器 - 打开浏览器
http://localhost:8080/mysqli.php